使用Apache通过JK实现多Tomcat负载均衡集群实现总结及自己的感悟
2015-05-02 15:09
537 查看
第一次玩负载均衡集群,使用的是Apache、Tomcat,通过JK来实现。由于没有这方面经验,自己摸索了好多天,直到今天才基本完全搞定了。也了解了里面的一些相关原理,自己也亲自动手验证了一些原理。现将自己的经历过程和一些感悟总结分享一下,也以便自己日后查阅。
首先是下载Apache、Tomcat、JK,这没什么说的,主要注意一下需要的Apache的版本,然后是Apache、Tomcat集群相应的JK版本。版本不对的话会有问题。我自己在这里没遇到多大问题。
第一步,先做负载均衡,网上这方面的配置很多,随便找一个照着做,主要是针对Apache和Tomcat的配置文件的配置,这里我主要遇到的一个问题就是:Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题,关于这个问题详细解决方法及说明可以参照我之前写的一遍博文/article/8232694.html ,这个不算什么大问题,就是Apache的一个配置没有配置好,但困扰了我很多天。希望可以帮到遇到同样的小伙伴们。这个问题解决了,就OK,负载均衡搞定。代码及相关配置我就不贴了,网上相关信息太多。
第二步,集群,也是照着网上的配置做了一遍,同样也遇到个问题,就是session不能共享,没有复制。搞了好几个小时,不知道哪里有问题,最后发现在新建tomcat的工程下的WEB-INF文件夹的时候错将WEB-INF文件夹名写成了WEN-INF,哎!粗心害死人啊,就是因为这一个小小的字母写错了,浪费了我好几个小时,最后还是偶然发现的。不多说了,配置方面的东西一定要认真认真再认真。吸取教训。这个问题搞定了,也就OK了。
至此负载均衡集群的全部工作总算完成了。但我想详细了解一下sticky_session和sticky_session_force这个配置的意义,所以网上找了相关文章看了看,自己照着试验了一下,现将网上了解的和自己总结的一些关于这两个配置的说明写一下:
sticky_session sticky_session_force 结论
0(false) 0(false) session无黏性,session会复制(共享)
0[b](false) 1(true) session无黏性,session会复制(共享)[/b]
1[b](true) 0(false)
session有粘性(非强制),session会复制(共享)[/b]
1[b](true) 1(true)
session有粘性(强制),session没必要再复制共享[/b]
[b] 以上这张表格是我从网上看到别人总结的,现我把自己的一些理解和感悟写一下:[/b]
1、当sticky_session为0(false)时,表示session无黏性,session会复制共享,也就是这个时候用户发出的request请求(不管是不是来自同一个用户和会话),都会根据负载均衡策略分发给不同的server处理,这个时候为了做到负载均衡集群,理所当然session肯定得共享。这个[b]时候sticky_session_force参数的配置无关紧要,相当于失效了。
所以两个配置情况就明了。[/b]
2、当sticky_session为1(true)时,session有粘性,该种方式下,当用户发出第一个request后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的jvm路由,以后该用户的所有request都会被绑定这个jvm路由,用户只会与该server发生交互,这种策略被称为粘性session(session
sticky)。由此可以理解无粘性session(session
sticky)。此时如果 sticky_session_force 为0(false) ,表示session有粘性,但是非强制的,session会复制共享。这个时候apache将某个请求分发给其中一台server,以后这个用户所有请求均会由于这个server来处理,但是如果当该server由于种种原因停掉了,不能再处理这个用户请求了,那么会由集群中另外的一个server来接手处理这个用户的请求(由于session复制共享了,此时理所当然session也应该复制共享,否则不能集群了),个人感觉这才是集群的经典用例。一般情况下我们配置集群通常也就使用该种配置比较好。而如果 sticky_session_force 为1(true),表示session有粘性,而且是强制的,session不会复制共享。这个时候就有点类似于apache将某个请求分发给其中一台server,然后这个请求就一直与这个server玩,当该server由于种种原因停掉了,不能再处理这个用户请求了,集群中另外的server也不会来接手处理这个用户的请求,也就是跟集群中另外[b]的[/b]server没太大关系了。个人感觉这种没太大意思,有点脱离了集群的本意了,负载均衡还可以算得上有点。本人亲测这个配置的时候,发出一个请求,如果请求被分配到server1上处理,此将server1停掉,再在这个请求下访问时,会报500。
[b]以上这些总结都是经过本人亲测检验过的。希望对小伙伴们有帮助。本人文笔不材,表达不当及有错误之处欢迎拍砖。欢迎评论指正交流。[/b]
首先是下载Apache、Tomcat、JK,这没什么说的,主要注意一下需要的Apache的版本,然后是Apache、Tomcat集群相应的JK版本。版本不对的话会有问题。我自己在这里没遇到多大问题。
第一步,先做负载均衡,网上这方面的配置很多,随便找一个照着做,主要是针对Apache和Tomcat的配置文件的配置,这里我主要遇到的一个问题就是:Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题,关于这个问题详细解决方法及说明可以参照我之前写的一遍博文/article/8232694.html ,这个不算什么大问题,就是Apache的一个配置没有配置好,但困扰了我很多天。希望可以帮到遇到同样的小伙伴们。这个问题解决了,就OK,负载均衡搞定。代码及相关配置我就不贴了,网上相关信息太多。
第二步,集群,也是照着网上的配置做了一遍,同样也遇到个问题,就是session不能共享,没有复制。搞了好几个小时,不知道哪里有问题,最后发现在新建tomcat的工程下的WEB-INF文件夹的时候错将WEB-INF文件夹名写成了WEN-INF,哎!粗心害死人啊,就是因为这一个小小的字母写错了,浪费了我好几个小时,最后还是偶然发现的。不多说了,配置方面的东西一定要认真认真再认真。吸取教训。这个问题搞定了,也就OK了。
至此负载均衡集群的全部工作总算完成了。但我想详细了解一下sticky_session和sticky_session_force这个配置的意义,所以网上找了相关文章看了看,自己照着试验了一下,现将网上了解的和自己总结的一些关于这两个配置的说明写一下:
sticky_session sticky_session_force 结论
0(false) 0(false) session无黏性,session会复制(共享)
0[b](false) 1(true) session无黏性,session会复制(共享)[/b]
1[b](true) 0(false)
session有粘性(非强制),session会复制(共享)[/b]
1[b](true) 1(true)
session有粘性(强制),session没必要再复制共享[/b]
[b] 以上这张表格是我从网上看到别人总结的,现我把自己的一些理解和感悟写一下:[/b]
1、当sticky_session为0(false)时,表示session无黏性,session会复制共享,也就是这个时候用户发出的request请求(不管是不是来自同一个用户和会话),都会根据负载均衡策略分发给不同的server处理,这个时候为了做到负载均衡集群,理所当然session肯定得共享。这个[b]时候sticky_session_force参数的配置无关紧要,相当于失效了。
所以两个配置情况就明了。[/b]
2、当sticky_session为1(true)时,session有粘性,该种方式下,当用户发出第一个request后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的jvm路由,以后该用户的所有request都会被绑定这个jvm路由,用户只会与该server发生交互,这种策略被称为粘性session(session
sticky)。由此可以理解无粘性session(session
sticky)。此时如果 sticky_session_force 为0(false) ,表示session有粘性,但是非强制的,session会复制共享。这个时候apache将某个请求分发给其中一台server,以后这个用户所有请求均会由于这个server来处理,但是如果当该server由于种种原因停掉了,不能再处理这个用户请求了,那么会由集群中另外的一个server来接手处理这个用户的请求(由于session复制共享了,此时理所当然session也应该复制共享,否则不能集群了),个人感觉这才是集群的经典用例。一般情况下我们配置集群通常也就使用该种配置比较好。而如果 sticky_session_force 为1(true),表示session有粘性,而且是强制的,session不会复制共享。这个时候就有点类似于apache将某个请求分发给其中一台server,然后这个请求就一直与这个server玩,当该server由于种种原因停掉了,不能再处理这个用户请求了,集群中另外的server也不会来接手处理这个用户的请求,也就是跟集群中另外[b]的[/b]server没太大关系了。个人感觉这种没太大意思,有点脱离了集群的本意了,负载均衡还可以算得上有点。本人亲测这个配置的时候,发出一个请求,如果请求被分配到server1上处理,此将server1停掉,再在这个请求下访问时,会报500。
[b]以上这些总结都是经过本人亲测检验过的。希望对小伙伴们有帮助。本人文笔不材,表达不当及有错误之处欢迎拍砖。欢迎评论指正交流。[/b]
相关文章推荐
- 使用Apache通过JK实现多Tomcat负载均衡集群时,Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题
- Apache+Tomcat实现负载均衡及集群(session同步)--四、负载均衡(1)使用mod_jk
- Apache+Tomcat实现负载均衡及集群(session同步)--四、负载均衡(2)使用mod_proxy
- 使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题
- apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群
- Tomcat+Apache+mod_JK实现集群配置/负载均衡
- Apache Jboss集群 - Tomcat的负载均衡(apache的mod_jk来实现)
- 使用Apache HTTPD和JK实现Tomcat集群
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)
- windows下、apache 2.2 与tomcat 7 通过jk方式实现 负载均衡配置
- Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南
- Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南
- Apache+tomcat集群和负载均衡使用mod_proxy总结
- 使用apache和nginx代理实现tomcat负载均衡及集群配置详解
- 使用apache和nginx代理实现tomcat负载均衡及集群配置详解
- Tomcat的集群配置(Apache + mod_jk + tomcat来实现tomcat集群的负载均衡)
- apache http service 2.4 + mod_jk + tomcat 8 集群配置总结
- Apache + Tomcat + mod_jk实现集群服务及session共享
- Apache + Tomcat +mod_jk- win7与linux下实现负载均衡与集群-