Apache HTTP Server 與 Tomcat 負載均衡css
參考資料 https://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/html
環境以及所需軟件node
window7(64),JDK1.7(64) apache
apache-tomcat-7.0.35-windows-x64.zipwindows
Apache 服務器 (httpd-2.2.25-win32-x86-no_ssl.msi )tomcat
JK插件 (tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x.zip)服務器
其中須要注意的是JK插件的版本與Apache服務器的版本須要一致 其中紅色標記session
1、配置apache的httpd.conf文件加載JK插件,該文件在軟件安裝目錄的conf目錄下面。負載均衡
配置以下:jvm
LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
2、在httpd.conf文件的同級目錄新建倆個文件。workers.properties 和 uriworkermap.properties,這倆個文件的名字須要和上面配置裏的名字一致。
配置以下: 官方文檔 http://tomcat.apache.org/connectors-doc/reference/workers.html
須要注意的是下面括號裏的爲說明 使用的時候須要拿掉。
workers.properties
worker.list=DLOG4J, status # localhost server 1 # ------------------------ worker.s1.port=8009 worker.s1.host=localhost worker.s1.type=ajp13 worker.s1.lbfactor = 1 # localhost server 2 # ------------------------ worker.s2.port=8009 (Tomcat的AJP/1.3端口 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> 須要和tomcat的service.xml裏配置的端口一致) worker.s2.host=192.168.1.213 (Tomcat所在機器的IP地址) worker.s2.type=ajp13 (worker的類型) worker.s2.lbfactor = 1 (負載均衡的權重,值越大被訪問的次數越高) worker.DLOG4J.type=lb worker.retries=3 worker.DLOG4J.balanced_workers=s1,s2 worker.DLOG4J.sticky_session=True (粘結SESSION策略,即將同一個客戶端的請求都轉發到相同的Tomcat上面) worker.status.type=status (監控用的)
首先咱們配置了兩個類型爲 ajp13 的 worker 分別是 s1 和 s2,它們指向同在不一樣服務器上運行在兩個Tomcat 。接下來咱們配置了一個類型爲 lb(也就是負載均衡的意思)的 worker,它的名字是 DLOG4J,這是一個邏輯的 worker,它用來管理前面配置的兩個物理鏈接 s1 和 s2。最後還配置了一個類型爲 status 的 worker,這是用來監控 JK 自己的模塊。有了這三個 worker 還不夠,咱們還須要告訴 JK,哪些 worker 是可用的,因此就有 worker.list = DLOG4J, status 這行配置。
uriworkermap.properties
接下來即是 URI 的映射配置了,咱們須要指定哪些連接是由 Tomcat 處理的,哪些是由 Apache 直接處理的,看看下面這個文件你就能明白其中配置的意義。
/*=DLOG4J
/jkstatus=status
!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
全部的請求都由 DLOG4J 這個 worker 進行處理,可是有幾個例外,/jkstatus 請求由 status 這個 worker 處理(監控管理界面),另外這個配置中每一行數據前面的感嘆號是什麼意思呢?感嘆號表示接下來的 URI 不要由 JK 進行處理,也就是 Apache 直接處理全部的圖片、css 文件、js 文件以及靜態 html 文本文件,其餘的請求由JK處理,也就是咱們所說的動態資源,JK會把請求負載到配置好的tomcat,這樣就完成了讓Apache來處理靜態資源,讓JK負載tomcat來處理動態請求。
3、配置TOMCAT
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
分別配置每臺Tomcat服務器的service.xml jvmRoute="s1" 這裏的"s1" 須要與 workers.properties 裏面定義的名字一致。
上面的配置就完成了Apache與tomcat的負載均衡的配置,下面在介紹一些額外的配置。
Tomcat熱備,顧名思義就是配置倆個tomcat,平時使用其中一個,另一個作備用,若是平時使用的這個tomcat掛了,那麼會自動切換到另一個。
# The advanced router LB worker worker.list=router worker.router.type=lb worker.router.balance_workers=worker1,worker2 # Define the first member worker worker.worker1.type=ajp13 worker.worker1.host=myhost1 worker.worker1.port=8009 # Define preferred failover node for worker1 worker.worker1.redirect=worker2 (配置當worker1掛機的時候 會使用worker2) # Define the second member worker worker.worker2.type=ajp13 worker.worker2.host=myhost2 worker.worker2.port=8009 # Disable worker2 for all requests except failover (worker2只接受worker1失敗時轉發過來的請求) worker.worker2.activation=disabled
worker.worker1.redirect=worker2的意思是告訴負載均衡器(load balancer)當worker1出現問題時把請求轉發給worker2。
worker.worker2.activation=disabled的意思是在全部狀況下worker2不接受任何請求,除了worker1出現問題時轉發過來的請求。
以上的配置都是基於Session粘連的配置方式worker.DLOG4J.sticky_session=True 會將贊成客戶端的請求始終綁定到同一個Tomcat上。
接下來咱們來配置第二種方式Session共享(參考 http://blog.csdn.net/extreme421/article/details/16113417)
1、tomcat的server.xml
啓用<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>標籤,注:tomcat01和tomcat02都要啓用。
2、httpd.conf
修改Apache的httpd.conf配置 在最後面加上以下配置 注意要加到</IfModule>前面 ProxyRequests Off ProxyPass / balancer://abc/ stickysession=jsessionid nofailover=On <Proxy balancer://abc/> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=s1 BalancerMember ajp://192.168.1.213:8009 loadfactor=1 route=s2 </Proxy>
3、workers.properties
worker.DLOG4J.sticky_session=False 修改 workers.properties 關閉粘連