本文檔參考 http://www.ha97.com/5646.html
代理軟件
負載均衡產品介紹
市面上的負載均衡產品主要分為兩種:硬件產品和軟件產品
- 硬件產品:F5和Array等商用負載均衡器,有專業維護團隊進行維護,花銷較大,對於規模較小的架構還沒有需要使用
- 軟件產品:nginx、haproxy、lvs等開源等負載均衡軟件,成本較低
- 架構:比較合理流行的方案為:Web前段采用nginx/haproxy+keepalived,nginx/haproxy負責后端web服務器的負載均衡,keepalived負責高可用;后端采用mysql一主多從和讀寫分離,采用lvs+keepalived的架構。實際操作部署根據實際情況
各產品優缺
nginx
優點
-
工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多於LVS了。location使用靈活,應用場合廣泛,工作在應用層
-
Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一;相反LVS對網絡穩定性依賴比較大,這點本人深有體會;
-
Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
-
Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一台服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。
-
Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。
-
Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可以考慮用其作為反向代理加速器。
-
Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有lighttpd了,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀,社區資料也遠遠沒Nginx活躍。
-
Nginx也可作為靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多。
缺點
- Nginx僅能支持http、https和Email協議,這樣就在適用范圍上面小些,這個是它的缺點。
- 對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。
lvs
LVS:使用Linux內核集群實現一個高性能、高可用的負載均衡服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
優點
-
抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。
-
配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。
-
工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。
-
無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
-
應用范圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、在線聊天室等等。
缺點
- 軟件本身不支持正則表達式處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
2.如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了,特別后面有Windows Server的機器的話,如果實施及配置還有維護過程就比較復雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
haproxy
優點
-
HAProxy也是支持虛擬主機的。
-
HAProxy的優點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態。
-
HAProxy跟LVS類似,本身就只是一款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的。
-
HAProxy支持TCP協議的負載均衡轉發,可以對MySQL讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,大家可以用LVS+Keepalived對MySQL主從做負載均衡。
-
HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現在具體有如下8種:
-
roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
-
static-rr,表示根據權重,建議關注;
-
leastconn,表示最少連接者先處理,建議關注;
-
source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注;
-
ri,表示根據請求的URI;
-
rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
-
hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
-
rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
-