1. 程式人生 > >負載均衡集群企業及應用實戰--LVS

負載均衡集群企業及應用實戰--LVS

linux

負載均衡集群企業及應用實戰-Lvs

LVS是Linux Virtual Server的簡稱:

也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。

現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,

無需給內核打任何補丁,可以直接使用LVS提供的各種功能。


LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,

例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,

例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。




LVS軟件作用:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。



高並發連接:LVS基於內核網絡層面工作,有超強的承載能力和並發處理能力。

單臺LVS負載均衡器,可支持上萬並發連接。

穩定性強:是工作在網絡4層之上僅作分發之用,這個特點也決定了它在負載均衡軟件裏的性能最強,穩定性最好,對內存和cpu資源消耗極低。


成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高。


配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。


支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用


支持多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。


應用範圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、DNS、ftp服務等等


缺點:工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。


Lvs核心組件和專業術語:

LVS的管理工具和內核模塊ipvsadm/ipvs


ipvsadm:用戶空間的命令行工具,用於管理集群服務及集群服務上的RS等;

ipvs:工作於內核上的netfilter INPUT鉤子之上的程序,可根據用戶定義的集群實現請求轉發;


VS:Virtual Server #虛擬服務

Director, Balancer #負載均衡器、分發器

RS:Real Server #後端請求處理服務器

CIP: Client IP #用戶端

IP

Director Virtual IP: VIP #負載均衡器虛擬IP

Director IP: DIP #負載均衡器IP

Real Server IP: RIP #後端請求處理服務器IP



Lvs負載均衡工作模式:

Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器?地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址?外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,

它能判斷出應該將包送到內部網的哪個節點?優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器?


Lvs負載均衡NAT工作模式:

技術分享


技術分享


