負載平衡
由於目前現有網路的各個核心部分隨著業務量的提高,訪問量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的伺服器裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又將導致再一次硬體升級的高額成本投入,甚至效能再卓越的裝置也不能滿足當前業務量增長的需求。
針對此情況而衍生出來的一種廉價有效透明的方法以擴充現有網路裝置和伺服器的頻寬、增加輸送量、加強網路資料處理能力、提高網路的靈活性和可用性的技術就是負載平衡(Load Balance)。
mod_proxy_balancer
mod_proxy_balancer是Apache2.1版本及更進階版本才可以使用,在網上關於mod_proxy_balancer的介紹比較少,特別是中文版的。近日,由於項目的需要,需要用Apache做一個負載平衡。剛開始考慮使用的是使用mod_rewrite,由於mod_rewrite使用起來比較複雜,所以就放棄啦。
廢話少說,下面介紹mod_proxy_balancer的一個簡單的例子。
首先,在主設定檔httpd.conf添加以下Module:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
再增加以下元素:
ProxyRequests Off
<proxy balancer://test>
BalancerMember http://192.168.0.150:8001 loadfactor=1
BalancerMember http://192.168.0.150:8002 loadfactor=1
BalancerMember http://192.168.0.150:8003 loadfactor=1
BalancerMember http://192.168.0.150:8004 loadfactor=1
</proxy>
設定虛擬機器主機:
<VirtualHost *:80>
ServerAdmin chenzhaozhan@hotmail.com
ServerName www.example.com
ServerAlias example.com
ProxyPass / balancer://test/
ProxyPassReverse / balancer://test/
</VirtualHost>
這裡需要多廢話幾句,剛開始我沒有用虛擬機器主機,只是添加ProxyPass /test balancer://test,測試的時候沒有什麼問題,因為每個網站只有一個網站,訪問的時候沒有問題。後來用http://localhost/a.htm訪問就崩潰啦,沒有許可權訪問該頁面,返回http 403的錯誤。最後改用以上的方式解決問題。
而且還可以同樣在http.conf主設定檔主添如下元素:
<Location /balancer-manager>
SetHandler balancer-manager
Order Allow,Deny
Allow from all
</Location>
如果配置成功後你可以可以在地址欄輸入 localhost/balancer-manager,將可以清楚的看到各節點的工作運行狀態:)
可以看到以下的結果:
同樣,可以配置server-status查看資訊:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Allow from all
</Location>