Nginx、LVS及HAProxy負載均衡軟件的優缺點詳解

轉自:https://www.csdn.net/article/2014-07-24/2820837

摘要:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件,一般對負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術,具體的應用需求還得具體分析,本文總結了三者之間的優缺點。

編者按】負載均衡 (Load Balancing) 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力,同時能夠提高網絡的靈活性和可用性。目前使用最為廣泛的負載均衡軟件是Nginx、LVS、HAProxy,本文作者結合自己的實踐經驗總結了三者各自的優缺點。文章來自ha97網。

以下為原文:

Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件,本人都在多個項目中實施過,參考了一些資料,結合自己的一些使用經驗,總結一下。

一般對負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術。具體的應用需求還得具體分析,如果是中小型的Web應用,比如日PV小于1000萬,用Nginx就完全可以了;如果機器不少,可以用DNS輪詢,LVS所耗費的機器還是比較多的;大型網站或重要的服務,且服務器比較多時,可以考慮用LVS。

一種是通過硬件來進行,常見的硬件有比較昂貴的F5和Array等商用的負載均衡器,它的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對于規模較小的網絡服務來說暫時還沒有需要使用;另外一種就是類似于Nginx/LVS/HAProxy的基于 Linux的開源免費的負載均衡軟件,這些都是通過軟件級別來實現,所以費用非常低廉。

目前關于網站架構一般比較合理流行的架構方案:Web前端采用Nginx/HAProxy+ Keepalived作負載均衡器;后端采用 MySQL數據庫一主多從和讀寫分離,采用LVS+Keepalived的架構。當然要根據項目具體需求制定方案。????

下面說說各自的特點和適用場合。

Nginx的優點是:

1. 工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多于LVS了。?

2.?Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一;相反LVS對網絡穩定性依賴比較大,這點本人深有體會;?

3. Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。?

4. 可以承擔高負載壓力且穩定,在硬件不差的情況下一般能支撐幾萬次的并發量,負載度比LVS相對小些。?

5. Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。?

6. Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。?

7. Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可以考慮用其作為反向代理加速器。?

8. Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有 lighttpd了,不過 lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀,社區資料也遠遠沒Nginx活躍。?

9. Nginx也可作為靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多。

Nginx的缺點是:

1. Nginx僅能支持http、https和Email協議,這樣就在適用范圍上面小些,這個是它的缺點。?
2.?對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。

LVS:使用Linux內核集群實現一個高性能、高可用的負載均衡服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的優點是:

1. 抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。?
2. 配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。?
3. 工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。?
4. 無流量,LVS只分發請求,而流量并不從它本身出去,這點保證了均衡器IO的性能不會受到大流量的影響。?
5. 應用范圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、在線聊天室等等。

LVS的缺點是:???

1. 軟件本身不支持正則表達式處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。?
2. 如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了,特別后面有 Windows?Server的機器的話,如果實施及配置還有維護過程就比較復雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。

HAProxy的特點是:???

1. HAProxy也是支持虛擬主機的。?
2. HAProxy的優點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態。?
3. HAProxy跟LVS類似,本身就只是一款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在并發處理上也是優于Nginx的。?
4. HAProxy支持TCP協議的負載均衡轉發,可以對MySQL讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,大家可以用LVS+Keepalived對MySQL主從做負載均衡。?
5. HAProxy負載均衡策略非常多,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,所以經常要去觸碰觸碰,觸碰多了,人為出問題的幾率也就會大。????

2. Nginx對網絡穩定性的依賴較小,理論上只要ping得通,網頁訪問正常,Nginx就能連得通,這是Nginx的一大優勢!Nginx同時還能區分內外網,如果是同時擁有內外網的節點,就相當于單機擁有了備份線路;LVS就比較依賴于網絡環境,目前來看服務器在同一網段內并且LVS使用direct方式分流,效果較能得到保證。另外注意,LVS需要向托管商至少申請多一個ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實得跟進學習很多有關網絡通信方面的知識,就不再是一個HTTP那么簡單了。

3. Nginx安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日志打印出來。LVS的安裝和配置、測試就要花比較長的時間了;LVS對網絡依賴比較大,很多時候不能配置成功都是因為網絡問題而不是配置問題,出了問題要解決也相應的會麻煩得多。?

4. Nginx也同樣能承受很高負載且穩定,但負載度和穩定度差LVS還有幾個等級:Nginx處理所有流量所以受限于機器IO和配置;本身的bug也還是難以避免的。?

