一、系统与软件版本
软件 | 版本号 |
CentOS | 6.5 |
JDK | 1.6.0_45 |
tomcat | 7.0.55 |
httpd | 2.2.31 |
二、部署步骤
【条件有限,本次是在同一台机器上进行部署,因此为了避免端口冲突,需要对一下的端口进行修改】
1、首先把已安装好的tomcat复制一份,并更改名字。以本次为例,原tomcat文件夹名为tomcat-7.0.55,复制一份后,更名为tomcat-7.0.55-2
2、更改tomcat-7.0.55-2中的conf目录下的server.xml文件,修改如下
tomcat1 | tomcat2 | |
shutdown | 8005 | 8006 |
http | 8080 | 8081 |
https | 8443 | 8444 |
ajp | 8009 | 8010 |
3、分别更改两个tomcat中的conf目录下的server.xml,修改如下:
① tomcat-7.0.55 : <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
② tomcat-7.0.55-2 : <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
这里的worker1/worker2为自定义字符串,为了区分接下来测试中是用到哪个tomcat服务器
【<Engine>标签是每个请求的入口点,用来处理Connector收到的http请求,它将匹配请求和自己的虚拟主机,并把请求转发给对应的Host来处理。】
③ 将<Engine>中的<Cluster>的注释给去掉(<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>)
【Cluster是tomcat的集群配置,默认的配置可以满足一般的开发需求】
4、分别修改两个tomcat的web.xml文件,修改如下:
① 加上<distributable/>标签
【distributable表示该服务器是否可用于分布式处理】
5、配置httpd服务器,配置如下:
① 在安装好的conf目录下,对httpd.conf做配置,添加负载均衡和虚拟主机
NameVirtualHost 10.0.2.15:80
<VirtualHost 10.0.2.15:80>
ServerName 10.0.2.15:80
DocumentRoot /usr/local/apache2/htdocs
ProxyRequests off
<Proxy balancer://mycluster>
BalancerMember ajp://10.0.2.15:8009 route=worker1
BalancerMember ajp://10.0.2.15:8010 route=worker2
#Proxyset lbmethod=bytraffic scolonpathdelim=On nofailover=off timeout=2
Proxyset lbmethod=bytraffic stickysession=JSESSIONID|jsessionid scolonpathdelim=On nofailover=off timeout=2
</Proxy>
ProxyPass /js !
ProxyPass /test balancer://mycluster/test
</VirtualHost>
【<Proxy>定义了集群成员列表;route中的值要与tomcat中的server.xml中的jvmRoute相同;最后一行的配置说明:/test的请求交给tomcat集群来处理】
【Proxyset中的stickysession定义了是否session粘贴】
三、测试
1、将写好的项目分别放到两个tomcat的webapps目录下
2、启动两个tomcat以及httpd服务器:
【./startup.sh(启动tomcat)、./apachectl -k start(启动httd服务器)】
3、测试负载均衡【把httpd.conf中Proxyset的stickysession属性暂时注释掉】
① 访问http://lcoalhost/test/test.jsp
② 对页面进行刷新,发现session发生改变
③ 对页面进行不断的刷新,session ID不断的替换
④ 关掉任一tomcat后进行刷新,无论刷新几次sessionID都不会改变
4、测试session复制【把httpd.conf中Proxyset的stickysession属性打开(需要重启httpd服务器)】
① 将上面测试中关闭掉的tomcat打开,现在两个tomcat都应该在运行;
② 进入到测试页,当前的session为worker2,对页面上的表单进行填写并提交:
③ 刷新页面后sessionID不会改变,因此此时在httpd.conf中已经打开了stickysession熟悉,表明该session的全部请求已经交给worker2服务器来处理,这就是【session黏贴】
④ 关闭掉当前处理请求的tomcat服务器(模拟服务器因异常无法继续工作情况),然后刷新页面:
此时的sessionID已经变为worker1,由于worker2无法正常工作,请求转为由worker1服务器来处理。之前session中的值并未丢失,表明session复制已经生效