三大主流軟件負(fù)載均衡器對比(LVS VS Nginx VS Haproxy)

lvs

1鸟廓、抗負(fù)載能力強(qiáng)从祝。抗負(fù)載能力強(qiáng)引谜、性能高牍陌,能達(dá)到F5硬件的60%;對內(nèi)存和cpu資源消耗比較低
2员咽、工作在網(wǎng)絡(luò)4層毒涧,通過vrrp協(xié)議轉(zhuǎn)發(fā)(僅作分發(fā)之用),具體的流量由linux內(nèi)核處理贝室,因此沒有流量的產(chǎn)生契讲。
2仿吞、穩(wěn)定性、可靠性好捡偏,自身有完美的熱備方案唤冈;(如:LVS+Keepalived)
3、應(yīng)用范圍比較廣银伟,可以對所有應(yīng)用做負(fù)載均衡你虹;
4、不支持正則處理彤避,不能做動(dòng)靜分離傅物。
5、支持負(fù)載均衡算法:rr(輪循)琉预、wrr(帶權(quán)輪循)挟伙、lc(最小連接)、wlc(權(quán)重最小連接)
6模孩、配置 復(fù)雜尖阔,對網(wǎng)絡(luò)依賴比較大,穩(wěn)定性很高榨咐。

nginx

1介却、工作在網(wǎng)絡(luò)的7層之上,可以針對http應(yīng)用做一些分流的策略块茁,比如針對域名齿坷、目錄結(jié)構(gòu);
2数焊、Nginx對網(wǎng)絡(luò)的依賴比較小永淌,理論上能ping通就就能進(jìn)行負(fù)載功能;
3佩耳、Nginx安裝和配置比較簡單遂蛀,測試起來比較方便;
4干厚、也可以承擔(dān)高的負(fù)載壓力且穩(wěn)定李滴,一般能支撐超過1萬次的并發(fā);
5蛮瞄、對后端服務(wù)器的健康檢查所坯,只支持通過端口來檢測,不支持通過url來檢測挂捅。
6芹助、Nginx對請求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載;
7、Nginx僅能支持http状土、https和Email協(xié)議无蜂,這樣就在適用范圍較小。
8声诸、不支持Session的直接保持酱讶,但能通過ip_hash來解決。彼乌、對Big request header的支持不是很好泻肯,
9、支持負(fù)載均衡算法:Round-robin(輪循)慰照、Weight-round-robin(帶權(quán)輪循)灶挟、Ip-hash(Ip哈希)
10、Nginx還能做Web服務(wù)器即Cache功能毒租。

haproxy

1稚铣、支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機(jī)墅垮;
2惕医、能夠補(bǔ)充Nginx的一些缺點(diǎn)比如Session的保持,Cookie的引導(dǎo)等工作
3算色、支持url檢測后端的服務(wù)器出問題的檢測會(huì)有很好的幫助抬伺。
4、更多的負(fù)載均衡策略比如:動(dòng)態(tài)加權(quán)輪循(Dynamic Round Robin)灾梦,加權(quán)源地址哈希(Weighted Source Hash)峡钓,加權(quán)URL哈希和加權(quán)參數(shù)哈希(Weighted Parameter Hash)已經(jīng)實(shí)現(xiàn)
5、單純從效率上來講HAProxy更會(huì)比Nginx有更出色的負(fù)載均衡速度若河。
6能岩、HAProxy可以對Mysql進(jìn)行負(fù)載均衡,對后端的DB節(jié)點(diǎn)進(jìn)行檢測和負(fù)載均衡萧福。
9拉鹃、支持負(fù)載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權(quán)輪循)统锤、source(原地址保持)毛俏、RI(請求URL)、rdp-cookie(根據(jù)cookie)
10饲窿、不能做Web服務(wù)器即Cache。

三大主流軟件負(fù)載均衡器適用業(yè)務(wù)場景

1焕蹄、網(wǎng)站建設(shè)初期逾雄,可以選用Nigix/HAproxy作為反向代理負(fù)載均衡(或者流量不大都可以不選用負(fù)載均衡),因?yàn)槠渑渲煤唵危阅芤材軡M足一般的業(yè)務(wù)場景鸦泳。如果考慮到負(fù)載均衡器是有單點(diǎn)問題银锻,可以采用Nginx+Keepalived/HAproxy+Keepalived避免負(fù)載均衡器自身的單點(diǎn)問題。
2做鹰、網(wǎng)站并發(fā)達(dá)到一定程度之后击纬,為了提高穩(wěn)定性和轉(zhuǎn)發(fā)效率,可以使用LVS钾麸、畢竟LVS比Nginx/HAproxy要更穩(wěn)定更振,轉(zhuǎn)發(fā)效率也更高。不過維護(hù)LVS對維護(hù)人員的要求也會(huì)更高饭尝,投入成本也更大肯腕。

