1. 程式人生 > >LVS負載均衡器NAT和DR工作模式詳解

LVS負載均衡器NAT和DR工作模式詳解

lvs

在試驗之前為了更好理解設置的參數,所以先講解一下命令。

一、lvs配置文件和命令:

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

配置文件:/etc/sysconfig/ipvsadm-config 【rpm -ql ipvsadm 查詢包的具體列表】

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

-t 表示為tcp服務

-u 表示為udp服務

-s 使用的調度算法 (rr|wrr|wlc|lc|dh|sh|lblb|lblcr

-a 在服務器裏添加一條新的真是主機記錄

-m 說明lvs提供nat工作模式

-g 說明lvs提供直接路由器模式(也是lvs默認的工作模式)

-i 指定lvs工作模式為隧道模式

-m 真實服務器的權值

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

-D 刪除內核虛擬服務器列表中的一條虛擬服務器記錄

-C 清楚內核虛擬服務器中的所有記錄

-R 恢復虛擬服務器所有規則

-e 編輯虛擬服務器記錄中一條真實服務器記錄

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

-L 顯示內核服務器列表

-n 以數字方式顯示地址和端口號

--stats 統計信息

-Z 虛擬服務器記錄器清零

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

二、lvs負載均衡調度算法:

(1)靜態

①RR 輪叫調度 【一個接著一個來,平均分配】

WRR:加權輪叫

【負載能力較大者分配的更多】

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

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

(2)動態:

①LC:最少鏈接 【通過用戶請求數和服務器承載的數量,把多余請求數發送到最少的一臺服務器上】

②WLC:加權最少連接 【給服務器不忙的派發任務,同時性能較好的服務器也能勞動更多】

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

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

三、LVS負載均衡器NAT工作模式。

大概網絡拓撲圖:

技術分享

詳細說明:

CIP:指客戶端IP

VIP:指負載均衡服務器的虛擬IP

DIP:指負載均衡服務器的真實IP

RS:指後端服務器

RIP:指後端服務器IP

LVS:負載均衡服務器

①當用戶請求到達LVS,此時請求的數據報文會先到達內核空間的PREROUTING鏈,此刻報文源IP為CIP,目標IP為VIP。

②當PREROUTING鏈檢查數據包是訪問自己的,就將數據包發送到INPUT鏈。

③LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包裏面的目的地址及端口沒有在規則裏面,那麽這條數據包將被放行至用戶空間,如果在就修改數據包的目標IP地址為後端服務器IP,然後將數據包發送至POSTROUTING鏈。此刻源IP為CIP,目標地址為RIP

④POSTROUTING鏈通過選路,將數據包發送到後端服務器(RS),後端服務器(RS)對比發現目標是發自己的IP,開始構建響應報文發回給LVS,此刻報文的源地址為RIP,目標地址為CIP。

⑤LVS在響應客戶端錢,此刻會把源地址修改為自己的VIP地址,然後響應給客戶端。此刻報文的源IP為VIP,目標地址為CIP。

具體步驟:

三臺主機,一臺為LVS服務器,兩外兩臺為RS服務器。

centos7.4為LVS服務器,172.17.66.88為虛擬IP(VIP),192.168.11.11為真實IP(DIP)。

centos7和centos7-2為後臺服務器(RS),兩個網段分別為192.168.88.88和192.168.23.23(確保此地址和RS服務器能通)。

①裝包。

命令:yum install ipvsadm

②負載就均衡服務器上配置

命令:ipvsadm -A -t 172.17.66.88:80 -s wrr 【在負載均衡服務器上開一個為80端口的虛擬記錄,並使用wrr調度方式】

命令:ipvsadm -a -t 172.17.66.88:80 -t 192.168.88.88 -m -w 1 【配置web服務器後端RIP為NAT工作方式,權重為1】

命令:ipvsadm -a -t 172.17.66.88:80 -t 192.168.23.23 -m -w 1 【配置web服務器後端RIP為NAT工作方式,權重為1】

技術分享

③開啟LVS的轉發功能

echo 1 > /proc/sys/net/ipv4/ip_forward 【臨時開啟轉發功能】

vim /sysctl.conf

添加net.ipv4.ip_forward=1 sysctl -p 【永久生效】

技術分享

④添加RS到LVS的默認路由。

命令:route add default gw 192.168.11.11

技術分享

⑤測試。

在後端兩個服務器(RS)寫兩個測試頁面index.html

技術分享

以上就實現了負載均衡,由於使用的wrr調度以及權重都是1,所以每次訪問都是輪流。

註意:做該實驗把RS橋接斷掉,不然影響添加的默認路由器工作。

四、基於LVS實現DR工作模式。

這種模式是解決基於NAT模式的弊端,因為NAT模式發送的數據進出都經過LVS服務器,會對LVS造成太大壓力。

大概網絡拓撲圖:

技術分享

詳細說明:

①當客戶端發送請求到LVS,此時的請求報文會先到內核的PREROUTING鏈。此刻的源IP為CIP,目標IP 為VIP。

②PREROUTING鏈檢查數據包是訪問自己的,就發送到INPUT鏈。

③IPVS對比數據包請求的服務是否在定義的規則裏,如果是就將報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改為RIP的MAC地址,然後將數據包發送到POSTROUTING鏈。此刻的源IP和目標IP都未發送改變,只是修改了源MAC為DIP的MAC,目標MAC為RID的MAC地址。

④由於DS和RS在同一段網段,所以工作在二層。POSTROUTING檢查目標地址為RIS的MAC地址,就將數據包發送到RS。

⑤RS查看MAC地址為自己的MAC地址,就接下包。處理完成後,將響應報文通過lo接口傳送到eth0網卡後發出。此時的源地址為VIP,目標地址為CIP,由此完成了數據的傳輸。

具體步驟:

三臺服務器在同一個網段,一個為lvs服務器【虛擬IP(別名):172.17.252.251;真實IP(DIP):172.17.66.88】,後臺服務器1(RIP):172.17.110.111,後臺服務器2(RIP)172.17.33.34

①由於都在一個網段,多以在LVS配置一個網卡別名。【並只廣播自己】

技術分享 ②配置LVS的虛擬IP(VIP)和真實IP(DIP)。

技術分享

③在後臺服務器(RS)上配置VIP並只廣播自己。

技術分享 ④設置RIP到本地VIP上的路由記錄,即本地回旋網卡路由。

技術分享

⑤配置只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求以及在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.

技術分享

⑥RS2服務器上設置和RS1一樣的配置

技術分享 ⑦測試。

技術分享


LVS負載均衡器NAT和DR工作模式詳解