5. Nginx可以檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點。目前LVS中 ldirectd也能支持針對服務器內部的情況來監控,但LVS的原理使其不能重發請求。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而惱火。?

6. Nginx對請求的異步處理可以幫助節點服務器減輕負載,假如使用 apache直接對外服務,那么出現很多的窄帶鏈接時apache服務器將會占用大 量內存而不能釋放,使用多一個Nginx做apache代理的話,這些窄帶鏈接會被Nginx擋住,apache上就不會堆積過多的請求,這樣就減少了相當多的資源占用。這點使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。?

7. Nginx能支持http、https和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。

現在對網絡負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術:

第一階段:利用Nginx或HAProxy進行單點的負載均衡,這一階段服務器規模剛脫離開單服務器、單數據庫的模式,需要一定的負載均衡,但是仍然規模較小沒有專業的維護團隊來進行維護,也沒有需要進行大規模的網站部署。這樣利用Nginx或HAproxy就是第一選擇,此時這些東西上手快, 配置容易,在七層之上利用HTTP協議就可以。這時是第一選擇。

第二階段:隨著網絡服務進一步擴大,這時單點的Nginx已經不能滿足,這時使用LVS或者商用Array就是首要選擇,Nginx此時就作為LVS或者Array的節點來使用,具體LVS或Array的是選擇是根據公司規模和預算來選擇,Array的應用交付功能非常強大,本人在某項目中使用過,性價比也遠高于F5,商用首選,但是一般來說這階段相關人才跟不上業務的提升,所以購買商業負載均衡已經成為了必經之路。

第三階段:這時網絡服務已經成為主流產品,此時隨著公司知名度也進一步擴展,相關人才的能力以及數量也隨之提升,這時無論從開發適合自身產品的定制,以及降低成本來講開源的LVS,已經成為首選,這時LVS會成為主流。????

最終形成比較理想的基本架構為:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。

原文鏈接:?Nginx/LVS/HAProxy負載均衡軟件的優缺點詳解?(責編/魏偉)

轉載于:https://www.cnblogs.com/xingzc/p/9037382.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows下使用nginx調試簡介

安裝使用 nginx是一個反向代理服務器,在web開發調試中經常用到,寫一個簡單的使用說明和總結。 1. 下載 點擊官網下載地址 下載對應版本的nginx并解壓 2. 配置 在解壓的目錄下找到conf/nginx.conf文件添加所需監聽和代理的server # 項目名稱server {liste…

MASA Framework 命令查詢職責分離

概念CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一種與領域驅動設計和事件溯源相關的架構模式, 它的全稱是Command Query Responsibility Segregation, 又叫命令查詢職責分離, Greg Young在2010年創造了這個術語, 它是基于Bertrand Meyer 的…

Google的Project Stream準備在Chrome中播放AAA控制臺游戲

Streaming full 3D games over a high-speed web connection is a fast growing trend. And with ridiculous amounts of infrastructure and remote computing power, Google is well equipped to join it. 通過高速網絡連接流式傳輸完整的3D游戲是一種快速增長的趨勢。 憑借可…

私有云之迷思:未來是什么?

本文講的是私有云之迷思:未來是什么?,【編者的話】非常好的一篇文章,作者從OpenStack目前的困境講起,聊到了私有云的產生背景,進而介紹了云計算的發展史。從云計算誕生的初衷以及現在流行的分布式應用又延伸…

如何在vue中使用sass

安裝sass 安裝教程鏈接: https://www.sass.hk/install/ 在vue中使用sass 參考鏈接: https://www.jianshu.com/p/8e60048baeb7 打開控制臺:輸入命令行 如果是沒有淘寶鏡像的,先下載淘寶鏡像,之后的下載速度比較快 npm i…

maven項目的目錄結構

1、maven項目采用“約定優于配置”的原則: src/main/java:約定用于存放源代碼,src/test/java:用于存放單元測試代碼,(測試代碼的包應該和被測試代碼包結構保持一致,方便測試查找)src…

AWS大力支持.NET 開源項目,和Azure搶.NET 客戶

出品 | OSC開源社區(ID:oschina2013)在 2022 re:Invent 會議上, AWS 軟件開發經理 Saikat Banerjee 銳評道:” 我們發現 .NET 開源項目資金嚴重不足,仍可稱之為第三方開源”。隨即表示 AWS 過去非常重視 .net 生態&…

