1. 程式人生 > >部署LVS-DR叢集

部署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所示。

圖-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
```