(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP

(d). POSTROUTING鏈通過選路,將數據包發送給Real Server

(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP

(f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP



Lvs負載均衡DR工作模式

技術分享





技術分享技術分享


(2)Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬服務器?當參與集群的計算機和作為控制管理的計算機在同一個網段時可以用此方法,控制管理的計算機接收到請求包時直接送到參與集群的節點?

直接路由模式比較特別,很難說和什麽方面相似,前種模式基本上都是工作在網絡層上(三層),而直接路由模式則應該是工作在數據鏈路層上(二層)。


工作原理 :DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REAL SERVER對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包後根據調度算法,

找出對應的 REAL SERVER,把目的MAC地址改為REAL SERVER的MAC並發給這臺REAL SERVER。這時REAL SERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。由於DR要對二層包頭進行改換,

所以DR和REAL SERVER之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上。


Lvs負載均衡NAT工作流程:

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址

(d) 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。

(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP

(f) 響應報文最終送達至客戶端


Lvs負載均衡NAT工作流程特點:

1、保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS

2、RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問

3、RS跟Director Server必須在同一個物理網絡中

4、所有的請求報文經由Director Server,但響應報文必須不能進過Director Server

5、不支持地址轉換,也不支持端口映射

6、RS可以是大多數常見的操作系統


7、RS的網關絕不允許指向DIP(因為我們不允許他經過director)

8、RS上的lo接口配置VIP的IP地址



Lvs負載均衡TUN工作模式:


1.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。


2.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麽它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。


3.RS收到請求報文後,會首先拆開第一層封裝,然後發現裏面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,並將響應報文通過lo接口送給eth0網卡直接發送給客戶端。註意:需要設置lo接口的VIP不能在共網上出現。


Lvs負載均衡full-nat工作模式:



技術分享



lvs-fullnat(雙向轉換)

通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發:

CIP --> DIP VIP --> RIP

架構特點:這是一種對nat模型的改進,是一個擴展,使得RS與Director可以處於不同網絡。

(1)RIP,DIP可以使用私有地址;

(2)RIP和DIP可以不再同一個網絡中,且RIP的網關未必需要指向DIP;

(3)支持端口映射;

(4)RS的OS可以使用任意類型;

(5)請求報文經由Director,響應報文也經由Director




Lvs負載均衡常見工作模式總結:

lvs-nat與lvs-fullnat:請求和響應報文都經由Director

lvs-nat:RIP的網關要指向DIP

lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信


lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client

lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發

lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信


Lvs負載均衡調度算法(靜態):

1.RR:輪叫調度(Round Robin)

  調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載?

2.WRR:加權輪叫(Weight RR)

  調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

3.DH:目標地址散列調度(Destination Hash )

  根據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

4.SH:源地址 hash(Source Hash)

  源地址散列”調度算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空?



Lvs負載均衡調度算法(動態):

1.LC:最少鏈接(Least Connections)

  調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用”最小連接”調度算法可以較好地均衡負載。

2.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)

  在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載?調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

3.SED:最短延遲調度(Shortest Expected Delay )

  在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處於無連接狀態。

4.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)

  無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力。


Lvs軟件包的組成:

ipvsadm:

程序包:ipvsadm(LVS管理工具)

Unit File: ipvsadm.service


主程序:/usr/sbin/ipvsadm

規則保存工具:/usr/sbin/ipvsadm-save

規則重載工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config


grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64

#查看內核是否支持IPVS


Lvs安裝方式:

LVS安裝常用兩種方式,yum安裝和源碼包安裝



yum 安裝:通常是在線安裝,好處是安裝方式簡單,不易出錯;常用的安裝yum源為epel(推薦,因為管理工具沒有太多定制型)


源碼包安裝:是先將ipvsadm的源碼下載下來,在自己的系統裏編譯生成可執行文件,然後執行。


Lvs命令使用:

-A --add-service在服務器列表中新添加一條新的虛擬服務器記錄


-t 表示為tcp服務

-u 表示為udp服務

-s --scheduler 使用的調度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默認調度算法是 wlc


ipvsadm -A -t 192.168.1.2:80 -s wlc

-a --add-server #在服務器表中添加一條新的真實主機記錄

-t --tcp-service 說明虛擬服務器提供tcp服務

-u --udp-service 說明虛擬服務器提供udp服務

-r --real-server 真實服務器地址

-m --masquerading 指定LVS工作模式為NAT模式

-w --weight 真實服務器的權值


-g --gatewaying 指定LVS工作模式為直接路由器模式(也是LVS默認的模式)

-i --ip 指定LVS的工作模式為隧道模式

-p 會話保持時間,定義流量唄轉到同一個realserver的會話存留時間

ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1


-E –edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。

-D –delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。

-C –clear 清除內核虛擬服務器表中的所有記錄。

-R –restore 恢復虛擬服務器規則

-S –save 保存虛擬服務器規則,輸出為-R 選項可讀的格式


-e –edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄


-d –delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l –list 顯示內核虛擬服務器表

--numeric, -n:以數字形式輸出地址和端口號

--exact:擴展信息,精確值

--connection,-c:當前IPVS連接輸出

--stats:統計信息

--rate :輸出速率信息

參數也可以從/proc/net/ip_vs*映射文件中查看


-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)


Lvs命令使用舉例:


ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]


修改VIP為192.168.1.2的LVS中 http服務的調度算法為Round Robin


ipvsadm –E –t 192.168.1.2:80 –s

ipvsadm -D -t|u|f virtual-service-address

刪除VIP為192.168.1.2的Service

ipvsadm -D -t 192.168.1.2:80

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]

修改RS權重為3 ipvsadm -e -t 192.168.1.2:80 -r 192.168.1.3 –g -w 3

ipvsadm -d -t|u|f service-address -r server-address


刪除一個RS:ipvsadm -d -t 192.168.1.2:80 -r 192.168.1.3:80

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]


ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]



Lvs規則保存和加載:

保存:建議保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

重載:ipvsadm-restore < /PATH/FROM/IPVSADM_FILE

