LVS-DR高可用集群【自动化健康检测脚本】

来源:互联网 发布:java 按键监听 编辑:程序博客网 时间:2024/05/17 22:21

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_announcearp_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
阅读全文
0 0