一羊异、LVS簡介
LVS是Linux Virtual Server的簡稱撑帖,也就是Linux虛擬服務器, 是一個由章文嵩博士發(fā)起的自由軟件項目慌植,現(xiàn)在已經(jīng)是 Linux標準內(nèi)核的一部分弓叛。LVS是一種叫基于TCP/IP的負載均衡技術(shù)璃弄,轉(zhuǎn)發(fā)效率極高哥捕,具有處理百萬計并發(fā)連接請求的能力牧抽。
LVS的IP負載均衡技術(shù)是通過IPVS模塊實現(xiàn)的。IPVS模塊是LVS集群的核心軟件模塊遥赚,它安裝在LVS集群作為負載均衡的主節(jié)點上扬舒,虛擬出一個IP地址和端口對外提供服務。用戶通過訪問這個虛擬服務(VS)凫佛,然后訪問請求由負載均衡器(LB)調(diào)度到后端真實服務器(RS)中讲坎,由RS實際處理用戶的請求給返回響應。
二愧薛、IPVS的三種轉(zhuǎn)發(fā)模式
根據(jù)負載均衡器轉(zhuǎn)發(fā)客戶端請求以及RS返回響應機制的不同晨炕,將IPVS的轉(zhuǎn)發(fā)模式分為三種:NAT,DR毫炉,F(xiàn)ULLNAT瓮栗。(還有一種IP TUNNEL模式,IP通道技術(shù),接觸比較少)
1. DR模式(Direct Routing)
DR模式下费奸,客戶端的請求包到達負載均衡器的虛擬服務IP端口后弥激,負載均衡器不會改寫請求包的IP和端口,但是會改寫請求包的MAC地址為后端RS的MAC地址货邓,然后將數(shù)據(jù)包轉(zhuǎn)發(fā)秆撮;真實服務器處理請求后,響應包直接回給客戶端换况,不再經(jīng)過負載均衡器职辨。所以DR模式的轉(zhuǎn)發(fā)效率是最高的,特別適合下行流量較大的業(yè)務場景戈二,比如請求視頻等大文件舒裤。
DR模式的特點:
數(shù)據(jù)包在LB轉(zhuǎn)發(fā)過程中,源/目的IP端口都不會變化
LB只是將數(shù)據(jù)包的MAC地址改寫為RS的MAC地址觉吭,然后轉(zhuǎn)發(fā)給相應的RS腾供。
每臺RS上都必須在環(huán)回網(wǎng)卡上綁定LB的虛擬服務IP
因為LB轉(zhuǎn)發(fā)時并不會改寫數(shù)據(jù)包的目的IP,所以RS收到的數(shù)據(jù)包的目的IP仍是LB的虛擬服務IP鲜滩。為了保證RS能夠正確處理該數(shù)據(jù)包伴鳖,而不是丟棄,必須在RS的環(huán)回網(wǎng)卡上綁定LB的虛擬服務IP徙硅。這樣RS會認為這個虛擬服務IP是自己的IP榜聂,自己是能夠處理這個數(shù)據(jù)包的。否則RS會直接丟棄該數(shù)據(jù)包嗓蘑!
RS上的業(yè)務進程必須監(jiān)聽在環(huán)回網(wǎng)卡的虛擬服務IP上须肆,且端口必須和LB上的虛擬服務端口一致
因為LB不會改寫數(shù)據(jù)包的目的端口,所以RS服務的監(jiān)聽端口必須和虛擬服務端口一致桩皿,否則RS會直接拒絕該數(shù)據(jù)包豌汇。
RS處理完請求后,響應直接回給客戶端泄隔,不再經(jīng)過LB
因為RS收到的請求數(shù)據(jù)包的源IP是客戶端的IP拒贱,所以理所當然RS的響應會直接回給客戶端,而不會再經(jīng)過LB梅尤。這時候要求RS和客戶端之間的網(wǎng)絡是可達的柜思。
LB和RS須位于同一個子網(wǎng)
因為LB在轉(zhuǎn)發(fā)過程中需要改寫數(shù)據(jù)包的MAC為RS的MAC地址,所以要能夠查詢到RS的MAC巷燥。而要獲取到RS的MAC赡盘,則需要保證二者位于一個子網(wǎng),否則LB只能獲取到RS網(wǎng)關(guān)的MAC地址缰揪。
2. NAT模式(Network Address Translation)
NAT模式下陨享,請求包和響應包都需要經(jīng)過LB處理葱淳。當客戶端的請求到達虛擬服務后,LB會對請求包做目的地址轉(zhuǎn)換(DNAT)抛姑,將請求包的目的IP改寫為RS的IP赞厕。當收到RS的響應后,LB會對響應包做源地址轉(zhuǎn)換(SNAT)定硝,將響應包的源IP改寫為LB的IP皿桑。
NAT模式的特點:
LB會修改數(shù)據(jù)包的地址
對于請求包,會進行DNAT蔬啡;對于響應包诲侮,會進行SNAT。
LB會透傳客戶端IP到RS(DR模式也會透傳)
雖然LB在轉(zhuǎn)發(fā)過程中做了NAT轉(zhuǎn)換箱蟆,但是因為只是做了部分地址轉(zhuǎn)發(fā)沟绪,所以RS收到的請求包里是能看到客戶端IP的。
需要將RS的默認網(wǎng)關(guān)地址配置為LB的浮動IP地址
因為RS收到的請求包源IP是客戶端的IP空猜,為了保證響應包在返回時能走到LB上面绽慈,所以需要將RS的默認網(wǎng)關(guān)地址配置為LB的虛擬服務IP地址。當然辈毯,如果客戶端的IP是固定的坝疼,也可以在RS上添加明細路由指向LB的虛擬服務IP,不用改默認網(wǎng)關(guān)谆沃。
LB和RS須位于同一個子網(wǎng)裙士,并且客戶端不能和LB/RS位于同一子網(wǎng)
因為需要將RS的默認網(wǎng)關(guān)配置為LB的虛擬服務IP地址,所以需要保證LB和RS位于同一子網(wǎng)管毙。
又因為需要保證RS的響應包能走回到LB上,則客戶端不能和RS位于同一子網(wǎng)桌硫。否則RS直接就能獲取到客戶端的MAC夭咬,響應包就直接回給客戶端了,不會走網(wǎng)關(guān)铆隘,也就走不到LB上面了卓舵。這時候由于沒有LB做SNAT,客戶端收到的響應包源IP是RS的IP膀钠,而客戶端的請求包目的IP是LB的虛擬服務IP掏湾,這時候客戶端無法識別響應包,會直接丟棄肿嘲。
3. FULLNAT模式
FULLNAT模式下融击,LB會對請求包和響應包都做SNAT+DNAT。
FULLNAT模式的特點:
LB完全作為一個代理服務器
FULLNAT下雳窟,客戶端感知不到RS尊浪,RS也感知不到客戶端,它們都只能看到LB。此種模式和七層負載均衡有點相似拇涤,只不過不會去解析應用層協(xié)議捣作,而是在TCP層將消息轉(zhuǎn)發(fā)
LB和RS對于組網(wǎng)結(jié)構(gòu)沒有要求
不同于NAT和DR要求LB和RS位于一個子網(wǎng),F(xiàn)ULLNAT對于組網(wǎng)結(jié)構(gòu)沒有要求鹅士。只需要保證客戶端和LB券躁、LB和RS之間網(wǎng)絡互通即可。
三種轉(zhuǎn)發(fā)模式性能從高到低:DR > NAT >FULLNAT掉盅。
雖然FULLNAT模式的性能比不上DR和NAT也拜,但是FULLNAT模式?jīng)]有組網(wǎng)要求,允許LB和RS部署在不同的子網(wǎng)中怔接,這給運維帶來了便利搪泳。并且 FULLNAT模式具有更好的可拓展性,可以通過增加更多的LB節(jié)點扼脐,提升系統(tǒng)整體的負載均衡能力岸军。
三、IPVS支持的調(diào)度算法
對于后端的RS集群瓦侮,LB是如何決策應該把消息調(diào)度到哪個RS節(jié)點呢艰赞?這是由負載均衡調(diào)度算法決定的。IPVS常用的調(diào)度算法有:
輪詢(Round Robin)
LB認為集群內(nèi)每臺RS都是相同的肚吏,會輪流進行調(diào)度分發(fā)方妖。從數(shù)據(jù)統(tǒng)計上看,RR模式是調(diào)度最均衡的罚攀。
加權(quán)輪詢(Weighted Round Robin)
LB會根據(jù)RS上配置的權(quán)重党觅,將消息按權(quán)重比分發(fā)到不同的RS上≌梗可以給性能更好的RS節(jié)點配置更高的權(quán)重杯瞻,提升集群整體的性能。
最小連接數(shù)(Least Connections)
LB會根據(jù)和集群內(nèi)每臺RS的連接數(shù)統(tǒng)計情況炫掐,將消息調(diào)度到連接數(shù)最少的RS節(jié)點上魁莉。在長連接業(yè)務場景下,LC算法對于系統(tǒng)整體負載均衡的情況較好募胃;但是在短連接業(yè)務場景下旗唁,由于連接會迅速釋放,可能會導致消息每次都調(diào)度到同一個RS節(jié)點痹束,造成嚴重的負載不均衡检疫。
加權(quán)最小連接數(shù)(Weighted Least Connections)
最小連接數(shù)算法的加權(quán)版~
地址哈希(Address Hash)
LB上會保存一張哈希表,通過哈希映射將客戶端和RS節(jié)點關(guān)聯(lián)起來参袱。