Apache+Tomcat负载均衡及Session绑定的实现Word格式文档下载.docx
《Apache+Tomcat负载均衡及Session绑定的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Apache+Tomcat负载均衡及Session绑定的实现Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
![Apache+Tomcat负载均衡及Session绑定的实现Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/369a23cb-bb20-43a7-9138-db223ab9f30c/369a23cb-bb20-43a7-9138-db223ab9f30c1.gif)
只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。
∙内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。
具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。
内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。
集群配置
从上图可知,由服务实体1、服务实体2和负载均衡器组成了一个集群。
服务实体1和服务实体2参与对客户端的服务支持工作,均衡负载器为客户端维护集群的单一影像。
集群实体间通过内部的通信网交流信息,这种交流机制一般采用组播协议。
负载均衡器通过内部通信网探测各服务实体的心跳信息,服务实体间通过内部通信网完成任务资源的传播。
可以看出,配置集群主要由配置服务实体和配置负载均衡器两部分组成。
本文使用tomcat5.5.20、apache2.2.11配置集群环境。
2.1准备软件
∙tomcat是开源服务器,下载地点http:
//tomcat.apache.org/download-55.cgi;
(本文使用的apache-tomcat-5.5.20.zip)
∙apache是开源的www服务器,下载地点http:
//httpd.apache.org/download.cgi;
(本文使用的apache_2.2.11-win32-x86-no_ssl.msi)
∙jk2模块,jk是mod_jserv的替代者,它是Tomcat-Apache插件,处理Tomcat和Apache之间的通信,在集群配置中充当负载均衡器的作用。
JK2是符合apache2.x系列的新品,下载地址http:
//apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/。
(本文使用的mod_jk-1.2.28-httpd-2.2.3.so)
2.2配置负载均衡器在apache下配置负载均衡器分为三步,注意每次修改httpd.conf和workers.properties时不要忘了重新启动apache。
∙第一步,安装和调试apache
负载均衡器jk2模块是apachewww服务的插件,所以配置负载均衡器就得先安装apache。
本文下载的是windows版本2.2.11,执行msi并回答一些简单问题就可完成apache的任务。
值得注意的是,安装并启动apache后如果apache对http:
//localhost/地址没反应,你得修改apache安装路径下htdocs目录下的index.html.xx文件,比如把index.html.en改成index.html。
∙第二步,安装jk2
把下载的mod_jk-1.2.28-httpd-2.2.3.so改名为mod_jk2.so放到apache的modules目录下,修改apache的conf目录下的httpd.conf,在文件最后加入一行includeconf\mod_jk2.conf,在conf目录下创建mod_jk2.conf文件,内容如下:
Conf代码
1#Loadmod_jk2module
1LoadModulejk_modulemodules/mod_jk2.so
1
1#Wheretofindworkers.properties
1JkWorkersFileconf/workers.properties
1#Wheretoputjklogs
1JkLogFilelogs/mod_jk2.log
1#Setthejkloglevel[debug/error/info]
1JkLogLevelinfo
1#Selectthelogformat
1JkLogStampFormat"
[%a%b%d%H:
%M:
%S%Y]"
1#JkOptionsindicatetosendSSLKEYSIZE,
1JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories
1#JkRequestLogFormatsettherequestformat
1JkRequestLogFormat"
%w%V%T"
1#SendJSPsforcontext/toworkernamedloadBalancer
1JkMount/*.jsploadBalancer
#Loadmod_jk2module
LoadModulejk_modulemodules/mod_jk2.so
#Wheretofindworkers.properties
JkWorkersFileconf/workers.properties
#Wheretoputjklogs
JkLogFilelogs/mod_jk2.log
#Setthejkloglevel[debug/error/info]
JkLogLevelinfo
#Selectthelogformat
JkLogStampFormat"
#JkOptionsindicatetosendSSLKEYSIZE,
JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories
#JkRequestLogFormatsettherequestformat
JkRequestLogFormat"
#SendJSPsforcontext/toworkernamedloadBalancer
JkMount/*.jsploadBalancer
∙第三步,配置jk2
jk2的配置全在一个配置文件中,文件名为workers.properties,和apache的httpd.conf放在同一个目录下。
以下是这个文件的内容:
Properties代码
1#
1#workers.properties
1#listtheworkersbyname
1worker.list=tomcat1,tomcat2,loadBalancer
1#------------------------
1#Firsttomcatserver
1worker.tomcat1.port=8009
1worker.tomcat1.host=192.168.0.107
1worker.tomcat1.type=ajp13
1#Specifythesizeoftheopenconnectioncache.
1#worker.tomcat1.cachesize
1#Specifiestheloadbalancefactorwhenusedwith
1#aloadbalancingworker.
1#Note:
1#---->
lbfactormustbe>
0
Lowlbfactormeanslessworkdonebytheworker.
1worker.tomcat1.lbfactor=100
1#Secondtomcatserver
1worker.tomcat2.port=8009
1worker.tomcat2.host=192.168.0.163
1worker.tomcat2.type=ajp13
1#worker.tomcat2.cachesize
1worker.tomcat2.lbfactor=100
1#LoadBalancerworker
1#Theloadbalancer(typelb)workerperformsweightedround-robin
1#loadbalancingwithstickysessions.
Ifaworkerdies,theloadbalancerwillcheckitsstate
1#onceinawhile.Untilthenallworkisredirectedtopeer
1#worker.
1worker.loadBalancer.type=lb
1worker.loadBalancer.balanced_workers=tomcat1,tomcat2
1#ENDworkers.properties
#
#workers.properties
#listtheworkersbyname
worker.list=tomcat1,tomcat2,loadBalancer
#------------------------
#Firsttomcatserver
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.0.107
worker.tomcat1.type=ajp13
#Specifythesizeoftheopenconnectioncache.
#worker.tomcat1.cachesize
#Specifiestheloadbalancefactorwhenusedwith
#aloadbalancingworker.
#Note:
#---->
0
Lowlbfactormeanslessworkdonebytheworker.
worker.tomcat1.lbfactor=100
#Secondtomcatserver
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.0.163
worker.tomcat2.type=ajp13
#worker.tomcat2.cachesize
worker.tomcat2.lbfactor=100
#LoadBalancerworker
#Theloadbalancer(typelb)workerperformsweightedround-robin
#loadbalancingwithstickysessions.
Ifaworkerdies,theloadbalancerwillcheckitsstate
#onceinawhile.Untilthenallworkisredirectedtopeer
#worker.
worker.loadBalancer.type=lb
worker.loadBalancer.balanced_workers=tomcat1,tomcat2
#ENDworkers.properties
∙
对于jk2模块的负载均衡配置可参见相关站点,值得提的是jk2的负载均衡还支持权重分配等优秀功能。
测试:
在跑tomcat1实例的机器的webapps/testGroup测试项目目录生成如下内容的index.jsp文件:
(设置session)
Jsp代码
2<
%
3System.out.println("
==========================="
);
4System.out.println(session.getAttribute("
test"
));
5session.setAttribute("
"
Session"
6%>
7
8<
html>
9<
bodybgcolor="
red"
>
10<
center>
11<
h1>
Tomcat1<
/h1>
12<
/body>
13<
/html>
<
System.out.println("
System.out.println(session.getAttribute("
session.setAttribute("
%>
<
同理,在跑tomcat2实例的机器的webapps/testGroup测试项目目录生成如下内容的index.jsp文件:
14<
15System.out.println("
16System.out.println(session.getAttribute("
17%>
18
19<
20<
blue"
21<
22<
Tomcat2<
23<
24<
启动Tomcat1,Tomcat2和Apache服务
Apache服务器ip:
192.168.0.105
Tomcat1服务器ip:
192.168.0.107
Tomcat2服务器ip:
192.168.0.163
首先验证Apache服务器的静态页面是否正常,访问:
http:
//192.168.0.105/(若局域网内不能访问请检查防火墙设置)
验证tomcat和apache配置提供负载均衡,用不同的终端访问:
//192.168.0.105/testGroup/index.jsp
如果你看到红色的页面,表示为tomcat1服务器返回的,
如果你看到兰色的页面,表示为tomcat2服务器返回的。
2.3配置tomcat(绑定session)
同属于一个集群下的两个服务实体,要求功能的同一性,所以我们可先安装和配置第一个tomcat,接着拷贝形成第二个tomcat,最后配置第二个tomcat。
2.3.1修改tomcat1,tomcat2的server.xml
2.3.1.1修改<
Engine/>
标签
在跑第一个tomcat实例的机器上,在大约第120行(去掉注释),将
Enginename="
Standalone"
defaultHost="
localhost"
debug="
0"
替换为:
EnginejvmRoute="
tomcat1"
name="
192.168.0.105"
/>
对跑第二个tomcat实例的机器上,替换为jvmRoute="
tomcat2"
.
Xml代码
25<
!
--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:
26<
jvmRoute="
jvm1"
27-->
28<
29
-->
有的文档写得是在配置中加入一行<
/Engine>
其实是不对的,这样负载均衡是没有问题的,但是不能做session绑定,也就是说同一用户会在两台服务器上跳来跳去。
这是由于jvmRoute不正确引起的,因为如果只是加入一行的话,是没有什么作用的,Engine仍然是原来的Engine,而原来的Engine中jvmRoute是不正确的,所以一定要替换。
而且这个jvmRoute一定要跟workers.properties中的名称完全匹配,否则也不能实现session绑定.
2.3.1.2修改<
Cluster/>
将<
标签注释去掉,代码如下:
30<
ClusterclassName="
org.apache.catalina.cluster.tcp.SimpleTcpCluster"
31managerClassName="
org.apache.catalina.cluster.session.DeltaManager"
32expireSessionsOnShutdown="
false"
33useDirtyFlag="
true"
34notifyListenersOnReplication="
35
36<
Membership
37className="
org.a