本文轉自:http://blog.csdn.net/gzh0222/article/details/8540604
對軟件實現(xiàn)負載均衡的幾個軟件庸推,小D詳細看了一下常侦,從性能和穩(wěn)定上還是LVS最牛,基本達到了F5硬件設備的60%性能贬媒,其他幾個10%都有點困難聋亡。
不過就因為LVS忒牛了,配置也最麻煩了际乘,而且健康檢測需要另外配置Ldirector坡倔,其他HAPROXY和NGINX自己就用,而且配置超級簡單脖含。
所以小D建議罪塔,如果網(wǎng)站訪問量不是門戶級別的用HAPROXY或者NGINX就OK了,到了門戶級別在用LVS+Idirector吧 哈哈
lvs和nginx都可以用作多機負載的方案养葵,它們各有優(yōu)缺垢袱,在生產環(huán)境中需要好好分析實際情況并加以利用。首先提醒港柜,做技術切不可人云亦云请契,我云即你云咳榜;同時也不可太趨向保守,過于相信舊有方式而等別人來幫你做墊被測試爽锥。把所有即時聽說到的好東西加以鉆研涌韩,從而提高自己對技術的認知和水平,乃是一個好習慣氯夷。下面來分析一下兩者:
一臣樱、lvs的優(yōu)勢:
1、抗負載能力強腮考,因為lvs工作方式的邏輯是非常之簡單雇毫,而且工作在網(wǎng)絡4層僅做請求分發(fā)之用,沒有流量踩蔚,所以在效率上基本不需要太過考慮棚放。在我手里的 lvs,僅僅出過一次問題:在并發(fā)最高的一小段時間內均衡器出現(xiàn)丟包現(xiàn)象馅闽,據(jù)分析為網(wǎng)絡問題飘蚯,即網(wǎng)卡或linux2.4內核的承載能力已到上限,內存和 cpu方面基本無消耗福也。
2局骤、配置性低,這通常是一大劣勢暴凑,但同時也是一大優(yōu)勢峦甩,因為沒有太多可配置的選項,所以除了增減服務器现喳,并不需要經(jīng)常去觸碰它穴店,大大減少了人為出錯的幾率。
3拿穴、工作穩(wěn)定,因為其本身抗負載能力很強忧风,所以穩(wěn)定性高也是順理成章默色,另外各種lvs都有完整的雙機熱備方案,所以一點不用擔心均衡器本身會出什么問題狮腿,節(jié)點出現(xiàn)故障的話腿宰,lvs會自動判別,所以系統(tǒng)整體是非常穩(wěn)定的缘厢。
4吃度、無流量,上面已經(jīng)有所提及了贴硫。lvs僅僅分發(fā)請求椿每,而流量并不從它本身出去伊者,所以可以利用它這點來做一些線路分流之用。沒有流量同時也保住了均衡器的IO性能不會受到大流量的影響间护。
5亦渗、基本上能支持所有應用,因為lvs工作在4層汁尺,所以它可以對幾乎所有應用做負載均衡法精,包括http、數(shù)據(jù)庫痴突、聊天室等等具练。另:lvs也不是完全能判別節(jié)點故障的,譬如在wlc分配方式下啊楚,集群里有一個節(jié)點沒有配置VIP代兵,會使整個集群不能使用,這時使用wrr分配方式則會丟掉一臺機如迟。目前這個問題還在進一步測試中收毫。所以,用lvs也得多多當心為妙殷勘。
簡單給出網(wǎng)絡層
7.應用層
6.表示層
5.會話層
4.傳輸層
3.網(wǎng)絡層
2.數(shù)據(jù)鏈路層
1.物理層(硬件)
二此再、nginx和lvs作對比的結果
1、nginx工作在網(wǎng)絡的7層玲销,所以它可以針對http應用本身來做分流策略输拇,比如針對域名、目錄結構等贤斜,相比之下lvs并不具備這樣的功能策吠,所以 nginx單憑這點可利用的場合就遠多于lvs了;但nginx有用的這些功能使其可調整度要高于lvs瘩绒,所以經(jīng)常要去觸碰觸碰猴抹,由lvs的第2條優(yōu)點 看,觸碰多了锁荔,人為出問題的幾率也就會大蟀给。
2、nginx對網(wǎng)絡的依賴較小阳堕,理論上只要ping得通跋理,網(wǎng)頁訪問正常,nginx就能連得通恬总,nginx同時還能區(qū)分內外網(wǎng)前普,如果是同時擁有內外網(wǎng)的 節(jié)點,就相當于單機擁有了備份線路壹堰;lvs就比較依賴于網(wǎng)絡環(huán)境拭卿,目前來看服務器在同一網(wǎng)段內并且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也還是難以避免的炮车;nginx沒有現(xiàn)成的雙機熱備方案,所以跑在單機上還是風險較大酣溃,單機上的事情全都很難說瘦穆。
5、nginx可以檢測到服務器內部的故障赊豌,比如根據(jù)服務器處理網(wǎng)頁返回的狀態(tài)碼扛或、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點碘饼。目前l(fā)vs中 ldirectd也能支持針對服務器內部的情況來監(jiān)控熙兔,但lvs的原理使其不能重發(fā)請求。重發(fā)請求這點派昧,譬如用戶正在上傳一個文件,而處理該上傳的節(jié)點剛 好在上傳過程中出現(xiàn)故障拢切,nginx會把上傳切到另一臺服務器重新處理蒂萎,而lvs就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話淮椰,用戶可能 會因此而惱火五慈。
6纳寂、nginx對請求的異步處理可以幫助節(jié)點服務器減輕負載,假如使用apache直接對外服務泻拦,那么出現(xiàn)很多的窄帶鏈接時apache服務器將會占用大 量內存而不能釋放毙芜,使用多一個nginx做apache代理的話,這些窄帶鏈接會被nginx擋住争拐,apache上就不會堆積過多的請求腋粥,這樣就減少了相 當多的內存占用。這點使用squid也有相同的作用架曹,即使squid本身配置為不緩存隘冲,對apache還是有很大幫助的。lvs沒有這些功能绑雄,也就無法能 比較展辞。
7、nginx能支持http和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是最完美的方案了目养。nginx也可作為網(wǎng)頁靜態(tài)服務器俩由,不過超出了本文討論的范疇,簡單提一下癌蚁。具體的應用還得具體分析幻梯,如果是比較小的網(wǎng)站(日PV<1000萬),用nginx就完全可以了匈勋,如果機器也不少礼旅,可以用DNS輪詢,lvs所耗費的機器還是比較多的洽洁;大型網(wǎng)站或者重要的服務痘系,機器不發(fā)愁的時候,要多多考慮利用lvs饿自。
Nginx的優(yōu)點:性能好汰翠,可以負載超過1萬的并發(fā)。功能多昭雌,除了負載均衡复唤,還能作Web服務器,而且可以通過Geo模塊來實現(xiàn)流量分配烛卧。社區(qū)活躍佛纫,第三方補丁和模塊很多支持gzip proxy缺點:不支持session保持。對后端realserver的健康檢查功能效果不好总放。而且只支持通過端口來檢測呈宇,不支持通過url來檢測。nginx對big request header的支持不是很好局雄,如果client_header_buffer_size設置的比較小甥啄,就會返回400bad request頁面。Haproxy的優(yōu)點:它的優(yōu)點正好可以補充nginx的缺點炬搭。支持session保持蜈漓,同時支持通過獲取指定的url來檢測后端服務器的狀態(tài)。支持tcp模式的負載均衡宫盔。比如可以給mysql的從服務器集群和郵件服務器做負載均衡融虽。缺點:不支持虛擬主機(這個很傻啊)目前沒有nagios和cacti的性能監(jiān)控模板LVS的優(yōu)點:性能好,接近硬件設備的網(wǎng)絡吞吐和連接負載能力灼芭。LVS的DR模式有额,支持通過廣域網(wǎng)進行負載均衡。這個其他任何負載均衡軟件目前都不具備。缺點:比較重型谆吴。另外社區(qū)不如nginx活躍。
現(xiàn)在網(wǎng)絡中常見的的負載均衡主要分為兩種:一種是通過硬件來進行進行苛预,常見的硬件有比較昂貴的NetScaler句狼、F5、Radware和Array等商用的負載均衡器热某,也有類似于LVS腻菇、Nginx、HAproxy的基于Linux的開源的負載均衡策略,
商用負載均衡里面NetScaler從效果上比F5的效率上更高昔馋。對于負載均衡器來說筹吐,不過商用負載均衡由于可以建立在四~七層協(xié)議之上,因此適用 面更廣所以有其不可替代性秘遏,他的優(yōu)點就是有專業(yè)的維護團隊來對這些服務進行維護丘薛、缺點就是花銷太大,所以對于規(guī)模較小的網(wǎng)絡服務來說暫時還沒有需要使用邦危。
另一種負載均衡的方式是通過軟件:比較常見的有LVS洋侨、Nginx、HAproxy等倦蚪,其中LVS是建立在四層協(xié)議上面的希坚,而另外Nginx和HAproxy是建立在七層協(xié)議之上的,下面分別介紹關于
LVS:使用集群技術和Linux操作系統(tǒng)實現(xiàn)一個高性能陵且、高可用的服務器裁僧,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)慕购。
LVS的特點是:
1聊疲、抗負載能力強、是工作在網(wǎng)絡4層之上僅作分發(fā)之用脓钾,沒有流量的產生售睹;
2、配置性比較低可训,這是一個缺點也是一個優(yōu)點昌妹,因為沒有可太多配置的東西,所以并不需要太多接觸握截,大大減少了人為出錯的幾率飞崖;
3、工作穩(wěn)定谨胞,自身有完整的雙機熱備方案固歪;
4、無流量,保證了均衡器IO的性能不會收到大流量的影響牢裳;
5逢防、應用范圍比較廣,可以對所有應用做負載均衡蒲讯;
6忘朝、LVS需要向IDC多申請一個IP來做Visual IP,因此需要一定的網(wǎng)絡知識判帮,所以對操作人的要求比較高局嘁。
Nginx的特點是:
1、工作在網(wǎng)絡的7層之上晦墙,可以針對http應用做一些分流的策略悦昵,比如針對域名、目錄結構晌畅;
2但指、Nginx對網(wǎng)絡的依賴比較小抗楔;
3枚赡、Nginx安裝和配置比較簡單,測試起來比較方便谓谦;
4贫橙、也可以承擔高的負載壓力且穩(wěn)定,一般能支撐超過1萬次的并發(fā)反粥;
5卢肃、Nginx可以通過端口檢測到服務器內部的故障,比如根據(jù)服務器處理網(wǎng)頁返回的狀態(tài)碼才顿、超時等等莫湘,并且會把返回錯誤的請求重新提交到另一個節(jié)點,不過其中缺點就是不支持url來檢測郑气;
6幅垮、Nginx對請求的異步處理可以幫助節(jié)點服務器減輕負載;
7尾组、Nginx能支持http和Email忙芒,這樣就在適用范圍上面小很多;
8讳侨、不支持Session的保持呵萨、對Big request header的支持不是很好,另外默認的只有Round-robin和IP-hash兩種負載均衡算法跨跨。
HAProxy的特點是:
1潮峦、HAProxy是工作在網(wǎng)絡7層之上。
2、能夠補充Nginx的一些缺點比如Session的保持忱嘹,Cookie的引導等工作
3嘱腥、支持url檢測后端的服務器出問題的檢測會有很好的幫助。
4拘悦、更多的負載均衡策略比如:動態(tài)加權輪循(Dynamic Round Robin)爹橱,加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數(shù)哈希(Weighted Parameter Hash)已經(jīng)實現(xiàn)
5窄做、單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。
6慰技、HAProxy可以對Mysql進行負載均衡椭盏,對后端的DB節(jié)點進行檢測和負載均衡。
現(xiàn)在網(wǎng)站發(fā)展的趨勢對網(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或者商用F5就是首要選擇今野,Nginx此時就作為LVS或者 F5的節(jié)點來使用葡公,具體LVS或者F5的是選擇是根據(jù)公司規(guī)模,人才以及資金能力來選擇的条霜,這里也不做詳談催什,但是一般來說這階段相關人才跟不上業(yè)務的提 升,所以購買商業(yè)負載均衡已經(jīng)成為了必經(jīng)之路宰睡。
第三階段:這時網(wǎng)絡服務已經(jīng)成為主流產品蒲凶,此時隨著公司知名度也進一步擴展,相關人才的能力以及數(shù)量也隨之提升拆内,這時無論從開發(fā)適合自身產品的定制豹爹,以及降低成本來講開源的LVS,已經(jīng)成為首選矛纹,這時LVS會成為主流臂聋。
最終形成比較理想的狀態(tài)為:F5/LVS<—>Haproxy<—>Squid/Varnish<—>AppServer。