深入介紹:apache負載均衡的安裝和實現(xiàn)
在負載均衡技術(shù)中,硬件設(shè)備是比較昂貴的,對于負載均衡的學(xué)習(xí)者如果不是在企業(yè)中應(yīng)用或者是學(xué)員中學(xué)習(xí),很少有機會能碰到實際操作的訓(xùn)練。所以,很多朋友都會選擇軟件方面的設(shè)置進行研究?,F(xiàn)在我們就來介紹一下再Apache下的Tomcat負載均衡的一些使用問題。
其實無論是分布式,數(shù)據(jù)緩存,還是負載均衡,無非就是改善網(wǎng)站的性能瓶頸,在網(wǎng)站源碼不做優(yōu)化的情況下,負載均衡可以說是最直接的手段了。其實拋開這個名詞,放開了說,就是希望用戶能夠分流,也就是說把所有用戶的訪問壓力分散到多臺服務(wù)器上,也可以分散到多個tomcat里,如果一臺服務(wù)器裝多個tomcat,那么即使是負載均衡,性能也提高不了太多,不過可以提高穩(wěn)定性,即容錯性。當(dāng)其中一個主tomcat當(dāng)?shù)?其他的tomcat也可以補上,因為tomcat之間實現(xiàn)了Session共享。待tomcat服務(wù)器修復(fù)后再次啟動,就會自動拷貝所有session數(shù)據(jù),然后加入集群。這樣就可以不間斷的提供服務(wù)。如果要真正從本質(zhì)上提升性能,必須要分布到多臺服務(wù)器。同樣tomcat也可以做到。網(wǎng)上相關(guān)資料比較多,可以很方便的查到,但是質(zhì)量不算高。我希望可以通過這篇隨筆,系統(tǒng)的總結(jié)。本文的
例子是同一臺服務(wù)器上運行兩個tomcat,做兩個tomcat之間的負載均衡。其實多臺服務(wù)器各配置一個tomcat也可以,而且那樣的話,可以使用安裝版的tomcat,而不用是下文中的免安裝的tomcat,而且tomcat端口配置也就不用修改了。下文也會提到。
tomcat的負載均衡需要apache服務(wù)器的加入來實現(xiàn)。在進行配置之前請先卸載調(diào)已安裝的tomcat,然后檢查apache的版本。我這次配置使用的是apache-tomcat-6.0.18免安裝版本,我親自測試后推斷安裝版的tomcat在同一臺機子上會不能啟動兩個以上,可能是因為安裝版的tomcat侵入了系統(tǒng),導(dǎo)致即使在server.xml里修改了配置,還是會引起沖突。所以我使用tomcat免安裝版。
apache使用的是apache_2.2.11-win32-x86-no_ssl.msi。如果版本低于2.2Apache負載均衡的配置要有所不同,因為這個2.2.11和2.2.8版本集成了jk2等負載均衡工具,所以配置要簡單許多。別的版本我沒有具體測試,有待考究。這兩個軟件可以到官方網(wǎng)站下載。
把Apache安裝為運行在80端口的Windows服務(wù),安裝成功后在系統(tǒng)服務(wù)列表中可以看到Apache2.2服務(wù)。服務(wù)啟動后在瀏覽器中輸入http://localhost進行測試,如果能看到一個"It works!"的頁面就代表Apache已經(jīng)正常工作了。把tomcat解壓到任意目錄,賦值一個另命名。起名和路徑對配置沒有影響。但要保證端口不要沖突,如果裝有Oracle或IIS的用戶需要修改或關(guān)閉相關(guān)接口的服務(wù)。當(dāng)然jdk的配置也是必須的,這個不再過多敘述。
想要達到負載均衡的目的,首先,在Apache安裝目錄下找到conf/httpd.conf文件,去掉以下文本前的注釋符(#)以便讓Apache在啟動時自動加載代理(proxy)模塊。
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
- LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
- LoadModule proxy_connect_module modules/mod_proxy_connect.so
- LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
向下拉動文檔找到<IfModule dir_module>節(jié)點,在DirectoryIndex index.html后加上index.jsp,這一步只是為了待會配置完tomcat后能看到小貓首頁,可以不做。繼續(xù)下拉文檔找到Include conf/extra/httpd-vhosts.conf,去掉前面的注釋符。
然后打開conf/extra/httpd-vhosts.conf,配置虛擬站點,在最下面加上
- <VirtualHost *:80>
- ServerAdmin 管理員郵箱
- ServerName localhost
- ServerAlias localhost
- ProxyPass / balancer://sy/ stickysession=jsessionid nofailover=On
- ProxyPassReverse / balancer://sy/
- ErrorLog "logs/sy-error.log"
- CustomLog "logs/sy-access.log" common
- </VirtualHost>
然后回到httpd.conf,在文檔最下面加上
- ProxyRequests Off
- <proxy balancer://sy>
- BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
- BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
- </proxy>
ProxyRequests Off 是告訴Apache需要使用反向代理,ip地址和端口唯一確定了tomcat節(jié)點和配置的ajp接受端口。loadfactor是負載因子,Apache會按負載因子的比例向后端tomcat節(jié)點轉(zhuǎn)發(fā)請求,負載因子越大,對應(yīng)的tomcat服務(wù)器就會處理越多的請求,如兩個tomcat都是1,Apache就按1:1的比例轉(zhuǎn)發(fā),如果是2和1就按2:1的比例轉(zhuǎn)發(fā)。這樣就可以使配置更靈活,例如可以給性能好的服務(wù)器增加處理工作的比例,如果采取多臺服務(wù)器,只需要修改ip地址和端口就可以了。route參數(shù)對應(yīng)后續(xù)tomcat負載均衡配置中的引擎路徑(jvmRoute)。