我正在尝试使用mod_jk配置Apache负载平衡解决方案。群集工作但不负载平衡。
我的笔记本电脑上运行了Apache httpd 2.2服务器。我有两个VMWare虚拟机客户操作系统。这三个都是窗户。 VMware计算机托管为Web应用程序提供服务的Apache Tomcat Server。我已经使用mod_jk配置了httpd.conf文件,并使用worker信息配置了worker属性文件。我可以使用以下网址访问我的网络应用程序:http://localhost/Web-application
。如果我停止一台服务器,那么应用程序将从另一台服务器提供。但不是两个在同一时间。一些摘录如下:
httpd.conf文件:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log"
JkLogLevel info
JkMount /MovieBooking loadbalancer
JkMount /MovieBooking/* loadbalancer
workers.properties文件
workers.tomcat_home=/worker1
workers.java_home=$JAVA_HOME
worker.list=loadbalancer,jkstatus,worker1,worker2
#Declare Tomcat server workers 1 through n
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.sticky_session=1
worker.worker1.type=ajp13
worker.worker1.host=192.168.200.244
worker.worker1.port=8109
worker.worker1.lbfactor=1
worker.worker2.type=ajp13
worker.worker2.port=8109
worker.worker2.host=192.168.200.243
worker.worker2.lbfactor=1
worker.jkstatus.type=status
我还在这些服务器上的server.xml文件中设置了jvmroute:
的Server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
如果需要更多提取,我可以上传
答案 0 :(得分:1)
使用粘性会话配置负载平衡(对我来说没问题)的方式意味着一旦创建了会话,后续请求将被定向到同一个Tomcat实例。您可以通过查看应附加.worker1
或.worker2
的会话Cookie值来识别此问题。 Apache HTTPD使用此后缀来决定将传入请求发送到哪个Tomcat实例。
如果没有会话cookie,请求应以循环方式在可用的Tomcats中分发。因此,为了测试load-balacing,您通常需要几个持有不同会话cookie的浏览器实例。或者尝试设置sticky_session=false
以查看转发循环风格的所有请求。
答案 1 :(得分:1)
:
Session stickyness is not implemented using a tracking table for sessions. Instead each Tomcat instance gets an individual name and adds its name at the end of the session id. When the load balancer sees a session id, it finds the name of the Tomcat instance and sends the request via the correct member worker. For this to work you must set the name of the Tomcat instances as the value of the jvmRoute attribute in the Engine element of each Tomcat's server.xml. The name of the Tomcat needs to be equal to the name of the corresponding load balancer member. In the above example, Tomcat on host "myhost1" needs jvmRoute="worker1", Tomcat on host "myhost2" needs jvmRoute="worker2".
你的tomcat 2 jvmRoute应该是“worker2”