Nginx/LVS/HAProxy負載均衡軟件的優(yōu)缺點詳解[轉]

PS:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件,本人都在多個項目中實施過,參考了一些資料杂数,結合自己的一些使用經(jīng)驗奋单,總結一下锉试。
一般對負載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來使用不同的技術。具體的應用需求還得具體分析览濒,如果是中小型的Web應用呆盖,比如日PV小于1000萬,用Nginx就完全可以了贷笛;如果機器不少应又,可以用DNS輪詢,LVS所耗費的機器還是比較多的乏苦;大型網(wǎng)站或重要的服務株扛,且服務器比較多時,可以考慮用LVS汇荐。
一種是通過硬件來進行進行席里,常見的硬件有比較昂貴的F5和Array等商用的負載均衡器,它的優(yōu)點就是有專業(yè)的維護團隊來對這些服務進行維護拢驾、缺點就是花銷太大奖磁,所以對于規(guī)模較小的網(wǎng)絡服務來說暫時還沒有需要使用;另外一種就是類似于Nginx/LVS/HAProxy的基于Linux的開源免費的負載均衡軟件繁疤,這些都是通過軟件級別來實現(xiàn)咖为,所以費用非常低廉。
目前關于網(wǎng)站架構一般比較合理流行的架構方案:Web前端采用Nginx/HAProxy+Keepalived作負載均衡器稠腊;后端采用MySQL數(shù)據(jù)庫一主多從和讀寫分離躁染,采用LVS+Keepalived的架構。當然要根據(jù)項目具體需求制定方案架忌。下面說說各自的特點和適用場合吞彤。

一、Nginx
Nginx的優(yōu)點是:

  1. 工作在網(wǎng)絡的7層之上,可以針對http應用做一些分流的策略饰恕,比如針對域名挠羔、目錄結構,它的正則規(guī)則比HAProxy更為強大和靈活埋嵌,這也是它目前廣泛流行的主要原因之一破加,Nginx單憑這點可利用的場合就遠多于LVS了。
  2. Nginx對網(wǎng)絡穩(wěn)定性的依賴非常小雹嗦,理論上能ping通就就能進行負載功能范舀,這個也是它的優(yōu)勢之一;相反LVS對網(wǎng)絡穩(wěn)定性依賴比較大了罪,這點本人深有體會锭环;
  3. Nginx安裝和配置比較簡單,測試起來比較方便泊藕,它基本能把錯誤用日志打印出來辅辩。LVS的配置、測試就要花比較長的時間了吱七,LVS對網(wǎng)絡依賴比較大。
  4. 可以承擔高負載壓力且穩(wěn)定鹤竭,在硬件不差的情況下一般能支撐幾萬次的并發(fā)量踊餐,負載度比LVS相對小些。
  5. Nginx可以通過端口檢測到服務器內(nèi)部的故障臀稚,比如根據(jù)服務器處理網(wǎng)頁返回的狀態(tài)碼吝岭、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點吧寺,不過其中缺點就是不支持url來檢測窜管。比如用戶正在上傳一個文件,而處理該上傳的節(jié)點剛好在上傳過程中出現(xiàn)故障稚机,Nginx會把上傳切到另一臺服務器重新處理幕帆,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話赖条,用戶可能會因此而不滿失乾。
  6. Nginx不僅僅是一款優(yōu)秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器纬乍。LNMP也是近幾年非常流行的web架構碱茁,在高流量的環(huán)境中穩(wěn)定性也很好。
  7. Nginx現(xiàn)在作為Web反向加速緩存越來越成熟了仿贬,速度比傳統(tǒng)的Squid服務器更快纽竣,可以考慮用其作為反向代理加速器。
  8. Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手蜓氨,唯一可以對比Nginx的就只有l(wèi)ighttpd了聋袋,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀语盈,社區(qū)資料也遠遠沒Nginx活躍舱馅。
  9. Nginx也可作為靜態(tài)網(wǎng)頁和圖片服務器,這方面的性能也無對手刀荒。還有Nginx社區(qū)非炒停活躍,第三方模塊也很多缠借。

淘寶的前端使用的Tengine就是基于nginx做的二次開發(fā)定制版干毅。
Nginx常規(guī)的HTTP請求和響應流程圖:


nginx

Nginx的缺點是:

  1. Nginx僅能支持http、https和Email協(xié)議泼返,這樣就在適用范圍上面小些硝逢,這個是它的缺點。
  2. 對后端服務器的健康檢查绅喉,只支持通過端口來檢測渠鸽,不支持通過url來檢測。不支持Session的直接保持柴罐,但能通過ip_hash來解決徽缚。

