lvs、nginx、haproxy是最常見的三種高可用性負載平衡軟體。由於lvs和haproxy在目前的公司的現網環境中並未用到,雖然之前簡單的了解和搭建過,現在也已經忘的差不多了,而及於nginx的負載平衡雖然公司在用,不過一配置文件都是ctrl+c、ctrl+v,對轉發的理論性的東西也都忘的差不多了。隱約腦中現在只有upstream、dr 、ip_hash這幾個字了。現對三者的轉發方式做下總結。
一、LVS轉發模式
LVS是章文嵩博士寫的一個工作於四層的高可能性軟體。不像後兩者支援七層轉發,不過也因為其簡單,所以其是最穩定的。其共有三種IP負載平衡技術:VS/NAT(Virtual Server via Network Address Translation)、VS/TUN(Virtual Server via IP Tunneling)和VS/DR(Direct Routing),三者之間的具體比較請見下表
二、nginx負載模式
nginx有五種負載演算法模式,分別是:輪詢、weight(權重)、ip_hash、fair、url_hash 。現逐一說明:
- 輪詢(預設): 每個請求依時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
- weight :指定輪詢幾率,weight和存取比率成正比,用於後端伺服器效能不均的情況。配置為:
-
upstream bakend {
-
server 192.168.0.192.1681 ;server 192.168
.-
0.15 weight=10;}
- ip_hash:每個請求按訪問配置為:
upstream bakend
{
-
ip_hash;
-
server. :88
;-
server 192.168. 0.15:80
;-
}fair請求
upstream backend {
- server server1
;
-
-
}
- url_hash:按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。配置如:
upstream backend
{-
server squid1
:-
3128 8;
-
hash $request_uri
;
-
- hash_method crc32;
- }注:第五種模式下,需要注意關於methodfoded的hash演算法。 server後面常接的參數有以下幾個:
-
down 表示單前的server暫時不參與負載 weight 預設為1.weight越大,負載的權重越大。
- max_fails :允許請求失敗的次數預設為1.超過最大次數時,返回proxy_next_upstream 模組定義的錯誤 fail_timeout:max_fails次失敗後,暫停的時間。
-
backup: 其它所有的非backup機器down或忙碌的時候,請求backup機器。所以這台機器壓力會最輕。
- 三、haproxyhaproxy是三者之間負載演算法最多的,有八種,因此其應用場景也是最多,配置也是最靈活的,具體8種演算法為:
①roundrobin,表示簡單的輪詢,這個是負載平衡基本上都具備的;
②static-rr,表示根據權重,和nginx的weight演算法類似;
③leastconn,表示最少連接者先處理,有點類似於nginx的fair,不過fair是根據回應時間;
④source,表示根據請求來源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注; - ⑤ri,表示根據請求的URI,類似於nginx的url_hash;
⑥rl_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name; - ⑦hdr(name),表示根據HTTP請求頭來鎖定每一次
⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
四、總結
具體現網應用可以根據據體的實際情況選擇最好的負載方式。三者中,lvs穩定性最好,可配置性最少;nginx針對域名、目錄結構進行正則匹配是最強的,同時其對網絡依賴比較小,不過性能上和lvs和haproxy相比稍差一點點;haproxy支援虛擬主機,尤其在session保持方面做的最好,其有三種演算法可以實現session共享-—— ip辨識(source)、cookie辨識、session辨識三種,除此之外在對mysql做HA方案時也常會用到該軟體。
以上就介紹了lvs、nginx、haproxy中轉模式總結,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。