LVS/Nginx/HAProxy負載均衡器的對比分析

轉自:http://www.blogjava.net/ivanwan/archive/2013/12/25/408014.htmlhtml

LVS的特色是:
前端

  1. 抗負載能力強、是工做在網絡4層之上僅做分發之用,沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的;
  2. 配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西,因此並不須要太多接觸,大大減小了人爲出錯的概率;
  3. 工做穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,不過咱們在項目實施中用得最多的仍是LVS/DR+Keepalived;
  4. 無流量,保證了均衡器IO的性能不會收到大流量的影響;
  5. 應用範圍比較廣,能夠對全部應用作負載均衡;
  6. 軟件自己不支持正則處理,不能作動靜分離,這個就比較遺憾了;其實如今許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優點所在。
  7. 若是是網站應用比較龐大的話,實施LVS/DR+Keepalived起來就比較複雜了,特別後面有Windows Server應用的機器的話,若是實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。站長教學網 eduyo.com

Nginx的特色是:
java

  1. 工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構,它的正則規則比HAProxy更爲強大和靈活,這也是許多朋友喜歡它的緣由之一;
  2. Nginx對網絡的依賴很是小,理論上能ping通就就能進行負載功能,這個也是它的優點所在;
  3. Nginx安裝和配置比較簡單,測試起來比較方便;
  4. 也能夠承擔高的負載壓力且穩定,通常能支撐超過幾萬次的併發量;
  5. Nginx能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測;
  6. Nginx僅能支持http和Email,這樣就在適用範圍上面小不少,這個它的弱勢;
  7. Nginx不只僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP如今也是很是流行的web架構,大有和之前最流行的LAMP架構分庭抗爭之勢,在高流量的環境中也有很好的效果。
  8. Nginx如今做爲Web反向加速緩存愈來愈成熟了,不少朋友都已在生產環境下投入生產了,並且反映效果不錯,速度比傳統的Squid服務器更快,有興趣的朋友能夠考慮用其做爲反向代理加速器。

HAProxy的特色是:
web

  1. HAProxy是支持虛擬主機的,之前有朋友說這個不支持虛擬主機,我這裏特此更正一下。
  2. 可以補充Nginx的一些缺點好比Session的保持,Cookie的引導等工做
  3. 支持url檢測後端的服務器出問題的檢測會有很好的幫助。
  4. 它跟LVS同樣,自己僅僅就只是一款負載均衡軟件;單純從效率上來說HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。
  5. HAProxy能夠對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS,因此我向你們推薦LVS+Keepalived。
  6. 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請求。

 

Nginx和LVS做對比的結果

一、Nginx工做在網絡的7層,因此它能夠針對http應用自己來作分流策略,好比針對域名、目錄結構等,相比之下LVS並不具有這樣的功能,所 以 Nginx單憑這點可利用的場合就遠多於LVS了;但Nginx有用的這些功能使其可調整度要高於LVS,因此常常要去觸碰觸碰,由LVS的第2條優勢 看,觸碰多了,人爲出問題的概率也就會大。
二、Nginx對網絡的依賴較小,理論上只要ping得通,網頁訪問正常,Nginx就能連得通,Nginx同時還能區份內外網,若是是同時擁有內外網的 節點,就至關於單機擁有了備份線路;LVS就比較依賴於網絡環境,目前來看服務器在同一網段內而且LVS使用direct方式分流,效果較能獲得保證。另 外注意,LVS須要向託管商至少申請多一個ip來作Visual IP,貌似是不能用自己的IP來作VIP的。要作好LVS管理員,確實得跟進學習不少有關網絡通訊方面的知識,就再也不是一個HTTP那麼簡單了。站長教學網 eduyo.com
三、Nginx安裝和配置比較簡單,測試起來也很方便,由於它基本能把錯誤用日誌打印出來。LVS的安裝和配置、測試就要花比較長的時間了,由於同上所述,LVS對網絡依賴比較大,不少時候不能配置成功都是由於網絡問題而不是配置問題,出了問題要解決也相應的會麻煩得多。
四、Nginx也一樣能承受很高負載且穩定,但負載度和穩定度差LVS還有幾個等級:Nginx處理全部流量因此受限於機器IO和配置;自己的bug也仍是難以免的;Nginx沒有現成的雙機熱備方案,因此跑在單機上仍是風險較大,單機上的事情全都很難說。
五、Nginx能夠檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點。目前LVS中 ldirectd也能支持針對服務器內部的狀況來監控,但LVS的原理使其不能重發請求。重發請求這點,譬如用戶正在上傳一個文件,而處理該上傳的節點剛 好在上傳過程當中出現故障,Nginx會把上傳切到另外一臺服務器從新處理,而LVS就直接斷掉了,若是是上傳一個很大的文件或者很重要的文件的話,用戶可能 會所以而惱火。
六、Nginx對請求的異步處理能夠幫助節點服務器減輕負載,假如使用apache直接對外服務,那麼出現不少的窄帶連接時apache服務器將會佔用大 量內存而不能釋放,使用多一個Nginx作apache代理的話,這些窄帶連接會被Nginx擋住,apache上就不會堆積過多的請求,這樣就減小了相 當多的內存佔用。這點使用squid也有相同的做用,即便squid自己配置爲不緩存,對apache仍是有很大幫助的。LVS沒有這些功能,也就沒法能 比較。
七、Nginx能支持http和email(email的功能估計比較少人用),LVS所支持的應用在這點上會比Nginx更多。在使用上,通常最前端所 採起的策略應是LVS,也就是DNS的指向應爲LVS均衡器,LVS的優勢令它很是適合作這個任務。重要的ip地址,最好交由LVS託管,好比數據庫的 ip、webservice服務器的ip等等,這些ip地址隨着時間推移,使用面會愈來愈大,若是更換ip則故障會接踵而至。因此將這些重要ip交給 LVS託管是最爲穩妥的,這樣作的惟一缺點是須要的VIP數量會比較多。Nginx可做爲LVS節點機器使用,一是能夠利用Nginx的功能,二是能夠利 用Nginx的性能。固然這一層面也能夠直接使用squid,squid的功能方面就比Nginx弱很多了,性能上也有所遜色於Nginx。Nginx也 可做爲中層代理使用,這一層面Nginx基本上無對手,惟一能夠撼動Nginx的就只有lighttpd了,不過lighttpd目前尚未能作到 Nginx徹底的功能,配置也不那麼清晰易讀。另外,中層代理的IP也是重要的,因此中層代理也擁有一個VIP和LVS是最完美的方案了。具體的應用還得 具體分析,若是是比較小的網站(日PV<1000萬),用Nginx就徹底能夠了,若是機器也很多,能夠用DNS輪詢,LVS所耗費的機器仍是比較 多的;大型網站或者重要的服務,機器不發愁的時候,要多多考慮利用LVS算法

相關文章
相關標籤/搜索