二、LVS
LVS:使用Linux內(nèi)核集群實現(xiàn)一個高性能革屠、高可用的負載均衡服務器凿试,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)似芝。
LVS的優(yōu)點是:
1. 抗負載能力強那婉、是工作在網(wǎng)絡4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生
党瓮,這個特點也決定了它在負載均衡軟件里的性能最強的详炬,對內(nèi)存和cpu資源消耗比較低。
2寞奸、配置性比較低痕寓,這是一個缺點也是一個優(yōu)點,因為沒有可太多配置的東西蝇闭,所以并不需要太多接觸呻率,大大減少了人為出錯的幾率。
3呻引、工作穩(wěn)定礼仗,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived元践,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived韭脊。
4、無流量单旁,LVS只分發(fā)請求沪羔,而流量并不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響象浑。
5蔫饰、應用范圍比較廣,因為LVS工作在4層愉豺,所以它幾乎可以對所有應用做負載均衡篓吁,包括http、數(shù)據(jù)庫蚪拦、在線聊天室等等杖剪。

LVS DR(Direct Routing)模式的網(wǎng)絡流程圖:

lvs_dr

LVS的缺點是:
1、軟件本身不支持正則表達式處理驰贷,不能做動靜分離
盛嘿;而現(xiàn)在許多網(wǎng)站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優(yōu)勢所在括袒。
2次兆、如果是網(wǎng)站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了箱熬,特別后面有Windows Server的機器的話类垦,如果實施及配置還有維護過程就比較復雜了狈邑,相對而言城须,Nginx/HAProxy+Keepalived就簡單多了。

三米苹、HAProxy

HAProxy的特點是:
1糕伐、HAProxy也是支持虛擬主機的。
2蘸嘶、HAProxy的優(yōu)點能夠補充Nginx的一些缺點良瞧,比如
支持Session的保持,Cookie的引導训唱;同時支持通過獲取指定的url來檢測后端服務器的狀態(tài)褥蚯。
3、HAProxy跟LVS類似况增,本身就只是一款負載均衡軟件赞庶;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
4歧强、HAProxy
支持TCP協(xié)議的負載均衡轉發(fā)
澜薄,可以對MySQL讀進行負載均衡,對后端的MySQL節(jié)點進行檢測和負載均衡摊册,大家可以用LVS+Keepalived對MySQL主從做負載均衡肤京。
5、HAProxy負載均衡策略非常多茅特,HAProxy的負載均衡算法現(xiàn)在具體有如下8種:
① roundrobin忘分,表示簡單的輪詢,這個不多說温治,這個是負載均衡基本都具備的饭庞;
② static-rr,表示根據(jù)權重熬荆,建議關注舟山;
③ leastconn,表示最少連接者先處理卤恳,建議關注累盗;
④ source,表示根據(jù)請求源IP突琳,這個跟Nginx的IP_hash機制類似若债,我們用其作為解決session問題的一種方法,建議關注拆融;
⑤ ri蠢琳,表示根據(jù)請求的URI;
⑥ rl_param镜豹,表示根據(jù)請求的URl參數(shù)’balance url_param’ requires an URL parameter name傲须;
⑦ hdr(name),表示根據(jù)HTTP請求頭來鎖定每一次HTTP請求趟脂;
⑧ rdp-cookie(name)泰讽,表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請求。

四昔期、總結

