1. 程式人生 > >Linux環境下實現LVS-NAT模型和LVS-DR模型

Linux環境下實現LVS-NAT模型和LVS-DR模型

一、實現LVS-NAT模型

image.png

1、LVS主機yum -y install ipvsadm

防火牆關閉,RS1、RS2安裝httpd,新增index.html,路由器新增到達172.20.0.123的路由表

2、各主機配置

RS1

image.png

並存在

image.png

RS2

image.png

並同時有

image.png

router,開啟路由轉發功能,vim /etc/sysctl.conf

image.png

vmnet6端

image.png

伺服器端

image.png

因為需要保證訪問後VIP和CIP要原路返回,因此路由需要新增路由到客戶端的ip

image.png

LVS,注意LVS-NAT模式也需要開啟路由轉發,vim /etc/sysctl.conf中新增net.ipv4.ip_forward = 1

image.png

LVS也需要目標10.0.0.0網段路由表

image.png

3、網路配置完成,開始設定LVS

ipvsadm -A -t 172.20.0.123:80 -s rr

ipvsadm -Ln,查詢LVS列表,選項必須-Ln,不能-nL

ipvsadm -a -t 172.20.0.123:80 -r 192.168.32.7 -m

ipvsadm -a -t 172.20.0.123:80 -r 192.168.32.17 -m

image.png

測試結果,rr輪詢

image.png

二、實現LVS-DR模型

image.png

1、網絡卡配置

客戶機新增路由表

image.png

route網絡卡配置:

image.png

另一端

image.png

開啟路由轉發

LVS網絡卡配置:vip綁到迴環網絡卡上

image.png

另一網絡卡配置

image.png

完成後加閘道器route add -net 10.0.0.0/8 gw 192.168.32.200,LVS不加閘道器將排程失敗,閘道器是個擺設,本實驗中在192.168.32.0網段可以隨便加為閘道器

image.png

RS1配置

image.png

R2配置

image.png

在RS上執行指令碼,配置vip,修改核心引數,常儲存依然更改/etc/sysctl.conf

image.png

2、關閉R1和R2的arp響應

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

image.png

3、在LVS上執行命令

iptables -F,清空一下防火牆策略以免造成干擾

ipvsadm -A -t 10.0.0.100:80 -s wrr

ipvsadm -a -t 10.0.0.100:80 -r 192.168.32.7 -g -w 1

ipvsadm -a -t 10.0.0.100:80 -r 192.168.32.17 -g -w 1

image.png

4、測試結果

image.png

附1:RS的配置指令碼

#!/bin/bash

vip=10.0.0.100

mask='255.255.255.255‘

dev=lo:1

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $dev $vip netmask $mask #broadcast $vip up

#route add -host $vip dev $dev

;;

stop)

ifconfig $dev down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

;;

*)

echo "Usage: $(basename $0) start|stop"

exit 1

;;

esac

附2:VS的配置指令碼

#!/bin/bash

vip='10.0.0.100'

iface=‘lo:1'

mask='255.255.255.255'

port='80'

rs1='192.168.0.101'

rs2='192.168.0.102'

scheduler='wrr'

type='-g'

case $1 in

start)

ifconfig $iface $vip netmask $mask #broadcast $vip up

iptables -F

ipvsadm -A -t ${vip}:${port} -s $scheduler

ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1

ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1

;;

stop)

ipvsadm -C

ifconfig $iface down

;;

*)

echo "Usage $(basename $0) start|stop“

exit 1

esac

5、給80、443埠新增標籤

給RS1、RS2安裝mod_ssl,有簡單的自簽名證書,形成https協議,重啟httpd服務後生成443埠

image.png

此時80、443埠對應的lvs策略已經生成

貼防火牆標籤,使得訪問10.0.0.100埠80和443的,都將貼上標籤10埠

iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10

新增後iptables規則便生成

image.png

ipvsadm -Ln

image.png

ipvsadm -A -f 10 -s rr

ipvsadm -a -f 10 -r 192.168.32.7 -g

ipvsadm -a -f 10 -r 192.168.32.17 -g

此時80和443已經合成了一個標籤,可以進行統一排程

測試

image.png

6、持久連線,會話繫結,加-p即可實現

ipvsadm -E -f 10 -s rr -p,-p不指定時間預設360秒

測試,連線綁定了RS1伺服器

image.png

7、LVS高可用性

在LVS伺服器輸入命令,curl http://192.168.32.17 &> /dev/null || ipvsadm -d -f 10 -r 192.168.32.17,當檢測到該RS伺服器down掉時會自動刪除指向該主機的lvs策略,使LVS不用再指向down掉的伺服器

不過我們也可以用ldirectord工具實現

當所有RS伺服器down時,我們看到介面

image.png

此時應該做一個sorry sever,我們可以用LVS伺服器當sorry server,給lvs安裝httpd,開啟httpd服務,echo 'Sorry Server' > /var/www/html/index.thml

之後LVS伺服器安裝包ldirectord

cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/

vim /etc/ha.d/ldirectord-3.9.6/ldirectord.cf

image.png

設定好後systemctl start ldirectord.service

當R1或者R2宕機時,會自動curl到正常的伺服器,當RS全部宕機時,會顯示

image.png

隨便上線一個便恢復正常

image.png