Nginx/LVS/HAProxy 負載均衡軟體的優缺點詳解

gannanzhuce發表於2015-04-14

Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟體,本人都在多個專案中實施過,參考了一些資料,結合自己的一些使用經驗,總結一下。

一般對負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術。具體的應用需求還得具體分析,如果是中小型的Web應用,比如日PV小於1000萬,用Nginx就完全可以了;如果機器不少,可以用DNS輪詢,LVS所耗費的機器還是比較多的;大型網站或重要的服務,且伺服器比較多時,可以考慮用LVS。

一種是通過硬體來進行進行,常見的硬體有比較昂貴的F5和Array等商用的負載均衡器,它的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網路服務來說暫時還沒有需要使用;另外一種就是類似於Nginx/LVS/HAProxy的基於Linux的開源免費的負載均衡軟體,這些都是通過軟體級別來實現,所以費用非常低廉。

目前關於網站架構一般比較合理流行的架構方案:Web前端採用Nginx/HAProxy+Keepalived作負載均衡器;後端採用MySQL資料庫一主多從和讀寫分離,採用LVS+Keepalived的架構。當然要根據專案具體需求制定方案。

下面說說各自的特點和適用場合。

Nginx

Nginx的優點是: 

  1. 工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多於LVS了。
  2. Nginx對網路穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一;相反LVS對網路穩定性依賴比較大,這點本人深有體會;
  3. Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌列印出來。LVS的配置、測試就要花比較長的時間了,LVS對網路依賴比較大。
  4. 可以承擔高負載壓力且穩定,在硬體不差的情況下一般能支撐幾萬次的併發量,負載度比LVS相對小些。
  5. Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支援url來檢測。比如使用者正在上傳一個檔案,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺伺服器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的檔案或者很重要的檔案的話,使用者可能會因此而不滿。
  6. Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。
  7. Nginx現在作為Web反向加速快取越來越成熟了,速度比傳統的Squid伺服器更快,可以考慮用其作為反向代理加速器。
  8. Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有lighttpd了,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那麼清晰易讀,社群資料也遠遠沒Nginx活躍。
  9. Nginx也可作為靜態網頁和圖片伺服器,這方面的效能也無對手。還有Nginx社群非常活躍,第三方模組也很多。

Nginx的缺點是:

  1. Nginx僅能支援http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。
  2. 對後端伺服器的健康檢查,只支援通過埠來檢測,不支援通過url來檢測。不支援Session的直接保持,但能通過ip_hash來解決。

LVS

LVS 是使用Linux核心叢集實現的一個高效能、高可用的負載均衡伺服器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的優點是:

  1. 抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體裡的效能最強的,對記憶體和cpu資源消耗比較低。
  2. 配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的機率。
  3. 工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在專案實施中用得最多的還是LVS/DR+Keepalived。
  4. 無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的效能不會收到大流量的影響。
  5. 應用範圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、資料庫、線上聊天室等等。

LVS的缺點是:

  1. 軟體本身不支援正規表示式處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
  2. 如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了,特別後面有Windows Server的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。

相關文章