將Apache做爲LoadBalance前置機分別有三種不一樣的部署方式,分別是:web
1 )輪詢均衡策略的配置算法
進入Apache的conf目錄,打開httpd.conf文件,在文件的末尾加入:apache
ProxyPass / balancer://proxy/ #注意這裏以"/"結尾服務器
<Proxy balancer://proxy>併發
BalancerMember http://192.168.6.37:6888/負載均衡
BalancerMember http://192.168.6.38:6888/url
</Proxy>spa
我 們來觀察上述的參數「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/。如此循環反覆,便實現了負載均衡的機制。.net
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。
apache功能其實非常強大,最近一段時間研究了下apache的反向代理和負載均衡,反向代理網協的外網出口和個人博客出口就是經過apache的反向代理實現的,總結一下,重點說說負載均衡的配置。
首先說先實驗環境吧
操做系統:DEBIAN 5.03(Ubuntu也能夠同理配置)
1、安裝apache加載模塊
apt-get install apache2
而後進入到apache的配置目錄
cd /etc/apache2
apache的反向代理和負載均衡其實利用的都是反向代理的原理,至於什麼叫作反向代理能夠點此http://baike.baidu.com/view/1165595.htm
關鍵須要加載下面三個模塊
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
由 於Debian系統下apache全部的模塊都是放在/usr/lib/apache2/modules/裏面的,經過/etc/apache2 /mods-available裏面的*.load加載的,若是要模塊的話須要在/etc/apache2/mods-enabled裏面用ln創建鏈 接,固然你也能夠再/etc/apache2/apache2.conf裏面直接把上面三句話寫進入,可是不建議這樣作。執行代碼以下
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/proxy_banancer.load
作好上面幾步以後咱們重啓下apache
/etc/init.d/apache2 restart
2、配置反向代理功能
加載完模塊後能夠創建一個虛擬主機來做爲反向代理
vi /etc/apache2/sites_available/proxy
配置以下
Listen 202.xxx.xxx.xxx:80 (別人訪問的IP和端口)
<VirtualHost 202.xxx.xxx.xxx:80> (同上)
ServerAdmin admin@bit.net
ProxyRequests Off (說明開啓的是反向代理)
ProxyMaxForwards 100
ProxyPreserveHost On
ProxyPass / http://10.x.xx.xxx/ (轉發到url上的請求)
ProxyPassReverse / http://10.x.xx.xxx/
<Proxy *> (這段是訪問的控制)
Order Deny,Allow
Allow from all
</Proxy>
</VirtualHost>
而後再在/etc/apache2/sites_enabled/裏面創建ln連接
ln -s /etc/apache2/sites_available/proxy /etc/apache2/sites_enabled/proxy
重啓apache
/etc/init.d/apache2 restart
而後反向代理就開啓了
當別人輸入http://202.xxx.xxx.xxx時 就會經過反向代理轉到http://10.x.xx.xxx上,這樣簡單的反向代理功能就開啓了
3、apache負載均衡配置
a、簡單的負載均衡
而後接着講apache的負載均衡模塊吧
同理創建一個虛擬主機來做爲負載均衡
vi /etc/apache2/sites_available/balancer
配置以下
Listen 202.x.xx.xxx:80 (別人訪問的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
ServerAdmin admin@bit.com
ProxyRequests Off
Proxypass / balancer://proxy/
<Proxy balancer://proxy>
Order Deny,Allow
Allow from all
BalancerMember http://10.0.0.1
BalancerMember http://10.0.0.2
</Proxy>
</VirtualHost>
從上面的 ProxyRequests Off 這條能夠看出,實際上負載均衡器就是一個反向代理,只不過它的代理轉發地址不是某臺具體的服務器,而是一個 balancer://協議地址
ProxyPass / balancer://proxy/ 協議地址能夠隨便定義。而後,在<Proxy>段中設置該balancer協議的內容便可。 BalancerMember指令能夠添加負載均衡組中的真實服務器地址。
而後再在/etc/apache2/sites_enabled/裏面創建ln連接
ln -s /etc/apache2/sites_available/balancer /etc/apache2/sites_enabled/balancer
重啓apache
/etc/init.d/apache2 restart
這樣apache的負載均衡就配置好了
如 果訪問http://202.x.xx.xxx的時候會均勻地打開http://10.0.0.1和http://10.0.0.2,好比你兩次打開 http://202.x.xx.xxx會又一次打開http://10.0.0.1一次打開http://10.0.0.2這樣就是兩臺服務器接受的請 求平均了,達到了負載均衡的效果。
b、負載比例分配
固然若是你發現你的兩臺服務器配置不同,一臺較好,一臺較差,那麼就要開始配置不一樣比例的負載均衡了。若是兩臺服務器你想配置負載分配比爲3:1則配置文件以下
Listen 202.x.xx.xxx:80 (別人訪問的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
ServerAdmin admin@bit.com
ProxyRequests Off
Proxypass / balancer://proxy/
<Proxy balancer://proxy>
Order Deny,Allow
Allow from all
BalancerMember http://10.0.0.1 loadfactor= 3
BalancerMember http://10.0.0.2 loadfactor= 1
</Proxy>
</VirtualHost>
c、負載分配算法
固然你可能想經過不一樣的算法實現負載均衡,比方說按照請求次數,或者按照流量均衡,這裏用到的指令是lbmethod
lbmethod可能的取值有:
lbmethod=byrequests 按照請求次數均衡(默認)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(老是分配給活躍請求數最少的服務器)
按照流量的均衡配置以下
Listen 202.x.xx.xxx:80 (別人訪問的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
ServerAdmin admin@bit.com
ProxyRequests Off
Proxypass / balancer://proxy/
ProxySet lbmethod=bytraffic (加上這句)
<Proxy balancer://proxy>
Order Deny,Allow
Allow from all
BalancerMember http://10.0.0.1 loadfactor= 3
BalancerMember http://10.0.0.2 loadfactor= 1
</Proxy>
</VirtualHost>
這樣你的負載均衡就能夠按照流量均衡了
d、熱備份
在最後講一講熱備份吧,熱備份的實現很簡單,只需添加 status=+H 屬性,就能夠把某臺服務器指定爲備份服務器,配置文件以下
Listen 202.x.xx.xxx:80 (別人訪問的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
ServerAdmin admin@bit.com
ProxyRequests Off
Proxypass / balancer://proxy/
ProxySet lbmethod=bytraffic (加上這句)
<Proxy balancer://proxy>
Order Deny,Allow
Allow from all
BalancerMember http://10.0.0.1
BalancerMember http://10.0.0.2 status=+H
</Proxy>
</VirtualHost>
從配置中能夠看出請求老是流向http://10.0.0.1,一旦http://10.0.0.1掛掉, Apache會檢測到錯誤並把請求分流給 http://10.0.0.2。Apache會每隔幾分鐘檢測一下http://10.0.0.1的情況,若是http://10.0.0.1恢復,就 繼續使用http://10.0.0.1,這樣就能夠實現熱備份了
好了總結完了,最近發現apache的功能確實是很強大,各類模塊都有待發掘,一直在據說Nginx的併發比apache要好,有時間再發個二者的比較的文章吧。