LVS-DR:
- 集群节点与Director必须在同一物理网络中
- RIP可以使用公网地址,方便远程管理和监控
- Director仅负责处理入站请求
- Real server 不能将网关指向Director的DIP
- 不支持端口映射
Kernel parameter:
- arp_ignore:定义接受到ARP请求时的响应级别
- 1:仅在请求的目标地址配置在请求到达的接口上的时候,才给予响应
- arp_announce:定义将自己的地址向外通告时的通告级别
- 0:将本地任何接口的任何地址向外通告
- 1:试图仅向目标网络通告与其网络匹配的地址
- 2:仅向与本地接口上地址匹配的网络进行通告
在WMvare虚拟机上模拟DR高可用集群,宿主机IP:192.168.1.105,三个虚拟机使用桥接的方式连接网络,IP地址要与宿主机在同一网段。网络配置如下:
Director:
- ens33:192.168.1.201 (DIP)
- ens33:0:192.168.1.200 (VIP)
-
RS1:
- ens33:192.168.1.202 (RIP)
- lo:0:192.168.1.200 (VIP)
RS2:
- ens33:192.168.1.203(RIP)
- lo:0:192.168.1.200 (VIP)
RS1和RS2修改内核参数arp_announce
与arp_ignore
$ cd /proc/sys/net/ipv4/conf
$ sudo sysctl -w net.ipv4.conf.ens33.arp_announce=2
$ sudo sysctl -w net.ipv4.conf.all.arp_announce=2
$ sudo sysctl -w net.ipv4.conf.ens33.arp_ignore=1
$ sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
RS1和RS2分别配置VIP为,让其对自己广播
$ sudo ifconfig lo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255 up
RS1和RS2分别添加路由
$ sudo route add -host 192.168.1.200 dev lo:0
Director配置VIP,并添加路由
$ sudo ifconfig ens33:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255 up
$ sudo route add -host 192.168.1.200 dev ens33:0
自动化健康监测脚本
功能介绍:
- 脚本启动后,会监测哪些RS服务是正常的,并把服务正常的RS全部添加到集群服务
- 若其中一台RS宕机,Director会监测到其服务状态,并删除这台RS,若一段时间后监测到这台RS恢复正常,则Director将其添加回来
- 若人为删除某一台RS,脚本会监测这台RS服务是否正常,若服务正常,则把RS自动添加到集群服务。
- 若所有的RS都坏掉,则脚本会把Director的本地服务启动,提示用户系统正在维护;当其他RS服务恢复正常之后,则立即添加RS到集群服务,再将本地服务移除。
1 #!/bin/bash
2 #
3 # Script to check the health status of LVS-DR
4 #
5
6 LO=127.0.0.1
7 VIP=192.168.1.200
8 RIPS=("192.168.1.202" "192.168.1.203")
9
10 RSWIGHT=("2" "5")
11
12 LOG=/home/jlong/bin/logs/HealthCheck.log
13
14 let NUM=0
15 let LOSTATUS=0
16
17
18 while :;do
19 let COUNT=0
20 for I in ${RIPS[*]};do
21 if ipvsadm -L -n | grep $I &> /dev/null;then
22 let NUM++
23 if curl --connect-timeout 1 http://$I &> /dev/null;then
24 continue
25 else
26 ipvsadm -d -t $VIP:80 -r $I &> /dev/null
27 echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
28 echo "Del $I successful."
29 let NUM--
30 fi
31 else
32 if curl --connect-timeout 1 http://$I &> /dev/null;then
33 ipvsadm -a -t $VIP:80 -r $I:80 -g -w ${RSWIGHT[$COUNT]}
34 echo "`date +'%F %H:%M:%S'`, $I is back" >> $LOG
35 echo "Add $I successful."
36 let NUM++
37 fi
38 fi
39 let COUNT++
40 done
41
42 if [ $NUM -eq 0 ];then
43 if [ $LOSTATUS -eq 0 ];then
44 ipvsadm -a -t $VIP:80 -r $LO:80 -g -w 4 &> /dev/null
45 echo "`date +'%F %H:%M:%S'`, $LO is back." >> $LOG
46 echo "Add $LO successful."
47 let LOSTATUS=1
48 fi
49 else
50 if [ $LOSTATUS -eq 1 ];then
51 ipvsadm -d -t $VIP:80 -r $LO:80 &> /dev/null
52 echo "`date +'%F %H:%M:%S'`, $LO is gone." >> $LOG
53 echo "Del $LO successful."
54 let LOSTATUS=0
55 fi
56 fi
57 let NUM=0
58 sleep 3
59 done