注:Niginx與Haproxy比較:Niginx支持七層、用戶量最大钥平,穩(wěn)定性比較可靠。Haproxy支持四層和七層涉瘾,支持更多的負(fù)載均衡算法知态,支持session保存等立叛。具體選型看使用場景负敏,目前來說Haproxy由于彌補(bǔ)了一些Niginx的缺點(diǎn)用戶量也不斷在提升

衡量負(fù)載均衡器好壞的幾個(gè)重要因素

1、會(huì)話率 :單位時(shí)間內(nèi)的處理的請求數(shù)
2原在、會(huì)話并發(fā)能力:并發(fā)處理能力
3彤叉、 數(shù)據(jù)率:處理數(shù)據(jù)能力
經(jīng)過官方測試統(tǒng)計(jì)庶柿,haproxy 單位時(shí)間處理的最大請求數(shù)為20000個(gè),可以同時(shí)維護(hù)40000-50000個(gè)并發(fā)連接秽浇,最大數(shù)據(jù)處理能力為10Gbps浮庐。綜合上述柬焕,haproxy是性能優(yōu)越的負(fù)載均衡、反向代理服務(wù)器斑举。

總結(jié)HAProxy主要優(yōu)點(diǎn)

一、免費(fèi)開源璧坟,穩(wěn)定性也是非常好,這個(gè)可通過我做的一些小項(xiàng)目可以看出來雀鹃,單Haproxy也跑得不錯(cuò),穩(wěn)定性可以與LVS相媲美囊颅;

二傅瞻、根據(jù)官方文檔,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express)奸鬓,這個(gè)作為軟件級負(fù)載均衡掸读,也是比較驚人的;

三澡罚、HAProxy可以作為MySQL肾请、郵件或其它的非web的負(fù)載均衡,我們常用于它作為MySQL(讀)負(fù)載均衡隔显;

四饵逐、自帶強(qiáng)大的監(jiān)控服務(wù)器狀態(tài)的頁面,實(shí)際環(huán)境中我們結(jié)合Nagios進(jìn)行郵件或短信報(bào)警倍权,這個(gè)也是我非常喜歡它的原因之一薄声;

下述針對Haproxy的配置文件進(jìn)行詳解:

vim /etc/haproxy/haproxy.cfg
global                                                       # 全局參數(shù)的設(shè)置
    log         127.0.0.1 local2                      # log語法:log <address_1>[max_level_1] # 全局的日志配置,使用log關(guān)鍵字默辨,
                                                                     指定使用127.0.0.1
                                                                     上的syslog服務(wù)中的local0日志設(shè)備,記錄日志等級為info的日志
    chroot      /var/lib/haproxy                 #改變當(dāng)前工作目錄
    pidfile     /var/run/haproxy.pid          #當(dāng)前進(jìn)程id文件
    maxconn     4000                                #最大連接數(shù)
    user        haproxy                                #所屬用戶
    group     haproxy                                #所屬組
    daemon                                               #以守護(hù)進(jìn)程方式運(yùn)行haproxy
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http                        #默認(rèn)的模式mode { tcp|http|health }抱婉,tcp是4層桌粉,http是7層,health只會(huì)返回OK
    log                        global                    #應(yīng)用全局的日志配置
    option                  httplog                  # 啟用日志記錄HTTP請求患亿,默認(rèn)haproxy日志記錄是不記錄HTTP請求日志
                                                                 
    option                  dontlognull          # 啟用該項(xiàng)押逼,日志中將不會(huì)記錄空連接。所謂空連接就是在上游的負(fù)載均衡器
                                                                   或者監(jiān)控系統(tǒng)為了探測該  服務(wù)是否存活可用時(shí)咙冗,需要定期的連接或者獲取某
                                                                  一固定的組件或頁面漂彤,或者探測掃描端口是否在監(jiān) 聽或開放等動(dòng)作被稱為空連接;
                                                                  官方文檔中標(biāo)注立润,如果該服務(wù)上游沒有其他的負(fù)載均衡器的話媳板,建議 不要使用
                                                                   該參數(shù),因?yàn)榛ヂ?lián)網(wǎng)上的惡意掃描或其他動(dòng)作就不會(huì)被記錄下來
    option http-server-close                   #每次請求完畢后主動(dòng)關(guān)閉http通道
    option forwardfor       except 127.0.0.0/8   #如果服務(wù)器上的應(yīng)用程序想記錄發(fā)起請求的客戶端的IP地址破讨, 需要在HAProxy
                                                                            上 配置此選項(xiàng)奕纫,  這樣  HAProxy會(huì)把客戶端的IP信息發(fā)送給服務(wù)器若锁,在HTTP
                                                                            請求中添加"X-Forwarded-For"字 段。  啟用  X-Forwarded-For又固,在requests
                                                                            頭部插入客戶端IP發(fā)送給后端的server仰冠,使后端server獲 取到客戶端的真實(shí)IP。 
    option                  redispatch                      # 當(dāng)使用了cookie時(shí)洋只,haproxy將會(huì)將其請求的后端服務(wù)器的serverID插入到
                                                                            cookie中,以保證 會(huì)話的SESSION持久性肢扯;而此時(shí),如果后端的服務(wù)器宕掉
                                                                            了乍钻, 但是客戶端的cookie是不會(huì)刷新 的铭腕,如果設(shè)置此參數(shù),將會(huì)將客戶的請
                                                                            求強(qiáng)制定向到另外一個(gè)后端server上浩考,以保證服務(wù)的正常被盈。
    retries                 3                             # 定義連接后端服務(wù)器的失敗重連次數(shù),連接失敗次數(shù)超過此值后將會(huì)將對應(yīng)后端
                                                                  服務(wù)器標(biāo)記為不可用
    timeout http-request    10s             #http請求超時(shí)時(shí)間
    timeout queue           1m                 #一個(gè)請求在隊(duì)列里的超時(shí)時(shí)間
    timeout connect         10s                #連接超時(shí)
    timeout client          1m                   #客戶端超時(shí)
    timeout server          1m                   #服務(wù)器端超時(shí)
    timeout http-keep-alive 10s           #設(shè)置http-keep-alive的超時(shí)時(shí)間
    timeout check           10s                 #檢測超時(shí)
    maxconn                 3000                 #每個(gè)進(jìn)程可用的最大連接數(shù)
