Linux負載均衡 LVS(IPVS)

2022-07-25 00:03:17 字數 2587 閱讀 1514

lvs是linux virtual server的簡稱,也就是linux虛擬伺服器, 是乙個由章文嵩博士發起的自由軟體專案,現在已經是 linux標準核心的一部分。lvs是一種叫基於tcp/ip的負載均衡技術,**效率極高,具有處理百萬計併發連線請求的能力。

lvs的ip負載均衡技術是通過ipvs模組實現的。ipvs模組是lvs集群的核心軟體模組,它安裝在lvs集群作為負載均衡的主節點上,虛擬出乙個ip位址和埠對外提供服務。使用者通過訪問這個虛擬服務(vs),然後訪問請求由負載均衡器(lb)排程到後端真實伺服器(rs)中,由rs實際處理使用者的請求給返回響應。

根據負載均衡器**客戶端請求以及rs返回響應機制的不同,將ipvs的**模式分為三種:nat,dr,fullnat。(還有一種ip tunnel模式,ip通道技術,接觸比較少)

dr模式的特點:

lb只是將資料報的mac位址改寫為rs的mac位址,然後**給相應的rs。

因為lb**時並不會改寫資料報的目的ip,所以rs收到的資料報的目的ip仍是lb的虛擬服務ip。為了保證rs能夠正確處理該資料報,而不是丟棄,必須在rs的環迴網絡卡上繫結lb的虛擬服務ip。這樣rs會認為這個虛擬服務ip是自己的ip,自己是能夠處理這個資料報的。否則rs會直接丟棄該資料報!

因為lb不會改寫資料報的目的埠,所以rs服務的監聽埠必須和虛擬服務埠一致,否則rs會直接拒絕該資料報。

因為rs收到的請求資料報的源ip是客戶端的ip,所以理所當然rs的響應會直接回給客戶端,而不會再經過lb。這時候要求rs和客戶端之間的網路是可達的。

因為lb在**過程中需要改寫資料報的mac為rs的mac位址,所以要能夠查詢到rs的mac。而要獲取到rs的mac,則需要保證二者位於乙個子網,否則lb只能獲取到rs閘道器的mac位址。

nat模式下,請求包和響應包都需要經過lb處理。當客戶端的請求到達虛擬服務後,lb會對請求包做目的位址轉換(dnat),將請求包的目的ip改寫為rs的ip。當收到rs的響應後,lb會對響應包做源位址轉換(snat),將響應包的源ip改寫為lb的ip。

nat模式的特點:

對於請求包,會進行dnat;對於響應包,會進行snat。

雖然lb在**過程中做了nat轉換,但是因為只是做了部分位址**,所以rs收到的請求包裡是能看到客戶端ip的。

因為rs收到的請求包源ip是客戶端的ip,為了保證響應包在返回時能走到lb上面,所以需要將rs的預設閘道器位址配置為lb的虛擬服務ip位址。當然,如果客戶端的ip是固定的,也可以在rs上新增明細路由指向lb的虛擬服務ip,不用改預設閘道器。

因為需要將rs的預設閘道器配置為lb的虛擬服務ip位址,所以需要保證lb和rs位於同一子網。

又因為需要保證rs的響應包能走回到lb上,則客戶端不能和rs位於同一子網。否則rs直接就能獲取到客戶端的mac,響應包就直接回給客戶端了,不會走閘道器,也就走不到lb上面了。這時候由於沒有lb做snat,客戶端收到的響應包源ip是rs的ip,而客戶端的請求包目的ip是lb的虛擬服務ip,這時候客戶端無法識別響應包,會直接丟棄。

fullnat模式下,lb會對請求包和響應包都做snat+dnat。

fullnat模式的特點:

fullnat下,客戶端感知不到rs,rs也感知不到客戶端,它們都只能看到lb。此種模式和七層負載均衡有點相似,只不過不會去解析應用層協議,而是在tcp層將訊息**

不同於nat和dr要求lb和rs位於乙個子網,fullnat對於組網結構沒有要求。只需要保證客戶端和lb、lb和rs之間網路互通即可。

三種**模式效能從高到低:dr > nat >fullnat。

雖然fullnat模式的效能比不上dr和nat,但是fullnat模式沒有組網要求,允許lb和rs部署在不同的子網中,這給運維帶來了便利。並且 fullnat模式具有更好的可拓展性,可以通過增加更多的lb節點,提公升系統整體的負載均衡能力。

對於後端的rs集群,lb是如何決策應該把訊息排程到哪個rs節點呢?這是由負載均衡排程演算法決定的。ipvs常用的排程演算法有:

lb認為集群內每台rs都是相同的,會輪流進行排程分發。從資料統計上看,rr模式是排程最均衡的。

lb會根據rs上配置的權重,將訊息按權重比分發到不同的rs上。可以給效能更好的rs節點配置更高的權重,提公升集群整體的效能。

lb會根據和集群內每台rs的連線數統計情況,將訊息排程到連線數最少的rs節點上。在長連線業務場景下,lc演算法對於系統整體負載均衡的情況較好;但是在短連線業務場景下,由於連線會迅速釋放,可能會導致訊息每次都排程到同乙個rs節點,造成嚴重的負載不均衡。

最小連線數演算法的加權版~

lb上會儲存一張雜湊表,通過雜湊對映將客戶端和rs節點關聯起來。

Linux 負載均衡

在排程器的實現技術中,ip負載均衡技術是效率最高的。在已有的ip負載均衡技術中有通過網路位址轉換 network address translation 將一組伺服器構成乙個高效能的 高可用的虛擬伺服器,我們稱之為vs nat技術 virtual server via network address...

linux負載均衡

1.載均衡可以分為基於流的和基於包的,基於流的實現更合理但是有的時候必須需要基於包的,只可惜,linux核心並沒有很好的實現基於包的負載均衡。2.6早期的核心實現了乙個multipath的機制,可以認為是乙個負載均衡器,但是它卻是基於fib的,可以認為是基於流的,因為每乙個流的第乙個包從cache中...

Linux 負載均衡 LVS

1 介紹nat模式 優點 可以簡單快速配置負載均衡 缺點 單機器有瓶頸 附屬機器的閘道器 gateway 必須是主機內網ip 2 安裝 yum install y ipvsadm3 新建指令碼 bin bash director 伺服器上開啟路由 功能 echo 1 proc sys net ipv...