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

lvs

1、抗負(fù)載能力強(qiáng)??关?fù)載能力強(qiáng)、性能高,能達(dá)到F5硬件的60%;對(duì)內(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)用范圍比較廣,可以對(duì)所有應(yīng)用做負(fù)載均衡;
4、不支持正則處理,不能做動(dòng)靜分離。
5、支持負(fù)載均衡算法:rr(輪循)、wrr(帶權(quán)輪循)、lc(最小連接)、wlc(權(quán)重最小連接)
6、配置 復(fù)雜,對(duì)網(wǎng)絡(luò)依賴比較大,穩(wěn)定性很高。

nginx

1、工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略,比如針對(duì)域名、目錄結(jié)構(gòu);
2、Nginx對(duì)網(wǎng)絡(luò)的依賴比較小,理論上能ping通就就能進(jìn)行負(fù)載功能;
3、Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來比較方便;
4、也可以承擔(dān)高的負(fù)載壓力且穩(wěn)定,一般能支撐超過1萬次的并發(fā);
5、對(duì)后端服務(wù)器的健康檢查,只支持通過端口來檢測(cè),不支持通過url來檢測(cè)。
6、Nginx對(duì)請(qǐng)求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載;
7、Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍較小。
8、不支持Session的直接保持,但能通過ip_hash來解決。、對(duì)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檢測(cè)后端的服務(wù)器出問題的檢測(cè)會(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可以對(duì)Mysql進(jìn)行負(fù)載均衡,對(duì)后端的DB節(jié)點(diǎn)進(jìn)行檢測(cè)和負(fù)載均衡。
9、支持負(fù)載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權(quán)輪循)、source(原地址保持)、RI(請(qǐng)求URL)、rdp-cookie(根據(jù)cookie)
10、不能做Web服務(wù)器即Cache。

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

1、網(wǎng)站建設(shè)初期,可以選用Nigix/HAproxy作為反向代理負(fù)載均衡(或者流量不大都可以不選用負(fù)載均衡),因?yàn)槠渑渲煤?jiǎn)單,性能也能滿足一般的業(yè)務(wù)場(chǎng)景。如果考慮到負(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對(duì)維護(hù)人員的要求也會(huì)更高,投入成本也更大。

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

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

1、會(huì)話率 :?jiǎn)挝粫r(shí)間內(nèi)的處理的請(qǐng)求數(shù)
2、會(huì)話并發(fā)能力:并發(fā)處理能力
3、 數(shù)據(jù)率:處理數(shù)據(jù)能力
經(jīng)過官方測(cè)試統(tǒng)計(jì),haproxy 單位時(shí)間處理的最大請(qǐng)求數(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è)作為軟件級(jí)負(fù)載均衡,也是比較驚人的;

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

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

下述針對(duì)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è)備,記錄日志等級(jí)為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請(qǐng)求,默認(rèn)haproxy日志記錄是不記錄HTTP請(qǐng)求日志
                                                                 
    option                  dontlognull          # 啟用該項(xiàng),日志中將不會(huì)記錄空連接。所謂空連接就是在上游的負(fù)載均衡器
                                                                   或者監(jiān)控系統(tǒng)為了探測(cè)該  服務(wù)是否存活可用時(shí),需要定期的連接或者獲取某
                                                                  一固定的組件或頁面,或者探測(cè)掃描端口是否在監(jiān) 聽或開放等動(dòng)作被稱為空連接;
                                                                  官方文檔中標(biāo)注,如果該服務(wù)上游沒有其他的負(fù)載均衡器的話,建議 不要使用
                                                                   該參數(shù),因?yàn)榛ヂ?lián)網(wǎng)上的惡意掃描或其他動(dòng)作就不會(huì)被記錄下來
    option http-server-close                   #每次請(qǐng)求完畢后主動(dòng)關(guān)閉http通道
    option forwardfor       except 127.0.0.0/8   #如果服務(wù)器上的應(yīng)用程序想記錄發(fā)起請(qǐng)求的客戶端的IP地址, 需要在HAProxy
                                                                            上 配置此選項(xiàng),  這樣  HAProxy會(huì)把客戶端的IP信息發(fā)送給服務(wù)器,在HTTP
                                                                            請(qǐng)求中添加"X-Forwarded-For"字 段。  啟用  X-Forwarded-For,在requests
                                                                            頭部插入客戶端IP發(fā)送給后端的server,使后端server獲 取到客戶端的真實(shí)IP。 
    option                  redispatch                      # 當(dāng)使用了cookie時(shí),haproxy將會(huì)將其請(qǐng)求的后端服務(wù)器的serverID插入到
                                                                            cookie中,以保證 會(huì)話的SESSION持久性;而此時(shí),如果后端的服務(wù)器宕掉
                                                                            了, 但是客戶端的cookie是不會(huì)刷新 的,如果設(shè)置此參數(shù),將會(huì)將客戶的請(qǐng)
                                                                            求強(qiáng)制定向到另外一個(gè)后端server上,以保證服務(wù)的正常。
    retries                 3                             # 定義連接后端服務(wù)器的失敗重連次數(shù),連接失敗次數(shù)超過此值后將會(huì)將對(duì)應(yīng)后端
                                                                  服務(wù)器標(biāo)記為不可用
    timeout http-request    10s             #http請(qǐng)求超時(shí)時(shí)間
    timeout queue           1m                 #一個(gè)請(qǐng)求在隊(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                 #檢測(cè)超時(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前端部分。此處將對(duì)于的請(qǐng)求轉(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容