frontend  main *:80                             #監(jiān)聽地址為80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static          if url_static
    default_backend              my_webserver      #定義一個(gè)名為my_app前端部分。此處將對于的請求轉(zhuǎn)發(fā)給后端
backend static                                                 #使用了靜態(tài)動(dòng)態(tài)分離(如果url_path匹配  .jpg .gif .png .css .js靜態(tài)文件則
                                                                            訪問此后端)
    balance     roundrobin                               #負(fù)載均衡算法( #banlance roundrobin 輪詢尝盼,balance source 保存session值盾沫,
                                                                           支持static-rr,leastconn赴精,first,uri等參數(shù))
    server      static 127.0.0.1:80 check             #靜態(tài)文件部署在本機(jī)(也可以部署在其他機(jī)器或者squid緩存服務(wù)器)
backend my_webserver                                  #定義一個(gè)名為 my_webserver后端部分一忱。PS:此處 my_webserver只是一個(gè)
                                                                            自定義名字而已谭确, 但是需要與frontend里面 配置項(xiàng)default_backend 值相一致
    balance     roundrobin                                #負(fù)載均衡算法
    server   web01 172.31.2.33:80  check inter 2000 fall 3 weight 30              #定義的多個(gè)后端
     server   web02 172.31.2.34:80  check inter 2000 fall 3 weight 30               #定義的多個(gè)后端
     server   web03 172.31.2.35:80  check inter 2000 fall 3 weight 30                #定義的多個(gè)后端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載逐哈,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末禀梳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塞耕,更是在濱河造成了極大的恐慌郊艘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胆胰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞎嬉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門氧枣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人便监,你說我怎么就攤上這事碳想。” “怎么了胧奔?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵龙填,是天一觀的道長。 經(jīng)常有香客問我岩遗,道長,這世上最難降的妖魔是什么钳吟? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任红且,我火速辦了婚禮,結(jié)果婚禮上暇番,老公的妹妹穿的比我還像新娘。我一直安慰自己次酌,他們只是感情好舆乔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布希俩。 她就那樣靜靜地躺著,像睡著了一般颜武。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上这吻,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天唾糯,我揣著相機(jī)與錄音涡上,去河邊找鬼。 笑死吩愧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脐帝。 我是一名探鬼主播糖权,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼星澳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阀坏,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笆檀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后士修,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樱衷,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箫老,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片流妻。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绅这,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出度苔,到底是詐尸還是另有隱情浑度,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布甩骏,位于F島的核電站先慷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏论熙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一无午、第九天 我趴在偏房一處隱蔽的房頂上張望指厌。 院中可真熱鬧,春花似錦踩验、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碴里,卻和暖如春上真,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睡互。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工就珠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壳炎。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓蹂季,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撒汉。 傳聞我的和親對象是個(gè)殘疾皇子涕滋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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