攻防 logmein_如何使用LogMeIn Hamachi在任何地方訪問文件

攻防 logmeinWhether you’re at work and forgot some file on your home computer, want to play some music on a train, or just want to move some files between your computers, accessing your files from anywhere is a life saver. 無論您是在工作時忘記了家用計算機…

Docker-machine創建虛機時停在虛機啟動的提示上,并且創建的虛機顯示Ip Not found...

Docker-machine創建虛機時停在虛機啟動的提示上,并且創建的虛機用docker-machine ls 列出來的時候顯示Ip Not found, 是什么原因那? 【答案】 看這個帖子: https://github.com/docker/machine/issues/3832 拷貝如下: I…

【年度總結】2016年年度總結

早晨醒來,在被窩里面刷著簡書,看到一篇文章叫《深漂一年,一個資深程序員的2016年終告白》,寫的很好,很有感觸。在2016年的農歷的最后一天,總是有很多感觸要寫下來。所以下午掃墓之后,我也按照劇…

在FC中如何獲取fcdot文件

在FlexiCapture中一些客戶在問如何獲取.fcdot文件(在測試序列號下或者沒有測試模板的情況下) 第一步: 1、查看License Manager查看是否找到序列號 首先我們在開始菜單里面打開ABByyFlexiCapTure11——》選擇"工具"下的License Manager 第二步 1、選擇管理…

Blazor學習之旅 (9) 用MudBlazor重構Todo

【Blazor】| 總結/Edison Zhou大家好,我是Edison。在之前的學習之旅(3)開發一個Todo應用中,我們開發了一個簡單版的Todo,這次我們基于MudBlazor來重構這個Todo應用。Todo V1回顧在Blazor入門學習(3&#xf…

50多種在Photoshop中刪除圖像背景的工具和技術,第3頁

We’re completing the 50 Tools and Techniques today with this final installment. Read about advanced selection and masking tools, as well as some stupid graphics geek tricks, and ways to fake removing a background in seconds. 我們今天最后一部分將完成50多種…

socket跟TCP/IP 的關系,單臺服務器上的并發TCP連接數可以有多少

常識一:文件句柄限制 在linux下編寫網絡服務器程序的朋友肯定都知道每一個tcp連接都要占一個文件描述符,一旦這個文件描述符使用完了,新的連接到來返回給我們的錯誤是“Socket/File:Cantopen so many files”。 這時你需要明白操作系統對可以…

SSPL的MongoDB再被拋棄,GUN Health也合流PostgreSQL

2019 年 2 月 12 日,紅帽官方發博稱,Red Hat Satellite 將擁抱PostgreSQL,并且不會支持 SSPL 許可的 MongoDB 新版本。無獨有偶,同一天GNU Health也發博稱GNU Health Federation Information System 將從MongoDB遷移到PostgreSQL&…

開源的 .NET 數據庫遷移框架

你好,這里是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和組件,希望對您有用!簡介FluentMigrator 是一個開源的數據庫遷移框架,可以幫助用戶在開發過程中保持數據庫的一致性。它提供了一個簡潔的 Flue…

在deepin上安裝YouCompleteMe

詳細安裝步驟在github上有,https://github.com/Valloric/YouCompleteMe,我這里是自己總結的簡化版安裝步驟。 步驟1.安裝Vundle 首先,clone到本地 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim把以下內容…

2015年IT領域里Docker和其它顛覆性的趨勢

本文講的是2015年IT領域里Docker和其它顛覆性的趨勢,【編者的話】文中作者介紹了2015年IT領域的一些顛覆性的趨勢,比如Docker將如何革新PaaS、IaaS等,Docker將如何顛覆虛擬化、私有云、配置管理。 2014年真是令人興奮的一年,這一年…

進化:從孤膽極客到高效團隊_極客狂:為什么這么多的網站無法使用打印樣式表?...

進化:從孤膽極客到高效團隊It never ceases to amaze me that people have to look for a link or a button that says “Print” on a web page, especially considering there’s a miracle technology that makes that step unnecessary. Sadly almost nobody uses it, even…

Iterator 和 for...of 循環

Iterator 和 for...of 循環 Iterator(遍歷器)意義 為Array、Object、Map、Set四種數據集合,提供統一的接口機制來處理所有不同的數據結構 。 任何數據結構,只要部署 Iterator 接口,就可以完成遍歷操作(即依…