Apache和Tomcat实现集群和负载均衡
Apache是世界使用排名第一的Web服务器软件,但只支持静态网页。Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。换句话说,Apache是web服务器,Tomcat是应用(java)服务器,一个servlet容器。Apache,Nginx,Tomcat并称为Web服务三剑客。本文讲述如用利用Apache和Tomcat来实现集群和负载均衡。
本文资料借鉴于网络
1.准备工作
首先自然是要下载相关软件:
-
Tomcat:apache-tomcat-6.0.35
-
jk for windows:tomcat-connectors-1.2.32-windows-i386-httpd-2.2.x.zip 必要插件,Apache必须通过该插件方可访问Tomcat
2.安装
按照方式比较简单,直接解压即可,然后把JK插件复制到apache/modules目录下。
3.配置
- (1)修改
/conf/httpd.conf文件,在文件后面加上:
- (2)在
/conf目录下创建:workers.properties文件:
说明:
1.JK插件的负载均衡器根据配置的lbfactor(负载平衡因数),负责为集群系统中的Tomcat服务器分配工作负荷,以实现负载平衡,值越大,负载就越高。每个Tomcat服务器间用集群管理器(SimpleTcpCluster)进行通信,以实现HTTP回话的复制,比如Session。 2.worker.loadbalancer.sticky_seesion如果设为true则说明会话具有“粘性”,也就是如果一个用户在一个Tomcat中建立了会话后则此后这个用户的所有操做都由这个Tomcat服务器承担。集群系统不会进行会话复制。如果设为false则下面的 sticky_session_force无意义。 3.sticky_session_force:假设sticky_session设为true,用户会话具有了粘性,当当前Tomcat服务器停止服务后,如果sticky_session_force为true也就是强制会话与当前Tomcat关联,那么会报500错误,如果设为false则会转到另外的Tomcat服务器。
- (3)修改两个Tomcat的conf/service.xml文件:
确保SHUTDOWN端口、HTTP端口、AJP端口不冲突(这里AJP端口与上述workers.properties中配置保持一致);
在Engine节点启用集群配置,去掉Cluster节点前的注释(默认是注释掉的),并添加jvmRoute属性(与上述workers.properties中配置保持一致);
要实现session复制,还需要在context.xml添加属性distributable=”true”:
或者在应用程序的web.xml中添加
4.写在最后
通过这种方式配置,如果一个用户A发送请求到worker1,如果中途worker1 down掉了,会转向worker2。如果中途worker3启动了,也有可能请求到worker3,但不管worker1是否重新启动,用户A的请求不会再次到worker1,除非用户重新登陆。