1. 程式人生 > 實用技巧 >LVS-DR

LVS-DR

LVS-DR

LVS模式

IP Tunneling

Director(分發器) 分配請求到不同的 real server。 real server 處理請求後直接回應給使用者,這樣director 負載均衡器僅處理客戶機與伺服器的一半連線。 IP Tunneling 技術極大地提高了 Director的排程處理能力,同時也極大地提高了系統能容納的最大節點數,可以超過 100 個節點。 real server 可以在任何 LAN 或 WAN 上執行,這意味著允許地理上的分佈,這在災難恢復中有重要意義。伺服器必須擁有正式的 IP 地址用於與客戶機直接通訊,並且所有伺服器必須支援 IP 隧道協議。

Direct Routing

與 IP Tunneling 類似,負載均衡器僅處理一半的連線,避免了新的效能瓶頸,同樣增加了系統的可伸縮性。 Direct Routing 與 IP Tunneling 相比,沒有 IP 封裝的開銷,但由於採用物理層(修改 MAC地址)技術,所有伺服器都必須在一個物理網段。

轉發流程

  1. 此時客戶端通過公網訪問Director對外提供的VIP地址 資料幀封裝如下表
源IP 目的IP 源MAC 目的MAC
Client:-IP 192.168.0.143 Director-VIP 192.168.0.125 Client-MAC F4:96:34:8A:A5:1B Director-VIP-MAC 00:0C:29:00:17:0D

2.分發器通過演算法將資料轉發給後端節點 例如此時轉發給Node1 資料幀封裝如下表

源IP 目的IP 源MAC 目的MAC
Client:-IP 192.168.0.143 Node1-VIP 192.168.0.125 Client-MAC F4:96:34:8A:A5:1B Node1-VIP-MAC 00:0C:29:97:BF:13

3.此時Node1解開資料包發現目的IP(VIP)是本機地址 即會進行資料解包 經過處理之後重新進行資料包封裝返回給客戶端 此時資料幀如下

源IP 目的IP 源MAC 目的MAC
Node1-VIP 192.168.0.125 Client-IP 192.168.0.143 Node1-VIP-MAC 00:0C:29:97:BF:13 Client-MAC F4:96:34:8A:A5:1B

總結:

  1. 客戶端將資料轉發給Director的VIP地址
  2. Director通過演算法將資料轉發給後端伺服器節點
  3. 後端伺服器節點進行資料響應 此時Client與Director處於同一網段則客戶端則可以直接收到該報文 如果跨網段則將資料傳送給我閘道器 由閘道器經過路由轉發給ISP通過ISP進行轉發
  4. 在hash table中記錄連線資訊
  5. Client-->Director---Node--Client

LVS-DR優點/缺點

優點

  • 後端節點基於二層轉發效率比三層轉發效率高
  • 後端節點進行資料回覆的時候無需經過分發器 減少分發器的壓力

缺點

  • 由於其基於二層轉發因此必須保證後端節點處於同一網段以及同一廣播域靈活性較差
  • 如果節點過多伺服器需要維護大量的ARP表項浪費伺服器資源

思考點

  1. 為什麼需要在後端伺服器節點配置VIP地址

    因為客戶端訪問目的地址是VIP地址 必須讓後端節點能接受這個包 如果後端節點本地沒有VIP這個地址 則資料會被丟棄
    
  2. 能否在出口網絡卡上配置VIP地址

    不可以在出口網絡卡配置VIP地址 否則會導致Client/GATEWAY之間的ARP表混亂 導致分發器不能正常工作
    
  3. RealServer為什麼需要抑制ARP

    因為分發器與後端節點都含有VIP地址 在一個網段之中不可能有重複地址 因此需要抑制ARP讓其餘節點不能發行這個地址
    

LVS-DR配置

實驗環境

Hostname IP DR
LVS VIP:192.168.0.125/24
DIP:10.1.1.1/24
Yes
Node1 VIP:192.168.0.125/24
DIP:10.1.1.2/24
No
Node2 VIP:192.168.0.125/24
DIP:10.1.1.4/24
No

Director配置

安裝

[root@LVS ~]# systemctl stop firewalld.service && setenforce 0 && iptables -F

[root@LVS ~]# yum install ipvsadm		# 安裝LVS

規則

[root@LVS ~]# ipvsadm -A -t 192.168.0.125:80 -s rr
[root@LVS ~]# ipvsadm -a -t 192.168.0.125:80 -r 10.1.1.2 -g	
	-g:指定DR模式
[root@LVS ~]# ipvsadm -a -t 192.168.0.125:80 -r 10.1.1.4 -g

Node節點配置

[root@Node1 ~]# yum install -y httpd
[root@Node1 ~]# systemctl restart httpd
[root@Node1 ~]# echo "Node1節點" > /var/www/html/index.html

[root@Node2 ~]# yum install -y httpd
[root@Node2 ~]# systemctl restart httpd
[root@Node2 ~]# echo "Node2節點" > /var/www/html/index.html

# 節點都新增如下配置
[root@Node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore	# 只回答目標 IP 地址是訪問本網路介面( eth0)的 ARP 查詢請求。
[root@Node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce	# 對查詢目標使用最適當的本地地址
[root@Node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@Node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

[root@Node1 ~]# sysctl -p # 配置生效

ps:
'''
arp_ignore 為: 1 # 只回答目標 IP 地址是訪問本網路介面( eth0)的 ARP 查詢請求。
這樣理解:
在設定引數的時候將 arp_ignore 設定為 1,意味著當別人的 arp 請求過來的時候,如果接收的網絡卡裝置
上面沒有這個 ip,就不做出響應,預設是 0,只要這臺機器上面任何一個網絡卡裝置上面有這個 ip,就響應
arp 請求,併發送 mac 地址。

arp_announce ( 宣告) 為 2
2 - 對查詢目標使用最適當的本地地址。例如,如果在 eth0 介面上接受到了一個 VIP 的 arp 請求包。內
核判斷這個 VIP 地址是不是 eth0 介面上的 IP 一樣。如果一樣,則回覆這個包。如果不一樣,就丟棄不回
應
'''

頁面測試

# 模擬節點故障
[root@Node2 ~]# systemctl stop httpd

[root@Node1 ~]# systemctl stop httpd

排程模式

-s rr 輪詢法
-s wrr 權重輪詢法
-s lc 最少連線法
-s wlc 帶權重的最少連線法
-s lblc 基於本地的最少連線法
-s dh 目標雜湊發
-s sh 源雜湊發
-s sed 最短預期延遲法
-s nq 永不排隊法

排程演算法實驗

wrr

# 此時Node2的權重是Node1權重兩邊 因此分發數量為Node1的二倍
[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s wrr
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g -w 1
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g -w 2

# 此時Node1權重為0 則Node1不會被分發請求
[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s wrr
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g -w 0
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g -w 2

lc

[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s lc
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g 
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g