?
6、Apache與多個Tomcat服務器集成時的負載平衡
在實際應用中,如果網站的訪問量非常大,為了提高訪問速度,可以將多個Tomcat服務器與Apache集成,讓它們共同分擔運行Servlet/JSP組件的任務。 JK插件的loadbalancer(負載平衡器)負責根據在workers.properties文件中預先配置的lbfactor(負載平衡因數)為這些Tomcat服務器分配工作負荷,實現負載平衡。
假定Apache和兩個Tomcat服務器集成,一個Tomcat服務器和Apache運行在同一臺機器上,使用的JK端口為8009,還有一個Tomcat服務器運行在另一臺機器上,主機名為anotherhost,使用的JK端口為8009。以下是把Apache和這兩個Tomcat服務器集成的步驟。
(1)把mod_jk_2.0.46.dll拷貝到/lib目錄下。 (2)在/conf目錄下創建如下的workers.properties文件(注意粗體部分的內容):
ps=\
#指定文件路徑分割符
worker.list=worker1,
worker2,loadbalancer
worker.worker1.port=8009
#工作端口,若沒占用則不用修改
worker.worker1.host=localhost
#Tomcat服務器的地址
worker.worker1.type=ajp13
#類型
worker.worker1.lbfactor=100
#負載平衡因數
worker.worker2.port=8009
#工作端口,若沒占用則不用修改
worker.worker2.host=anotherhost
#Tomcat服務器的地址
worker.worker2.type=ajp13
#類型
worker.worker2.lbfactor=100
#負載平衡因數
worker.loadbalancer.type=lb
worker.loadbalancer.
balanced_workers=worker1, worker2
|
以上文件創建了兩個worker:worker1和worker2分別代表兩個Tomcat服務器,它們由worker.loadbalancer來分配工作負荷。
(3)修改/conf/httpd.conf文件,在文件末尾加入如下內容:
# Using mod_jk2.dll to
redirect dynamic calls to Tomcat
LoadModule jk_module
modules\mod_jk_2.0.46.dll
JkWorkersFile "conf\workers.properties"
JkLogFile "logs\mod_jk2.log"
JkLogLevel debug
JkMount /*.jsp loadbalancer
JkMount /helloapp/* loadbalancer
|
當客戶請求"/*.jsp"或"/helloapp/*"形式的URL,該請求都由loadbalancer來負責轉發,它根據在workers.properties文件中為worker1和worker2分配的lbfactor屬性,來決定如何調度它們。
只有在使用了loadbalancer的情況下,workers.properties文件中worker的lbfactor屬性才有意義,lbfactor取值越大,表示分配給Tomcat服務器的工作負荷越大。
(4)修改兩個Tomcat服務器的JK端口,確保它們和workers.properties文件中的配置對應。此外,在使用了loadbalancer后,要求worker的名字和Tomcat的server.xml文件中的元素的jvmRoute屬性一致。
所以應該分別修改兩個Tomcat的sever.xml文件,把它們的元素的jvmRoute屬性分別設為worker1和worker2。以下是修改后的兩個Tomcat服務器的元素:
Tomcat服務器1:
<Engine name="Catalina"
defaultHost="localhost"
debug="0" jmvRoute="worker1">
|
Tomcat服務器2:
<Engine name="Catalina"
defaultHost="localhost"
debug="0" jmvRoute="worker2">
|
(5)在完成以上步驟后,分別啟動兩個Tomcat服務器和Apache服務器,然后訪問http://localhost/index.jsp,會出現Tomcat服務器的默認主頁。由于此時由loadbalancer來調度Tomcat服務器,因此不能斷定到底訪問的是哪個Tomcat服務器的index.jsp,這對于Web客戶來說是透明的。
如果在進行以上實驗時,兩個Tomcat服務器都在同一臺機器上運行,應該確保它們沒有使用相同的端口。在Tomcat的默認的server.xml中,一共配置了以下3個端口:
<Server port="8005"
shutdown="SHUTDOWN" debug="0">
<!-- Define a non-SSL Coyote
HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" />
<!-- Define a Coyote/JK2
AJP 1.3 Connector on port 8009 -->
<Connector port="8009" />
|
如果兩個Tomcat服務器都在同一臺機器上運行,則至少應該對其中一個Tomcat服務器的以上3個端口號都進行修改。
此外,如果把Tomcat和其他HTTP服務器集成,Tomcat主要負責處理HTTP服務器轉發過來的客戶請求,通常不會直接接受HTTP請求。因此為了提高Tomcat的運行性能,可以關閉Tomcat的HTTP連接器,方法為在server.xml中把Tomcat的HTTP Connector的配置注釋掉。
|