幾種負載均衡軟件的比較
發(fā)布時(shí)間:2022-05-14 01:10
來(lái)源:新網(wǎng)
閱讀:104
作者:網(wǎng)絡(luò )
欄目: 服務(wù)器
歡迎投稿:712375056
??Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件。一般對負載均衡的使用是隨著(zhù)網(wǎng)站規模的提升根據不同的階段來(lái)使用不同的技術(shù)。具體的應用需求還得具體分析,如果是中小型的Web應用,比如日PV小于1000萬(wàn),用Nginx就完全可以了;如果機器不少,可以用DNS輪詢(xún),LVS所耗費的機器還是比較多的;大型網(wǎng)站或重要的服務(wù),且服務(wù)器比較多時(shí),可以考慮用LVS。今天就由小編來(lái)和大家講一講幾種負載均衡軟件的比較:
??一種是通過(guò)硬件來(lái)進(jìn)行,常見(jiàn)的硬件有比較昂貴的F5和Array等商用的負載均衡器,它的優(yōu)點(diǎn)就是有專(zhuān)業(yè)的維護團隊來(lái)對這些服務(wù)進(jìn)行維護、缺點(diǎn)就是花銷(xiāo)太大,所以對于規模較小的網(wǎng)絡(luò )服務(wù)來(lái)說(shuō)暫時(shí)還沒(méi)有需要使用;另外一種就是類(lèi)似于Nginx/LVS/HAProxy的基于 Linux的開(kāi)源免費的負載均衡軟件,這些都是通過(guò)軟件級別來(lái)實(shí)現,所以費用非常低廉。下面說(shuō)說(shuō)各自的特點(diǎn)和適用場(chǎng)合。
??一、Nginx的優(yōu)點(diǎn)
??1. 工作在網(wǎng)絡(luò )的7層之上,可以針對http應用做一些分流的策略,比如針對、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠多于LVS了。
??2.Nginx對網(wǎng)絡(luò )穩定性的依賴(lài)非常小,理論上能ping通就就能進(jìn)行負載功能,這個(gè)也是它的優(yōu)勢之一;相反LVS對網(wǎng)絡(luò )穩定性依賴(lài)比較大,這點(diǎn)本人深有體會(huì );
??3. Nginx安裝和配置比較簡(jiǎn)單,測試起來(lái)比較方便,它基本能把錯誤用日志打印出來(lái)。LVS的配置、測試就要花比較長(cháng)的時(shí)間了,LVS對網(wǎng)絡(luò )依賴(lài)比較大。
??4. 可以承擔高負載壓力且穩定,在硬件不差的情況下一般能支撐幾萬(wàn)次的并發(fā)量,負載度比LVS相對小些。
??5. Nginx可以通過(guò)端口檢測到服務(wù)器內部的故障,比如根據服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等,并且會(huì )把返回錯誤的請求重新提交到另一個(gè)節點(diǎn),不過(guò)其中缺點(diǎn)就是不支持url來(lái)檢測。比如用戶(hù)正在上傳一個(gè)文件,而處理該上傳的節點(diǎn)剛好在上傳過(guò)程中出現故障,Nginx會(huì )把上傳切到另一臺服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話(huà),用戶(hù)可能會(huì )因此而不滿(mǎn)。
??6. Nginx不僅僅是一款優(yōu)秀的負載均衡器/反向代理軟件,它同時(shí)也是功能強大的Web
應用服務(wù)器。LNMP也是近幾年非常流行的web架構,在高流量的環(huán)境中穩定性也很好。
??7. Nginx現在作為Web反向加速緩存越來(lái)越成熟了,速度比傳統的Squid服務(wù)器更快,可以考慮用其作為反向代理加速器。
??8. Nginx可作為中層反向代理使用,這一層面Nginx基本上無(wú)對手,唯一可以對比Nginx的就只有 lighttpd了,不過(guò) lighttpd目前還沒(méi)有做到Nginx完全的功能,配置也不那么清晰易讀,社區資料也遠遠沒(méi)Nginx活躍。
??9. Nginx也可作為靜態(tài)網(wǎng)頁(yè)和圖片服務(wù)器,這方面的性能也無(wú)對手。還有Nginx社區非?;钴S,第三方模塊也很多。
??二、Nginx的缺點(diǎn)
??1. Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn)。
??2.對后端服務(wù)器的健康檢查,只支持通過(guò)端口來(lái)檢測,不支持通過(guò)url來(lái)檢測。不支持Session的直接保持,但能通過(guò)ip_hash來(lái)解決。
??LVS:使用Linux內核集群實(shí)現一個(gè)高性能、高可用的負載均衡服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
??LVS的優(yōu)點(diǎn)是:
??1. 抗負載能力強、是工作在網(wǎng)絡(luò )4層之上僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生,這個(gè)特點(diǎn)也決定了它在負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。
??2. 配置性比較低,這是一個(gè)缺點(diǎn)也是一個(gè)優(yōu)點(diǎn),因為沒(méi)有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。
??3. 工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS Keepalived,不過(guò)我們在項目實(shí)施中用得最多的還是LVS/DR Keepalived。
??4. 無(wú)流量,LVS只分發(fā)請求,而流量并不從它本身出去,這點(diǎn)保證了均衡器IO的性能不會(huì )受到大流量的影響。
??5. 應用范圍比較廣,因為L(cháng)VS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、
數據庫、在線(xiàn)聊天室等等。
??三、LVS的缺點(diǎn):
??1. 軟件本身不支持正則表達式處理,不能做動(dòng)靜分離;而現在許多網(wǎng)站在這方面都有較強的需求,這個(gè)是Nginx/HAProxy Keepalived的優(yōu)勢所在。
??2. 如果是網(wǎng)站應用比較龐大的話(huà),LVS/DR Keepalived實(shí)施起來(lái)就比較復雜了,特別后面有 WindowsServer的機器的話(huà),如果實(shí)施及配置還有維護過(guò)程就比較復雜了,相對而言,Nginx/HAProxy Keepalived就簡(jiǎn)單多了。
??四、HAProxy的特點(diǎn):
??1. HAProxy也是支持的。
??2. HAProxy的優(yōu)點(diǎn)能夠補充N(xiāo)ginx的一些缺點(diǎn),比如支持Session的保持,Cookie的引導;同時(shí)支持通過(guò)獲取指定的url來(lái)檢測后端服務(wù)器的狀態(tài)。
??3. HAProxy跟LVS類(lèi)似,本身就只是一款負載均衡軟件;單純從效率上來(lái)講HAProxy會(huì )比Nginx有更出色的負載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
??4. HAProxy支持TCP協(xié)議的負載均衡轉發(fā),可以對MySQL讀進(jìn)行負載均衡,對后端的MySQL節點(diǎn)進(jìn)行檢測和負載均衡,大家可以用LVS Keepalived對MySQL主從做負載均衡。
??5. HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現在具體有如下8種:
??① roundrobin,表示簡(jiǎn)單的輪詢(xún),這個(gè)不多說(shuō),這個(gè)是負載均衡基本都具備的;
??② static-rr,表示根據權重,建議關(guān)注;
??③ leastconn,表示最少連接者先處理,建議關(guān)注;
??④ source,表示根據請求源IP,這個(gè)跟Nginx的IP_hash機制類(lèi)似,我們用其作為解決session問(wèn)題的一種方法,建議關(guān)注;
??⑤ ri,表示根據請求的URI;
??⑥ rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
??⑦ hdr(name),表示根據HTTP請求頭來(lái)鎖定每一次HTTP請求;
??⑧ rdp-cookie(name),表示根據據cookie(name)來(lái)鎖定并哈希每一次TCP請求。
??五、Nginx和LVS對比的總結
??1. Nginx工作在網(wǎng)絡(luò )的7層,所以它可以針對http應用本身來(lái)做分流策略,比如針對
域名、目錄結構等,相比之下LVS并不具備這樣的功能,所以Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠多于LVS了;但Nginx有用的這些功能使其可調整度要高于LVS,所以經(jīng)常要去觸碰觸碰,觸碰多了,人為出問(wèn)題的幾率也就會(huì )大。
??2. Nginx對網(wǎng)絡(luò )穩定性的依賴(lài)較小,理論上只要ping得通,網(wǎng)頁(yè)訪(fǎng)問(wèn)正常,Nginx就能連得通,這是Nginx的一大優(yōu)勢!Nginx同時(shí)還能區分內外網(wǎng),如果是同時(shí)擁有內外網(wǎng)的節點(diǎn),就相當于單機擁有了備份線(xiàn)路;LVS就比較依賴(lài)于網(wǎng)絡(luò )環(huán)境,目前來(lái)看服務(wù)器在同一網(wǎng)段內并且LVS使用direct方式分流,效果較能得到保證。另外注意,LVS需要向托管商至少申請多一個(gè)ip來(lái)做Visual IP,貌似是不能用本身的IP來(lái)做VIP的。要做好LVS管理員,確實(shí)得跟進(jìn)學(xué)習很多有關(guān)網(wǎng)絡(luò )通信方面的知識,就不再是一個(gè)HTTP那么簡(jiǎn)單了。
??3. Nginx安裝和配置比較簡(jiǎn)單,測試起來(lái)也很方便,因為它基本能把錯誤用日志打印出來(lái)。LVS的安裝和配置、測試就要花比較長(cháng)的時(shí)間了;LVS對網(wǎng)絡(luò )依賴(lài)比較大,很多時(shí)候不能配置成功都是因為網(wǎng)絡(luò )問(wèn)題而不是配置問(wèn)題,出了問(wèn)題要解決也相應的會(huì )麻煩得多。
??4. Nginx也同樣能承受很高負載且穩定,但負載度和穩定度差LVS還有幾個(gè)等級:Nginx處理所有流量所以受限于機器IO和配置;本身的bug也還是難以避免的。
??5. Nginx可以檢測到服務(wù)器內部的故障,比如根據服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等,并且會(huì )把返回錯誤的請求重新提交到另一個(gè)節點(diǎn)。目前LVS中 ldirectd也能支持針對服務(wù)器內部的情況來(lái)監控,但LVS的原理使其不能重發(fā)請求。比如用戶(hù)正在上傳一個(gè)文件,而處理該上傳的節點(diǎn)剛好在上傳過(guò)程中出現故障,Nginx會(huì )把上傳切到另一臺服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話(huà),用戶(hù)可能會(huì )因此而惱火。
??6. Nginx對請求的異步處理可以幫助節點(diǎn)服務(wù)器減輕負載,假如使用 apache直接對外服務(wù),那么出現很多的窄帶鏈接時(shí)apache服務(wù)器將會(huì )占用大 量?jì)却娑荒茚尫?,使用多一個(gè)Nginx做apache代理的話(huà),這些窄帶鏈接會(huì )被Nginx擋住,apache上就不會(huì )堆積過(guò)多的請求,這樣就減少了相當多的資源占用。這點(diǎn)使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。
??7. Nginx能支持http、https和email(email的功能比較少用),LVS所支持的應用在這點(diǎn)上會(huì )比Nginx更多。在使用上,一般最前端所采取的策略應是LVS,也就是DNS的指向應為L(cháng)VS均衡器,LVS的優(yōu)點(diǎn)令它非常適合做這個(gè)任務(wù)。重要的ip地址,最好交由LVS托管,比如數據庫的 ip、webservice服務(wù)器的ip等等,這些ip地址隨著(zhù)時(shí)間推移,使用面會(huì )越來(lái)越大,如果更換ip則故障會(huì )接踵而至。所以將這些重要ip交給 LVS托管是最為穩妥的,這樣做的唯一缺點(diǎn)是需要的VIP數量會(huì )比較多。Nginx可作為L(cháng)VS節點(diǎn)機器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。當然這一層面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所遜色于Nginx。Nginx也可作為中層代理使用,這一層面Nginx基本上無(wú)對手,唯一可以撼動(dòng)Nginx的就只有lighttpd了,不過(guò)lighttpd目前還沒(méi)有能做到 Nginx完全的功能,配置也不那么清晰易讀。
??六、現在對網(wǎng)絡(luò )負載均衡的使用是隨著(zhù)網(wǎng)站規模的提升根據不同的階段來(lái)使用不同的技術(shù):
??第一階段:利用Nginx或HAProxy進(jìn)行單點(diǎn)的負載均衡,這一階段服務(wù)器規模剛脫離開(kāi)單服務(wù)器、單數據庫的模式,需要一定的負載均衡,但是仍然規模較小沒(méi)有專(zhuān)業(yè)的維護團隊來(lái)進(jìn)行維護,也沒(méi)有需要進(jìn)行大規模的網(wǎng)站部署。這樣利用Nginx或HAproxy就是第一選擇,此時(shí)這些東西上手快, 配置容易,在七層之上利用HTTP協(xié)議就可以。這時(shí)是第一選擇。
??第二階段:隨著(zhù)網(wǎng)絡(luò )服務(wù)進(jìn)一步擴大,這時(shí)單點(diǎn)的Nginx已經(jīng)不能滿(mǎn)足,這時(shí)使用LVS或者商用Array就是首要選擇,Nginx此時(shí)就作為L(cháng)VS或者Array的節點(diǎn)來(lái)使用,具體LVS或Array的是選擇是根據公司規模和預算來(lái)選擇,Array的應用交付功能非常強大,本人在某項目中使用過(guò),性?xún)r(jià)比也遠高于F5,商用首選,但是一般來(lái)說(shuō)這階段相關(guān)人才跟不上業(yè)務(wù)的提升,所以購買(mǎi)商業(yè)負載均衡已經(jīng)成為了必經(jīng)之路。
??第三階段:這時(shí)網(wǎng)絡(luò )服務(wù)已經(jīng)成為主流產(chǎn)品,此時(shí)隨著(zhù)公司知名度也進(jìn)一步擴展,相關(guān)人才的能力以及數量也隨之提升,這時(shí)無(wú)論從開(kāi)發(fā)適合自身產(chǎn)品的定制,以及降低成本來(lái)講開(kāi)源的LVS,已經(jīng)成為首選,這時(shí)LVS會(huì )成為主流。
??最終形成比較理想的基本架構為:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。
??目前關(guān)于網(wǎng)站架構一般比較合理流行的架構方案:Web前端采用Nginx/HAProxy Keepalived作負載均衡器;后端采用 MySQL數據庫一主多從和讀寫(xiě)分離,采用LVS Keepalived的架構。當然要根據項目具體需求制定方案。小伙伴們要想獲得更多負載均衡軟件的內容,請關(guān)注特網(wǎng)!