基於DR(直接路由)模式的負載均衡配置詳解

DR(直接路由)是三種負載均衡模式其中之一,也是使用最多的一種模式,關於該模式的介紹,能夠參考博文:http://www.javashuo.com/article/p-pfruhwkf-gs.html
環境以下:
基於DR(直接路由)模式的負載均衡配置詳解
一、全部web節點和調度器都配置上VIP:客戶端訪問VIP(羣集的虛擬IP地址)時,如果html

調度器將請求轉發給web節點,而後由web節點直接去響應客戶端,那麼客戶端在收到web

數據包後,發現收到的數據包源地址不是200.0.0.254,那麼就會直接丟棄web服務器返回vim

的數據包,爲了解決這一問題,因此須要在全部web節點和調度器的虛接口上配置上200.0.0.254服務器

這個地址,而且經過添加一條路由,將訪問VIP的數據限制在本地,以免通訊紊亂。
.
二、解決關於web節點ARP響應的問題:在全部web節點和調度器上配置上200.0.0.254負載均衡

這個地址後,當client訪問200.0.0.254這個地址時,全部的web節點都有這個地址,因此dom

都會去進行ARP響應,那麼這樣一來,可能就形成了client略過調度器直接去訪問web節點ide

了,這樣一來,調度器就沒有存在的意義了,天然也就達不到負載均衡的效果了,因此須要工具

關閉web節點的部分ARP應答,在廣播200.0.0.254這個地址時,只讓調度器去響應,weboop

節點不響應該廣播。
.測試

三、解決調度器內核自帶的ICMP的重定向優化問題:Linux內核有一個ICMP優化功能,

就是在client第一次訪問調度器時,調度器會將請求轉發給某一個web節點,在這時,Linux

自帶的ICMP優化功能會發現,客戶端能夠直接和web節點通訊,而後就會發送一個數據

包,告訴client,以後全部訪問200.0.0.254的數據包,直接發給那個web節點便可,這樣之

後全部的訪問請求都將直接發送給某一個web節點,而再也不通過調度器,這樣確定也是不可

以的,沒法達到負載均衡的效果了。因此須要關閉Linux內核的ICMP重定向參數響應。
準備工做:
一、自行配置除 VIP 之外的地址
二、準備相關軟件包
配置以下:
1、配置負載調度器:
採用虛接口的方式爲網卡 ens33 綁定 VIP 地址,以便響應羣集訪問。

[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0          
[root@localhost network-scripts]# vim ifcfg-ens33:0              # 修改ens33:0,配置VIP
....................
IPADDR=200.0.0.254                                # 修改以下四條,注意網卡名稱一致
NETMASK=255.255.255.0
NAME=ens33:0
DEVICE=ens33:0
....................
[root@localhost network-scripts]# ifup ens33:0                 # 啓動虛接口
[root@localhost network-scripts]# ifconfig ens33:0                 # 查看相關配置是否成功
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.254  netmask 255.255.255.0  broadcast 200.0.0.255
        ether 00:0c:29:f1:61:28  txqueuelen 1000  (Ethernet)
root@localhost network-scripts]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.1  netmask 255.255.255.0  broadcast 200.0.0.255
        inet6 fe80::595f:84d:a379:7b6e  prefixlen 64  scopeid 0x20<link>

調整/proc響應參數(關閉 Linux 內核的重定向參數響應):

[root@localhost /]# vim /etc/sysctl.conf                   # 寫入以下三行
................
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost /]# sysctl -p                      # 刷新配置使之生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

配置負載均衡策略:

[root@localhost /]# modprobe ip_vs                         # 加載 ip_vs 模塊
[root@localhost /]# yum -y install ipvsadm                # 安裝 ipvsadm 工具
[root@localhost /]# ipvsadm -C                                  # 清除原有策略
[root@localhost /]# ipvsadm -A -t 200.0.0.254:80 -s rr           # 配置羣集VIP及添加相關節點
[root@localhost /]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.2:80 -g -w 1
[root@localhost /]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.3:80 -g -w 1
[root@localhost /]# ipvsadm-save                             # 保存策略
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 200.0.0.2:http -g -w 1
-a -t localhost.localdomain:http -r 200.0.0.3:http -g -w 1
[root@localhost /]# ipvsadm-save > /etc/sysconfig/ipvsadm             # 導出以備份
[root@localhost /]# ipvsadm -ln                                # 確認羣集當前策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.254:80 rr
  -> 200.0.0.2:80                 Route   1      0          0         
  -> 200.0.0.3:80                 Route   1      0          0

2、配置web節點服務器:
y由於 web 節點服務器的VIP地址僅用來發送web響應數據包的源地址,並不須要監聽客戶機的訪問請求(由調度器監聽並分發)。所以使用虛接口lo:0來承載VIP地址,並添加一條路由記錄,將訪問VIP的數據包限制在本地。

[root@web1 /]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0              # 編輯此文件
.................
DEVICE=lo:0                             # 切記修改網卡名稱
IPADDR=200.0.0.254               # 配置 VIP 
NETMASK=255.255.255.255                  # 子網掩碼需全爲1
ONBOOT=yes
[root@web1 network-scripts]# ifup lo:0                # 啓動虛接口
[root@web1 network-scripts]# ifconfig lo:0           # 確認以生效
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.254  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[root@web1 /]# route add -host 200.0.0.254 dev lo:0               # 添加 VIP 本地訪問路由
[root@web1 /]# route -n
200.0.0.254     0.0.0.0         255.255.255.255 UH    0      0        0 lo
[root@web1 /]# vim /etc/rc.local                         #設置爲開機自動添加此條路由
/sbin/route add -host 200.0.0.254 dev lo:0

調整 /proc 響應參數:

[root@web1 /]# vim /etc/sysctl.conf 
................
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@web1 /]# sysctl -p              # 刷新使配置生效
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

安裝 httpd 並建立測試網頁:

[root@web1 /]# yum -y install httpd              # 安裝httpd
[root@web1 /]# echo test1.com > /var/www/html/index.html         # 建立測試文件
[root@web1 /]# systemctl start httpd
[root@web1 /]# systemctl enable httpd

重複以上步驟,配置其餘節點服務器,同樣的虛接口,同樣的/proc,同樣的httpd(爲了方便驗證是否成功,這裏我將另外一個首頁文件改成了test2.com)
基於DR(直接路由)模式的負載均衡配置詳解
基於DR(直接路由)模式的負載均衡配置詳解
若訪問到的是同一頁面,在排除配置上錯誤的狀況下,能夠打開多個網頁,或者稍等一會再刷新,由於它可能有一個保持鏈接的時間,因此會存在延遲
4、配置NFS共享存儲:
測試出羣集效果後,就須要部署共享存儲,以便全部的web節點能夠向客戶機提供一樣的網頁文件,具體配置過程已經寫在了這篇博文的末:http://www.javashuo.com/article/p-vvyymutx-ha.html

相關文章
相關標籤/搜索