主流軟件負載均衡器對比(LVS、Nginx、HAproxy)
- 基於DNS負載均衡:直接通過DNS來實現負載均衡。優點是非常簡單,缺點是調整后不知道啥時生效(當然正常情況下幾十分鍾,長的也可能更長)
- 基於硬件負載均衡:購買硬件,也就是我們常常說的F5(F5 Network Big-IP),不過F5就貴一般來說單台硬件也得幾十萬塊,要是搞個雙機,多機就更貴了
- 基於軟件負載均衡:基於軟件的方式也非常多,類似幾個主流LVS、Nginx、HAproxy(當然IBM也有個HIS),接下來就針對以下幾種具體說明:
三大主流軟件負載均衡器對比(LVS、Nginx、HAproxy)
LVS:
1. 抗負載能力強,性能高,能達到F5的60%,對內存和CPU資源消耗比較低
2. 工作在網絡4層,通過VRRP協議(僅作代理之用),具體的流量是由linux內核來處理,因此沒有流量的產生。
3. 穩定,可靠性高,自身有完美的熱備方案(Keepalived+lvs)
4. 不支持正則處理,不能做動靜分離。
5. 支持多種負載均衡算法:rr(輪詢),wrr(帶權輪詢)、lc(最小連接)、wlc(帶權最小連接)
6. 配置相對復雜,對網絡依賴比較大,穩定性很高。
7. LVS工作模式有4種:
(1) nat 地址轉換
(2) dr 直接路由
(3) tun 隧道
(4) full-nat
8. 工作在網絡4層,相對性能上較高 (網絡的七層模式:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層)
Nginx:
1. 工作在網絡7層,可以針對http應用做一些分流的策略,比如針對域名,目錄結構
2. Nginx對網絡的依賴較小,理論上能ping通就能進行負載功能
3. Nginx安裝配置比較簡單,測試起來很方便
4. 也可以承擔較高的負載壓力且穩定,nginx是為解決c10k問題而誕生的
5. 對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測
6. Nginx對請求的異步處理可以幫助節點服務器減輕負載壓力
7. Nginx僅能支持http、https和Email協議,這樣就在適用范圍較小。
8. 不支持Session的直接保持,但能通過ip_hash來解決。對Big request header的支持不是很好。
9. Nginx還能做Web服務器即Cache功能。
HAProxy:
1. 支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
2. 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
3. 支持url檢測后端的服務器出問題的檢測會有很好的幫助。
4. 更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
5. 單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。
6. HAProxy可以對Mysql進行負載均衡,對后端的DB節點進行檢測和負載均衡。
7. 支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)
8. 不能做Web服務器即Cache。
三大主流軟件負載均衡器適用業務場景:
1. 網站建設初期,可以選用Nginx、HAProxy作為反向代理負載均衡(流量不大時,可以不選用負載均衡),因為其配置簡單,性能也能滿足一般業務場景。如果考慮到負載均衡器是有單點問題,可以采用Nginx+Keepalived/HAproxy+Keepalived避免負載均衡器自身的單點問題。
2. 網站並發到達一定程度后,為了提高穩定性和轉發效率,可以使用lvs,畢竟lvs比Nginx/HAProxy要更穩定,轉發效率也更高。
注:nginx與HAProxy比較:nginx只支持七層,用戶量最大,穩定性比較可靠。Haproxy支持四層和七層,支持更多的負載均衡算法,支持session等。
衡量負載均衡器好壞的幾個重要的因素:
1. 會話率 :單位時間內的處理的請求數
2. 會話並發能力:並發處理能力
3. 數據率:處理數據能力
負載均衡的策略
- 輪詢策略
- 負載度策略
- 響應策略
- 哈希策略
摘自:https://zhuanlan.zhihu.com/p/36114654