Apache負載均衡設置方法: mod_proxy

來源:網絡收集 

通常來講,負載均衡就是將客戶端的請求分流給後端的各個真實服務器,達到負載均衡的目的。還有一種方式是用兩臺服務器,一臺做爲主服務器(Master),另外一臺做爲熱備份(Hot Standby),請求所有分給主服務器,在主服務器當機時,當即切換到備份服務器,以提升系統的總體可 
第一次看到這個標題時我也很驚訝,Apache竟然還能作負載均衡?真是太強大了。通過一番調查後發現的確能夠,並且功能一點都不差。這都歸功於 mod_proxy 這個模塊。不愧是強大的Apache啊。 

廢話少說,下面就來解釋一下負載均衡的設置方法。 

通常來講,負載均衡就是將客戶端的請求分流給後端的各個真實服務器,達到負載均衡的目的。還有一種方式是用兩臺服務器,一臺做爲主服務器(Master),另外一臺做爲熱備份(Hot Standby),請求所有分給主服務器,在主服務器當機時,當即切換到備份服務器,以提升系統的總體可靠性。 

1. 負載均衡的設置 

1).基本配置 
Apache能夠應對上面這兩種需求。先來討論一下如何作負載均衡。假設一臺apache服務器域名爲www.a.com, 首先須要啓用Apache的幾個模塊: 
Httpd.conf代碼    收藏代碼
  1. LoadModule proxy_module modules/mod_proxy.so  
  2. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
  3. LoadModule proxy_http_module modules/mod_proxy_http.so  

mod_proxy提供代理服務器功能,mod_proxy_balancer提供負載均衡功能, mod_proxy_http讓代理服務器能支持HTTP協議。若是把mod_proxy_http換成其餘協議模塊(如mod_proxy_ftp),或許能支持其餘協議的負載均衡,有興趣的朋友能夠本身嘗試一下。 

而後要添加如下配置: 
Httpd.conf代碼    收藏代碼
  1. ProxyRequests Off  
  2. <Proxy balancer://mycluster>  
  3.     BalancerMember http://node-a.myserver.com:8080  
  4.     BalancerMember http://node-b.myserver.com:8080  
  5. </Proxy>  
  6. ProxyPass / balancer://mycluster/  
  7. # 警告:如下這段配置僅用於調試,毫不要添加到生產環境中!!!  
  8. <Location /balancer-manager>  
  9.     SetHandler balancer-manager  
  10.     order Deny,Allow  
  11.     Deny from all  
  12.     Allow from localhost  
  13. </Location>  


注:node-a.myserver.com,node-b.myserver.com是另外兩臺服務器的域名,不是當前服務器的域名 

從上面的 ProxyRequests Off 這條能夠看出,實際上負載均衡器就是一個反向代理,只不過它的代理轉發地址不是某臺具體的服務器,而是一個 balancer:// 協議: 

ProxyPass / balancer://mycluster協議地址能夠隨便定義。而後,在<Proxy>段中設置該balancer協議的內容便可。 BalancerMember指令能夠添加負載均衡組中的真實服務器地址。 

下面那段<Location /balancer-manager>是用來監視負載均衡的工做狀況的,調試時能夠加上(生產環境中禁止使用!),而後訪問 http://localhost/balancer-manager/ 便可看到負載均衡的工做情況。 

OK,改完以後重啓服務器,訪問你的Apache所在服務器的地址(www.a.com),便可看到負載均衡的效果了。 

出錯提示: 
訪問網頁提示Internal Serveral Error,察看error.log文件 
Error.log代碼    收藏代碼
  1. [warn] proxy: No protocol handler was valid for the URL /admin/login_form. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.    

緣由是配置:# ProxyPass / balancer://mycluster 可能少了一個/ 

2). 負載比例分配 
打開 balancer-manager 的界面,能夠看到請求是平均分配的。 

若是不想平均分配怎麼辦?給 BalancerMember 加上 loadfactor 參數便可,取值範圍爲1-100。好比你有三臺服務器,負載分配比例爲 7:2:1,只需這樣設置: 

Httpd.conf代碼    收藏代碼
  1. ProxyRequests Off  
  2. <Proxy balancer://mycluster>  
  3.     BalancerMember http://node-a.myserver.com:8080 loadfactor=7  
  4.     BalancerMember http://node-b.myserver.com:8080 loadfactor=2  
  5.     BalancerMember http://node-c.myserver.com:8080 loadfactor=1  
  6. </Proxy>  
  7. ProxyPass / balancer://mycluster  


3).負載分配算法 

默認狀況下,負載均衡會盡可能讓各個服務器接受的請求次數知足預設的比例。若是要改變算法,可使用 lbmethod 屬性。如: 

Httpd.conf代碼    收藏代碼
  1. ProxyRequests Off  
  2. <Proxy balancer://mycluster>  
  3.     BalancerMember http://node-a.myserver.com:8080 loadfactor=7  
  4.     BalancerMember http://node-b.myserver.com:8080 loadfactor=2  
  5.     BalancerMember http://node-c.myserver.com:8080 loadfactor=1  
  6. </Proxy>  
  7. ProxyPass / balancer://mycluster  
  8. ProxySet lbmethod=bytraffic  


lbmethod可能的取值有: 

lbmethod=byrequests 按照請求次數均衡(默認) 
lbmethod=bytraffic 按照流量均衡 
lbmethod=bybusyness 按照繁忙程度均衡(老是分配給活躍請求數最少的服務器) 

各類算法的原理請參見 Apache的文檔。 

2. 熱備份(Hot Standby) 
熱備份的實現很簡單,只需添加 status=+H 屬性,就能夠把某臺服務器指定爲備份服務器: 
Httpd.conf代碼    收藏代碼
  1. ProxyRequests Off  
  2. <Proxy balancer://mycluster>  
  3.     BalancerMember http://node-a.myserver.com:8080  
  4.     BalancerMember http://node-b.myserver.com:8080 status=+H  
  5. </Proxy>  
  6. ProxyPass / balancer://mycluster  


從 balancer-manager 界面中能夠看到,請求老是流向 node-a ,一旦node-a掛掉, Apache會檢測到錯誤並把請求分流給 node-b。Apache會每隔幾分鐘檢測一下 node-a 的情況,若是node-a恢復,就繼續使用node-a。
相關文章
相關標籤/搜索