我正在尝试使用mod_jk配置Apache负载平衡解决方案。集群工作但不负载平衡。
我的笔记本电脑上运行着Apache httpd 2.2服务器。我有两个VMWare虚拟机访客操作系统。这三个都是windows。威睿机器托管了为Web应用程序提供服务的Apache Tomcat服务器。我已经配置了带有mod_jk的httpd. conf文件和带有worker信息的Worker属性文件。我可以使用URL访问我的Web应用程序: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:
服务器. xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
如果需要更多的摘录,我可以上传
您使用粘性会话配置负载平衡的方式(在我看来没问题)意味着一旦创建会话,后续请求将被定向到同一个Tomcat实例。您可以通过查看应附加. worker1
或.worker2
的会话cookie值来识别这一点。Apache HTTPD使用此后缀来决定向哪个Tomcat实例发送传入请求。
如果没有会话cookie,请求应该以循环方式在可用的Tomcat之间分发。因此,为了测试负载平衡,您通常需要多个浏览器实例保存不同的会话cookie。或者尝试设置sticky_session=false
以查看所有以循环方式转发的请求。
来自apache:
我将首先尝试确保jvmRoute正常
会话粘性不是使用会话跟踪表来实现的。相反,每个Tomcat实例都有一个单独的名称,并在会话id的末尾添加其名称。当负载均衡器看到会话id时,它会找到Tomcat实例的名称并通过正确的成员工作人员发送请求。为此,您必须将Tomcat实例的名称设置为每个Tomcat服务器. xml的Engine元素中的jvmRoute属性的值。Tomcat的名称需要等于相应负载均衡器成员的名称。在上面的示例中,主机“myhost1”上的Tomcat需要jvmRoute="worker1",主机“myhost2”上的Tomcat需要jvmRoute="worker2"。
你的tomcat 2 jvmRoute应该是“worker2”