2012-08-30 62 views
1

我想用mod_jk配置Apache負載平衡解決方案。羣集工作但不負載平衡。Apache mod_jk負載平衡不工作,但故障轉移工作

我有我的筆記本電腦上運行的Apache httpd 2.2服務器。我有兩個VMWare虛擬機客戶操作系統。這三個都是窗戶。 VMware機器承載爲Web應用程序提供服務的Apache Tomcat服務器。我使用mod_jk配置了httpd.conf文件,並使用worker信息配置了worker屬性文件。我可以使用URL:http://localhost/Web-application訪問我的Web應用程序。如果我停止一臺服務器,則應用程序將由另一臺服務器提供。然而,不是兩者同時。一些提取物下面:

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 

我還設置中的jvmRoute在server.xml文件中的這些服務器上:

Server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">   
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 

是否需要更多的提取物可以上傳他們

回答

0

你配置的負載均衡的方式(找OK我)與粘性會話意味着一旦創建了會話,後續請求將被引導到相同的Tomcat實例。您可以通過查看應附加.worker1.worker2的會話cookie值來認識到這一點。 Apache HTTPD使用該後綴來決定將哪個Tomcat實例發送到傳入的請求。

如果沒有會話cookie,請按循環方式在可用的Tomcat中分發請求。因此,爲了測試負載平衡,您通常需要多個瀏覽器實例持有不同的會話Cookie。或者嘗試設置sticky_session=false以查看全部請求轉發的循環方式。

1

Apache的

  • 所有會話屬性必須實現java.io.Serializable
  • 取消註釋在server.xml中
  • 羣集元素如果您已定義的自定義集羣閥門,確保如果Tomcat實例在同一臺計算機上運行,​​請確保tcpListenPort屬性對於每個實例都是唯一的,在大多數情況下,Tomcat足夠智能,通過自動檢測範圍爲4000-4100的可用端口來解決此問題確保您的web.xml包含元素
  • 如果您使用的是mod_jk,請確保將jvmRoute屬性設置爲並且jvmRoute屬性值與workers.properties中的worker名稱匹配
  • 確保所有節點具有相同的時間並與NTP服務同步! 確保您的負載均衡器配置爲粘滯會話模式。

我會先嚐試 確保是的jvmRoute OK

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」

相關問題