**Nginx和LVS對比的總結:
**1已卸、Nginx工作在網(wǎng)絡的7層,所以它可以針對http應用本身來做分流策略硼一,比如針對域名累澡、目錄結構等,相比之下LVS并不具備這樣的功能般贼,所以Nginx單憑這點可利用的場合就遠多于LVS了愧哟;但Nginx有用的這些功能使其可調整度要高于LVS惑申,所以經(jīng)常要去觸碰觸碰,觸碰多了翅雏,人為出問題的幾率也就會大圈驼。
2、Nginx對網(wǎng)絡穩(wěn)定性的依賴較小望几,理論上只要ping得通绩脆,網(wǎng)頁訪問正常,Nginx就能連得通橄抹,這是Nginx的一大優(yōu)勢靴迫!Nginx同時還能區(qū)分內(nèi)外網(wǎng),如果是同時擁有內(nèi)外網(wǎng)的節(jié)點楼誓,就相當于單機擁有了備份線路玉锌;LVS就比較依賴于網(wǎng)絡環(huán)境,目前來看服務器在同一網(wǎng)段內(nèi)并且LVS使用direct方式分流疟羹,效果較能得到保證主守。另外注意,LVS需要向托管商至少申請多一個ip來做Visual IP榄融,貌似是不能用本身的IP來做VIP的参淫。要做好LVS管理員,確實得跟進學習很多有關網(wǎng)絡通信方面的知識愧杯,就不再是一個HTTP那么簡單了涎才。
3、Nginx安裝和配置比較簡單力九,測試起來也很方便耍铜,因為它基本能把錯誤用日志打印出來。LVS的安裝和配置跌前、測試就要花比較長的時間了棕兼;LVS對網(wǎng)絡依賴比較大,很多時候不能配置成功都是因為網(wǎng)絡問題而不是配置問題舒萎,出了問題要解決也相應的會麻煩得多程储。
4蹭沛、Nginx也同樣能承受很高負載且穩(wěn)定臂寝,但負載度和穩(wěn)定度差LVS還有幾個等級:Nginx處理所有流量所以受限于機器IO和配置;本身的bug也還是難以避免的摊灭。
5咆贬、Nginx可以檢測到服務器內(nèi)部的故障,比如根據(jù)服務器處理網(wǎng)頁返回的狀態(tài)碼帚呼、超時等等掏缎,并且會把返回錯誤的請求重新提交到另一個節(jié)點皱蹦。目前LVS中 ldirectd也能支持針對服務器內(nèi)部的情況來監(jiān)控,但LVS的原理使其不能重發(fā)請求眷蜈。比如用戶正在上傳一個文件沪哺,而處理該上傳的節(jié)點剛好在上傳過程中出現(xiàn)故障,Nginx會把上傳切到另一臺服務器重新處理酌儒,而LVS就直接斷掉了辜妓,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而惱火忌怎。
6籍滴、Nginx對請求的異步處理可以幫助節(jié)點服務器減輕負載,假如使用apache直接對外服務榴啸,那么出現(xiàn)很多的窄帶鏈接時apache服務器將會占用大 量內(nèi)存而不能釋放孽惰,使用多一個Nginx做apache代理的話,這些窄帶鏈接會被Nginx擋住鸥印,apache上就不會堆積過多的請求勋功,這樣就減少了相當多的資源占用。這點使用squid也有相同的作用库说,即使squid本身配置為不緩存酝润,對apache還是有很大幫助的。
7璃弄、Nginx能支持http要销、https和email(email的功能比較少用),LVS所支持的應用在這點上會比Nginx更多夏块。在使用上疏咐,一般最前端所采取的策略應是LVS,也就是DNS的指向應為LVS均衡器脐供,LVS的優(yōu)點令它非常適合做這個任務浑塞。重要的ip地址,最好交由LVS托管政己,比如數(shù)據(jù)庫的 ip酌壕、webservice服務器的ip等等,這些ip地址隨著時間推移歇由,使用面會越來越大葵硕,如果更換ip則故障會接踵而至挑辆。所以將這些重要ip交給 LVS托管是最為穩(wěn)妥的,這樣做的唯一缺點是需要的VIP數(shù)量會比較多。Nginx可作為LVS節(jié)點機器使用寒瓦,一是可以利用Nginx的功能鹤盒,二是可以利用Nginx的性能孩饼。當然這一層面也可以直接使用squid,squid的功能方面就比Nginx弱不少了萝衩,性能上也有所遜色于Nginx。Nginx也可作為中層代理使用没咙,這一層面Nginx基本上無對手猩谊,唯一可以撼動Nginx的就只有l(wèi)ighttpd了,不過lighttpd目前還沒有能做到 Nginx完全的功能祭刚,配置也不那么清晰易讀预柒。另外,中層代理的IP也是重要的袁梗,所以中層代理也擁有一個VIP和LVS是最完美的方案了宜鸯。具體的應用還得具體分析,如果是比較小的網(wǎng)站(日PV小于1000萬)遮怜,用Nginx就完全可以了淋袖,如果機器也不少,可以用DNS輪詢锯梁,LVS所耗費的機器還是比較多的即碗;大型網(wǎng)站或者重要的服務,機器不發(fā)愁的時候陌凳,要多多考慮利用LVS剥懒。

現(xiàn)在對網(wǎng)絡負載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來使用不同的技術:

第一階段:利用Nginx或HAProxy進行單點的負載均衡,這一階段服務器規(guī)模剛脫離開單服務器合敦、單數(shù)據(jù)庫的模式初橘,需要一定的負載均衡,但是仍然規(guī)模較小沒有專業(yè)的維護團隊來進行維護充岛,也沒有需要進行大規(guī)模的網(wǎng)站部署保檐。這樣利用Nginx或HAproxy就是第一選擇,此時這些東西上手快崔梗, 配置容易夜只,在七層之上利用HTTP協(xié)議就可以。這時是第一選擇蒜魄。