ipvsadm -R < /PATH/FROM/IPVSADM_FILE

systemctl restart ipvsadm.service

LVS是Linux Virtual Server的簡稱:

也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。

現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,

無需給內核打任何補丁,可以直接使用LVS提供的各種功能。


LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,

例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,

例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。




LVS軟件作用:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。



高並發連接:LVS基於內核網絡層面工作,有超強的承載能力和並發處理能力。

單臺LVS負載均衡器,可支持上萬並發連接。

穩定性強:是工作在網絡4層之上僅作分發之用,這個特點也決定了它在負載均衡軟件裏的性能最強,穩定性最好,對內存和cpu資源消耗極低。


成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高。


配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。


支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用


支持多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。


應用範圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、DNS、ftp服務等等


缺點:工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。


Lvs核心組件和專業術語:

LVS的管理工具和內核模塊ipvsadm/ipvs


ipvsadm:用戶空間的命令行工具,用於管理集群服務及集群服務上的RS等;

ipvs:工作於內核上的netfilter INPUT鉤子之上的程序,可根據用戶定義的集群實現請求轉發;


VS:Virtual Server #虛擬服務

Director, Balancer #負載均衡器、分發器

RS:Real Server #後端請求處理服務器

CIP: Client IP #用戶端

IP

Director Virtual IP: VIP #負載均衡器虛擬IP

Director IP: DIP #負載均衡器IP

Real Server IP: RIP #後端請求處理服務器IP



Lvs負載均衡工作模式:

Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器?地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址?外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,

它能判斷出應該將包送到內部網的哪個節點?優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器?


Lvs負載均衡NAT工作模式:


技術分享


技術分享


