部署LVS-DR叢集
1 問題
使用LVS實現DR模式的叢集排程伺服器,為使用者提供Web服務:
路由器對外公網IP地址為202.114.106.20
路由器內網IP地址為192.168.0.254
路由是需要設定SNAT及DNAT功能
LVS排程器真實IP地址為192.168.0.10
LVS排程器VIP地址設定為192.168.0.253
真實Web伺服器地址分別為192.168.0.1、192.168.0.2
使用加權輪詢排程演算法,真實伺服器權重與其IP地址末尾數一致
2 方案
使用4臺虛擬機器,1臺作為客戶端、1臺作為Director排程器、2臺作為Real Server、,拓撲結構如圖-2所示。實驗拓撲結構主機配置細節如表-4所示。
3 步驟
實現此案例需要按照如下步驟進行。 說明:VIP是對客戶端提供服務的IP地址,RIP是後端伺服器的真實IP地址,DIP是排程器與後端伺服器通訊的IP地址(DIP必須配置在虛擬介面)。
步驟一:配置實驗網路環境
1)設定Proxy代理伺服器的VIP和DIP 注意:為了防止衝突,VIP必須要配置在網絡卡的虛擬介面!!! 排程器使用DIP與RIP通訊,否則會出現192.168.4.5與192.168.4.5通訊。
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] ~]# cp ifcfg-eth0{,:0}
[[email protected] ~]# vim ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.4.15
PREFIX=24
[[email protected] ~]# vim ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.5
PREFIX=24
[ [email protected] ~]# systemctl restart network
2)設定Web1伺服器網路引數
[[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.10/24 connection.autoconnect yes
[[email protected] ~]# nmcli connection up eth0
接下來給web1配置VIP地址 注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] ~]# cp ifcfg-lo{,:0}
[[email protected] ~]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.5
NETMASK=255.255.255.255
NETWORK=192.168.4.5
BROADCAST=192.168.4.5
ONBOOT=yes
NAME=lo:0
注意:這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突。 寫入這四行的主要目的就是訪問192.168.4.5的資料包,只有排程器會響應,其他主機都不做任何響應。
[[email protected] ~]# vim /etc/sysctl.conf
///手動寫入如下4行內容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
///當有arp廣播問誰是192.168.4.5時,本機忽略該ARP廣播,不做任何迴應
///本機不要向外宣告自己的lo迴環地址是192.168.4.5
重啟網路服務,設定防火牆與SELinux
[[email protected] ~]# systemctl restart network
[[email protected] ~]# ifdown eth1
[[email protected] ~]# ifconfig
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0
3)設定Web2伺服器網路引數
[[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.20/24 connection.autoconnect yes
[[email protected] ~]# nmcli connection up eth0
接下來給web2配置VIP地址 注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] ~]# cp ifcfg-lo{,:0}
[[email protected] ~]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.5
NETMASK=255.255.255.255
NETWORK=192.168.4.5
BROADCAST=192.168.4.5
ONBOOT=yes
NAME=lo:0
注意:這裡因為web2也配置與代理一樣的VIP地址,預設肯定會出現地址衝突。 寫入這四行的主要目的就是訪問192.168.4.5的資料包,只有排程器會響應,其他主機都不做任何響應。
[[email protected] ~]# vim /etc/sysctl.conf
///手動寫入如下4行內容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
///當有arp廣播問誰是192.168.4.5時,本機忽略該ARP廣播,不做任何迴應
///本機不要向外宣告自己的lo迴環地址是192.168.4.5
重啟網路服務,設定防火牆與SELinux
[[email protected] ~]# systemctl restart network
[[email protected] ~]# ifdown eth1
[[email protected] ~]# ifconfig
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0
步驟二:配置實驗網路環境
1)自定義Web頁面
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# echo "192.168.4.10" > /var/www/html/index.html
[r[email protected] ~]# yum -y install httpd
[[email protected] ~]# echo "192.168.4.20" > /var/www/html/index.html
2)啟動Web伺服器軟體
[[email protected] ~]# systemctl start httpd; systemctl enable httpd
[[email protected] ~]# systemctl start httpd; systemctl enable httpd
步驟三:proxy排程器安裝軟體並部署LVS-DR模式排程器
1)安裝軟體(如果已經安裝,此步驟可以忽略)
[[email protected] Packages]# yum -y install ipvsadm
2)清理之前實驗的規則,建立新的叢集伺服器規則
[[email protected] ~]# ipvsadm -C ///清空所有規則
[[email protected] ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
3)新增真實伺服器(-g引數設定LVS工作模式為DR模式)
[[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.4.10 -g -w 1
[[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.4.20 -g -w 1
4)檢視規則列表,並儲存規則
[[email protected] ~]# ipvsadm –Ln
[[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
步驟四:客戶端測試
客戶端使用curl命令反覆連線http://192.168.4.5,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器。 擴充套件知識:預設LVS不帶健康檢查功能,需要自己手動編寫動態檢測指令碼,實現該功能:(參考指令碼如下,僅供參考)
[[email protected] ~]# vim check.sh
```
#!/bin/bash
VIP=192.168.4.5:80
RIP1=192.168.4.10
RIP2=192.168.4.20
while :
do
for IP in $RIP1 $RIP2
do
curl -s http://$IP &>/dev/vnull
web_stat=$?
ipvsadm -Ln | grep -q $IP
web_in_lvs=$?
if [ $web_stat -ne 0 -a $web_in_lvs -eq 0 ];then
ipvsadm -d -t $VIP -r $IP
elif [ $web_stat -eq 0 -a $web_in_lvs -ne 0 ];then
ipvsadm -a -t $VIP -r $IP
fi
done
sleep 1
done
```