第二階段:隨著網(wǎng)絡服務進一步擴大扔亥,這時單點的Nginx已經(jīng)不能滿足,這時使用LVS或者商用Array就是首要選擇谈为,Nginx此時就作為LVS或者Array的節(jié)點來使用旅挤,具體LVS或Array的是選擇是根據(jù)公司規(guī)模和預算來選擇,Array的應用交付功能非常強大峦阁,本人在某項目中使用過谦铃,性價比也遠高于F5耘成,商用首選榔昔!但是一般來說這階段相關人才跟不上業(yè)務的提升驹闰,所以購買商業(yè)負載均衡已經(jīng)成為了必經(jīng)之路。

第三階段:這時網(wǎng)絡服務已經(jīng)成為主流產(chǎn)品撒会,此時隨著公司知名度也進一步擴展嘹朗,相關人才的能力以及數(shù)量也隨之提升,這時無論從開發(fā)適合自身產(chǎn)品的定制诵肛,以及降低成本來講開源的LVS屹培,已經(jīng)成為首選,這時LVS會成為主流怔檩。最終形成比較理想的基本架構為:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer褪秀。


HAProxy,static-rr 是簡單的輪詢薛训,選擇 server 的邏輯最為簡單媒吗。而 roundrobin 其實是高級一點的輪詢,支持 HAProxy 運行期間動態(tài)修改 server weight乙埃。

不管是 static-rr闸英, roundrobin 還是 leastconn,都是天然支持 weight 的介袜。只是運行期間甫何,static-rr 的 server weight 不可更改或者更改了也無效。所有 weight 為 1 的情形本身就是 weight-based 負載均衡算法的特例遇伞。

HAProxy 缺點沒有介紹辙喂。結合個人對 Nignx 的部分了解,列舉一些 HAProxy 不及 Nginx 的地方鸠珠,僅供參考:

  1. 不支持 POP/SMTP 協(xié)議
  2. 不支持 SPDY 協(xié)議
  3. 不支持 HTTP cache 功能〖优桑現(xiàn)在不少開源的 lb 項目,都或多或少具備 HTTP cache 功能跳芳。
  4. 重載配置的功能需要重啟進程芍锦,雖然也是 soft restart,但沒有 Nginx 的 reaload 更為平滑和友好飞盆。
  5. 多進程模式支持不夠好娄琉。

原文地址:http://www.ha97.com/5646.html

(總結)Nginx/LVS/HAProxy負載均衡軟件的優(yōu)缺點詳解

發(fā)表于: Linux, Web, Web Server, 個人日記, 原創(chuàng)總結 | 作者: 博客教主
標簽: Haproxy,LVS,Nginx,總結,詳解,負載均衡

永久鏈接 : http://www.ha97.com/5646.html

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吓歇,隨后出現(xiàn)的幾起案子孽水,更是在濱河造成了極大的恐慌,老刑警劉巖城看,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女气,死亡現(xiàn)場離奇詭異,居然都是意外死亡测柠,警方通過查閱死者的電腦和手機炼鞠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門缘滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谒主,你說我怎么就攤上這事朝扼。” “怎么了霎肯?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵擎颖,是天一觀的道長。 經(jīng)常有香客問我观游,道長搂捧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任懂缕,我火速辦了婚禮异旧,結果婚禮上,老公的妹妹穿的比我還像新娘提佣。我一直安慰自己吮蛹,他們只是感情好,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布拌屏。 她就那樣靜靜地躺著潮针,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倚喂。 梳的紋絲不亂的頭發(fā)上每篷,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音端圈,去河邊找鬼焦读。 笑死,一個胖子當著我的面吹牛舱权,可吹牛的內(nèi)容都是我干的矗晃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼宴倍,長吁一口氣:“原來是場噩夢啊……” “哼张症!你這毒婦竟也來了?” 一聲冷哼從身側響起鸵贬,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤俗他,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阔逼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兆衅,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羡亩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摩疑。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖夕春,靈堂內(nèi)的尸體忽然破棺而出未荒,到底是詐尸還是另有隱情专挪,我是刑警寧澤及志,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站寨腔,受9級特大地震影響速侈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜迫卢,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一倚搬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乾蛤,春花似錦每界、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至上荡,卻和暖如春趴樱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酪捡。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工叁征, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逛薇。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓捺疼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親永罚。 傳聞我的和親對象是個殘疾皇子帅涂,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容