(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP

(d). POSTROUTING鏈通過選路,將數據包發送給Real Server

(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP

(f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP



Lvs負載均衡DR工作模式

(2)Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬服務器?當參與集群的計算機和作為控制管理的計算機在同一個網段時可以用此方法,控制管理的計算機接收到請求包時直接送到參與集群的節點?

直接路由模式比較特別,很難說和什麽方面相似,前種模式基本上都是工作在網絡層上(三層),而直接路由模式則應該是工作在數據鏈路層上(二層)。


工作原理 :DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REAL SERVER對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包後根據調度算法,

找出對應的 REAL SERVER,把目的MAC地址改為REAL SERVER的MAC並發給這臺REAL SERVER。這時REAL SERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。由於DR要對二層包頭進行改換,

所以DR和REAL SERVER之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上。


Lvs負載均衡NAT工作流程:

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址

(d) 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。

(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP

(f) 響應報文最終送達至客戶端


Lvs負載均衡NAT工作流程特點:

1、保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS

2、RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問

3、RS跟Director Server必須在同一個物理網絡中

4、所有的請求報文經由Director Server,但響應報文必須不能進過Director Server

5、不支持地址轉換,也不支持端口映射

6、RS可以是大多數常見的操作系統


7、RS的網關絕不允許指向DIP(因為我們不允許他經過director)

8、RS上的lo接口配置VIP的IP地址



Lvs負載均衡TUN工作模式:

1.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。


2.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麽它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。


3.RS收到請求報文後,會首先拆開第一層封裝,然後發現裏面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,並將響應報文通過lo接口送給eth0網卡直接發送給客戶端。註意:需要設置lo接口的VIP不能在共網上出現。


Lvs負載均衡full-nat工作模式:

lvs-fullnat(雙向轉換)

通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發:

CIP --> DIP VIP --> RIP

架構特點:這是一種對nat模型的改進,是一個擴展,使得RS與Director可以處於不同網絡。

(1)RIP,DIP可以使用私有地址;

(2)RIP和DIP可以不再同一個網絡中,且RIP的網關未必需要指向DIP;

(3)支持端口映射;

(4)RS的OS可以使用任意類型;

(5)請求報文經由Director,響應報文也經由Director




Lvs負載均衡常見工作模式總結:

lvs-nat與lvs-fullnat:請求和響應報文都經由Director

lvs-nat:RIP的網關要指向DIP

lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信


lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client

lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發

lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信


Lvs負載均衡調度算法(靜態):

1.RR:輪叫調度(Round Robin)

  調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載?

2.WRR:加權輪叫(Weight RR)

  調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

3.DH:目標地址散列調度(Destination Hash )

  根據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

4.SH:源地址 hash(Source Hash)

  源地址散列”調度算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空?



Lvs負載均衡調度算法(動態):

1.LC:最少鏈接(Least Connections)

  調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用”最小連接”調度算法可以較好地均衡負載。

2.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)

  在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載?調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

3.SED:最短延遲調度(Shortest Expected Delay )

  在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處於無連接狀態。

4.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)

  無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力。


Lvs軟件包的組成:

ipvsadm:

程序包:ipvsadm(LVS管理工具)

Unit File: ipvsadm.service


主程序:/usr/sbin/ipvsadm

規則保存工具:/usr/sbin/ipvsadm-save

規則重載工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config


grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64

#查看內核是否支持IPVS


Lvs安裝方式:

LVS安裝常用兩種方式,yum安裝和源碼包安裝



yum 安裝:通常是在線安裝,好處是安裝方式簡單,不易出錯;常用的安裝yum源為epel(推薦,因為管理工具沒有太多定制型)


源碼包安裝:是先將ipvsadm的源碼下載下來,在自己的系統裏編譯生成可執行文件,然後執行。


Lvs命令使用:

-A --add-service在服務器列表中新添加一條新的虛擬服務器記錄


-t 表示為tcp服務

-u 表示為udp服務

-s --scheduler 使用的調度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默認調度算法是 wlc


ipvsadm -A -t 192.168.1.2:80 -s wlc

-a --add-server #在服務器表中添加一條新的真實主機記錄

-t --tcp-service 說明虛擬服務器提供tcp服務

-u --udp-service 說明虛擬服務器提供udp服務

-r --real-server 真實服務器地址

-m --masquerading 指定LVS工作模式為NAT模式

-w --weight 真實服務器的權值


-g --gatewaying 指定LVS工作模式為直接路由器模式(也是LVS默認的模式)

-i --ip 指定LVS的工作模式為隧道模式

-p 會話保持時間,定義流量唄轉到同一個realserver的會話存留時間

ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1


-E –edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。

-D –delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。

-C –clear 清除內核虛擬服務器表中的所有記錄。

-R –restore 恢復虛擬服務器規則

-S –save 保存虛擬服務器規則,輸出為-R 選項可讀的格式


-e –edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄


-d –delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l –list 顯示內核虛擬服務器表

--numeric, -n:以數字形式輸出地址和端口號

--exact:擴展信息,精確值

--connection,-c:當前IPVS連接輸出

--stats:統計信息

--rate :輸出速率信息

參數也可以從/proc/net/ip_vs*映射文件中查看


-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)


Lvs命令使用舉例:


ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]


修改VIP為192.168.1.2的LVS中 http服務的調度算法為Round Robin


ipvsadm –E –t 192.168.1.2:80 –s

ipvsadm -D -t|u|f virtual-service-address

刪除VIP為192.168.1.2的Service

ipvsadm -D -t 192.168.1.2:80

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]

修改RS權重為3 ipvsadm -e -t 192.168.1.2:80 -r 192.168.1.3 –g -w 3

ipvsadm -d -t|u|f service-address -r server-address


刪除一個RS:ipvsadm -d -t 192.168.1.2:80 -r 192.168.1.3:80

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]


ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]



Lvs規則保存和加載:

保存:建議保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

重載:ipvsadm-restore < /PATH/FROM/IPVSADM_FILE

ipvsadm -R < /PATH/FROM/IPVSADM_FILE

systemctl restart ipvsadm.service


負載均衡集群企業及應用實戰--LVS