3種LVS/Nginx/HAProxy負載均衡器的對比分析
現在網站發展的趨勢對網絡負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術:
一種是通過硬件來進行進行,常見的硬件有比較昂貴的NetScaler、F5、Radware和Array等商用的負載均衡器,它的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網絡服務來說暫時還沒有需要使用;另外一種就是類似於LVS/HAProxy、Nginx的基於Linux的開源免費的負載均衡軟件策略,這些都是通過軟件級別來實現,所以費用非常低廉,所以我個也比較推薦大家采用第二種方案來實施自己網站的負載均衡需求。
近期朋友劉鑫(紫雨荷雪)的項目成功上線了,PV達到了億級/日的訪問量,最前端用的是HAProxy+Keepalived雙機作的負載均衡器 /反向代理,整個網站非常穩定;這讓我更堅定了以前跟老男孩前輩聊的關於網站架構比較合理設計的架構方案:即Nginx /HAProxy+Keepalived作Web最前端的負載均衡器,後端的MySQL數據庫架構采用一主多從,讀寫分離的方式,采用LVS+Keepalived的方式。
在這裏我也有一點要跟大家申明下:很多朋友擔心軟件級別的負載均衡在高並發流量衝擊下的穩定情況,事實是我們通過成功上線的許多網站發現,它們的穩 定性也是非常好的,宕機的可能性微乎其微,所以我現在做的項目,基本上沒考慮服務級別的高可用了。相信大家對這些軟件級別的負載均衡軟件都已經有了很深的 的認識,下麵我就它們的特點和適用場合分別說明下。
LVS:使用集群技術和Linux操作係統實現一個高性能、高可用的服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感謝章文嵩博士為我們提供如此強大實用的開源軟件。
LVS的特點是:
- 抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件裏的性能最強的;
- 配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率;
- 工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived;
- 無流量,保證了均衡器IO的性能不會收到大流量的影響;
- 應用範圍比較廣,可以對所有應用做負載均衡;
- 軟件本身不支持正則處理,不能做動靜分離,這個就比較遺憾了;其實現在許多網站在這方麵都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
- 如果是網站應用比較龐大的話,實施LVS/DR+Keepalived起來就比較複雜了,特別後麵有Windows Server應用的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。站長教學網 eduyo.com
Nginx的特點是:
- 工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是許多朋友喜歡它的原因之一;
- Nginx對網絡的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
- Nginx安裝和配置比較簡單,測試起來比較方便;
- 也可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
- Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測;
- Nginx僅能支持http和Email,這樣就在適用範圍上麵小很多,這個它的弱勢;
- Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP現在也是非常流行的web架構,大有和以前最流行的LAMP架構分庭抗爭之勢,在高流量的環境中也有很好的效果。
- Nginx現在作為Web反向加速緩存越來越成熟了,很多朋友都已在生產環境下投入生產了,而且反映效果不錯,速度比傳統的Squid服務器更快,有興趣的朋友可以考慮用其作為反向代理加速器。
HAProxy的特點是:
- HAProxy是支持虛擬主機的,以前有朋友說這個不支持虛擬主機,我這裏特此更正一下。
- 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
- 支持url檢測後端的服務器出問題的檢測會有很好的幫助。
- 它跟LVS一樣,本身僅僅就隻是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的。
- HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10台時性能不如LVS,所以我向大家推薦LVS+Keepalived。
- 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作對比的結果
1、Nginx工作在網絡的7層,所以它可以針對http應用本身來做分流策略,比如針對域名、目錄結構等,相比之下LVS並不具備這樣的功能,所 以 Nginx單憑這點可利用的場合就遠多於LVS了;但Nginx有用的這些功能使其可調整度要高於LVS,所以經常要去觸碰觸碰,由LVS的第2條優點 看,觸碰多了,人為出問題的幾率也就會大。
2、Nginx對網絡的依賴較小,理論上隻要ping得通,網頁訪問正常,Nginx就能連得通,Nginx同時還能區分內外網,如果是同時擁有內外網的 節點,就相當於單機擁有了備份線路;LVS就比較依賴於網絡環境,目前來看服務器在同一網段內並且LVS使用direct方式分流,效果較能得到保證。另 外注意,LVS需要向托管商至少申請多一個ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實得跟進學習很多有關網絡通信方麵的知識,就不再是一個HTTP那麼簡單了。站長教學網
eduyo.com
3、Nginx安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日誌打印出來。LVS的安裝和配置、測試就要花比較長的時間了,因為同上所述,LVS對網絡依賴比較大,很多時候不能配置成功都是因為網絡問題而不是配置問題,出了問題要解決也相應的會麻煩得多。
4、Nginx也同樣能承受很高負載且穩定,但負載度和穩定度差LVS還有幾個等級:Nginx處理所有流量所以受限於機器IO和配置;本身的bug也還是難以避免的;Nginx沒有現成的雙機熱備方案,所以跑在單機上還是風險較大,單機上的事情全都很難說。
5、Nginx可以檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點。目前LVS中 ldirectd也能支持針對服務器內部的情況來監控,但LVS的原理使其不能重發請求。重發請求這點,譬如用戶正在上傳一個文件,而處理該上傳的節點剛 好在上傳過程中出現故障,Nginx會把上傳切到另一台服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能 會因此而惱火。
6、Nginx對請求的異步處理可以幫助節點服務器減輕負載,假如使用apache直接對外服務,那麼出現很多的窄帶鏈接時apache服務器將會占用大 量內存而不能釋放,使用多一個Nginx做apache代理的話,這些窄帶鏈接會被Nginx擋住,apache上就不會堆積過多的請求,這樣就減少了相 當多的內存占用。這點使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。LVS沒有這些功能,也就無法能 比較。
7、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
最後更新:2017-04-03 05:40:09