?????? 在某些場景中,我們需要在前端放置一個Apache作為負載均衡器,后臺有若干臺Apusic或者其它的類似于Tomcat/WebLogic等應用服務器,客戶端發送到Apache的請求,將被分配到后臺的這些真正完成請求的服務器上。本文描述如何使用Apache作為負載均衡器的方法。
?????? 我們假設Apahce安裝在 myserver 這臺服務器上,并且希望用戶訪問http://myserver/ 時,能夠將這些請求被負載到后臺的兩臺服務器上,分別是:http://192.168.6.37:8080/ 和 http://192.168.6.37:6888/
?
一、安裝并重新編譯Apache
1、linux下Apache的安裝
下載最新的Apache安裝包httpd-2.2.3.tar.gz文件
1) 解壓
???????? gzip –d httpd-2.2.3.tar.gz
???????? tar xvf httpd-2.2.3.tar
2) 解壓以后,cd httpd-2.2.3 進入解壓后的目錄,在終端執輸入以下命令:
./configure --prefix=/usr/local/httpd --enable-so --enable-proxy --enable-proxy-ajp --enable-proxy-http --enable-proxy-ftp --enable-proxy-connect?--enable-proxy-balancer
????? 默認情況下,Apache安裝是不會將這些文件編譯進內核,因此,需要人工加載,而通過上述操作,在編譯時會將這些DSO文件編譯到內核中。
3) 在終端輸入:make
4) 在終端輸入:make install
5) 進入Apache的bin目錄,在終端輸入apachectl –k start
6) 在瀏覽器中輸入http://myserver,默認是80端口,如果出現It works!,說明Apache已經正常啟動。
2、window下Apache的安裝
1) 下載apache_2.2.2-win32-x86-no_ssl.msi版本或其他版本的apache
2) 點擊該文件,就可以直接安裝
3) 要配置負載均衡,進入apache的安裝目錄下的conf目錄,打開httpd.conf文件,將文件中mod_proxy.so、 mod_proxy_ajp.so、mod_proxy_balancer.so、mod_proxy_connect.so、??mod_proxy_http.so 、mod_proxy_ftp.so所在行的注釋去掉,就可以進行負載均衡的配置。
4) 在瀏覽器中輸入http://myserver,默認是80端口,如果出現It works!,說明Apache已經正常啟動。
二、配置Apache作為LoadBalance
將Apache作為LoadBalance前置機分別有三種不同的部署方式,分別是:
1
)輪詢均衡策略的配置
進入Apache的conf目錄,打開httpd.conf文件,在文件的末尾加入:
ProxyPass / balancer://proxy/???????? #注意這里以"/"結尾
<Proxy balancer://proxy>
????? ?BalancerMember http://192.168.6.37:6888/
?????? BalancerMember http://192.168.6.38:6888/
</Proxy>
????? 我們來觀察上述的參數“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虛擬服務器的命令,“/”代表發送Web請求的URL前綴,如:http://myserver/或者http://myserver/aaa,這些URL都將符合上述過濾條件;“balancer://proxy/”表示要配置負載均衡,proxy代表負載均衡名;BalancerMember 及其后面的URL表示要配置的后臺服務器,其中URL為后臺服務器請求時的URL。以上面的配置為例,實現負載均衡的原理如下:
????? 假設Apache接收到http://localhost/aaa請求,由于該請求滿足ProxyPass條件(其URL前綴為“/”),該請求會被分發到后臺某一個BalancerMember,譬如,該請求可能會轉發到 http://192.168.6.37:6888/aaa進行處理。當第二個滿足條件的URL請求過來時,該請求可能會被分發到另外一臺BalancerMember,譬如,可能會轉發到http://192.168.6.38:6888/。如此循環反復,便實現了負載均衡的機制。
2)
按權重分配均衡策略的配置
ProxyPass / balancer://proxy/???????? #注意這里以"/"結尾
<Proxy balancer://proxy>
??????? BalancerMember http://192.168.6.37:6888/? loadfactor=3
??????? BalancerMember http://192.168.6.38:6888/? loadfactor=1
</Proxy>
????? 參數”loadfactor”表示后臺服務器負載到由Apache發送請求的權值,該值默認為1,可以將該值設置為1到100之間的任何值。以上面的配置為例,介紹如何實現按權重分配的負載均衡,現假設Apache收到http://myserver/aaa 4次這樣的請求,該請求分別被負載到后臺服務器,則有3次連續的這樣請求被負載到BalancerMember為http://192.168.6.37:6888的服務器,有1次這樣的請求被負載BalancerMember為http://192.168.6.38:6888后臺服務器。實現了按照權重連續分配的均衡策略。
3)
權重請求響應負載均衡策略的配置
ProxyPass / balancer://proxy/ lbmethod=bytraffic? #注意這里以"/"結尾
<Proxy balancer://proxy>
???????? BalancerMember http://192.168.6.37:6888/? loadfactor=3
???????? BalancerMember http://192.168.6.38:6888/ ?loadfactor=1
?</Proxy>
?????? 參數“lbmethod=bytraffic”表示后臺服務器負載請求和響應的字節數,處理字節數的多少是以權值的方式來表示的。“loadfactor”表示后臺服務器處理負載請求和響應字節數的權值,該值默認為1,可以將該值設置在1到100的任何值。根據以上配置是這么進行均衡負載的,假設Apache接收到http://myserver/aaa請求,將請求轉發給后臺服務器,如果BalancerMember為http://192.168.6.37:6888后臺服務器負載到這個請求,那么它處理請求和響應的字節數是BalancerMember為http://192.168.6.38:6888 服務器的3倍(回想(2)均衡配置,(2)是以請求數作為權重負載均衡的,(3)是以流量為權重負載均衡的,這是最大的區別)。
注:每次修改httpd.conf,用apachectl –k restart重新啟動Apache。