1. 負載均衡的設置
1).基本配置
Apache可以應對上面這兩種需求。先來討論一下如何做負載均衡。假設一臺apache服務器域名爲www.a.com, 首先需要啓用Apache的幾個模塊:
- 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
mod_proxy提供代理服務器功能,mod_proxy_balancer提供負載均衡功能, mod_proxy_http讓代理服務器能支持HTTP協議。如果把mod_proxy_http換成其他協議模塊(如mod_proxy_ftp),或許能支持其他協議的負載均衡,有興趣的朋友可以自己嘗試一下。
然後要添加以下配置:
- ProxyRequests Off
- <Proxy balancer://mycluster>
- BalancerMember http://node-a.myserver.com:8080
- BalancerMember http://node-b.myserver.com:8080
- </Proxy>
- ProxyPass / balancer://mycluster/
-
注:node-a.myserver.com,node-b.myserver.com是另外兩臺服務器的域名,不是當前服務器的域名
從上面的 ProxyRequests Off 這條可以看出,實際上負載均衡器就是一個反向代理,只不過它的代理轉發地址不是某臺具體的服務器,而是一個 balancer:// 協議:
ProxyPass / balancer://mycluster協議地址可以隨便定義。然後,在<Proxy>段中設置該balancer協議的內容即可。 BalancerMember指令可以添加負載均衡組中的真實服務器地址。
OK,改完之後重啓服務器,訪問你的Apache所在服務器的地址(www.a.com),即可看到負載均衡的效果了。
2). 負載比例分配
打開 balancer-manager 的界面,可以看到請求是平均分配的。
如果不想平均分配怎麼辦?給 BalancerMember 加上 loadfactor 參數即可,取值範圍爲1-100。比如你有三臺服務器,負載分配比例爲 7:2:1,只需這樣設置:
- ProxyRequests Off
- <Proxy balancer://mycluster>
- BalancerMember http://node-a.myserver.com:8080 loadfactor=7
- BalancerMember http://node-b.myserver.com:8080 loadfactor=2
- BalancerMember http://node-c.myserver.com:8080 loadfactor=1
- </Proxy>
- ProxyPass / balancer://mycluster
3).負載分配算法
默認情況下,負載均衡會盡量讓各個服務器接受的請求次數滿足預設的比例。如果要改變算法,可以使用 lbmethod 屬性。如:
- ProxyRequests Off
- <Proxy balancer://mycluster>
- BalancerMember http://node-a.myserver.com:8080 loadfactor=7
- BalancerMember http://node-b.myserver.com:8080 loadfactor=2
- BalancerMember http://node-c.myserver.com:8080 loadfactor=1
- </Proxy>
- ProxyPass / balancer://mycluster
- ProxySet lbmethod=bytraffic
lbmethod可能的取值有:
lbmethod=byrequests 按照請求次數均衡(默認)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請求數最少的服務器)
各種算法的原理請參見Apache的文檔。
2. 熱備份(Hot Standby)
熱備份的實現很簡單,只需添加 status=+H 屬性,就可以把某臺服務器指定爲備份服務器:
- ProxyRequests Off
- <Proxy balancer://mycluster>
- BalancerMember http://node-a.myserver.com:8080
- BalancerMember http://node-b.myserver.com:8080 status=+H
- </Proxy>
- ProxyPass / balancer://mycluster
從 balancer-manager 界面中可以看到,請求總是流向 node-a ,一旦node-a掛掉, Apache會檢測到錯誤並把請求分流給 node-b。Apache會每隔幾分鐘檢測一下 node-a 的狀況,如果node-a恢復,就繼續使用node-a。
轉自:http://koda.iteye.com/blog/465061