简介
在生产工作中,后台的服务器并不可能永远都处于正常运行状态,若服务器发生宕机,为了不影响正在进行的业务以及给用户更好的体验,我们需要通过编写监控脚本对LVS的后台主机存活情况进行监控,当有服务器发生故障时,脚本会从LVS转发策略删除该服务器的转发规则;等到服务器恢复正常后,脚本也将把该服务器的转发规则重新加入LVS转发策略中;若所有的后台服务器都宕机了,则脚本会自动把虚拟ip的端口转发到本机端口,起到缓冲作用
编写监控脚本
#!/bin/bash #虚拟IP VIP=192.168.29.122 #本机IP LIP=192.168.29.143 #绑定转发端口号 VPORT=80 #真实服务器端口号 RPORT=80 #LVS工作模式 TYPE=g #设置日志 LOG=/tmp/ipvs.log declare -i AS=0 declare -i flag=0 declare -a RS=("192.168.29.142" "192.168.29.144") declare -a RW=(1 1) declare -a RSSTATUS=(0 0) #初始检查LVS配置情况 function initstatus(){ index=0 for((;index<2;index++)) do ip=${RS[$index]} num=$(ipvsadm -Ln|grep $ip |wc -l) if [ $num -eq 1 ];then RSSTATUS[$index]=1 let AS++ else RSSTATUS[$index]=0 fi done } #添加真实服务器 function addrs(){ `ipvsadm -a -t $VIP:$VPORT -r $1:$RPORT -$TYPE -w $2` echo "$(date) add $1 to ipvsadm" >> $LOG } #删除真实服务器 function delrs(){ `ipvsadm -d -t $VIP:$VPORT -r $1` echo "$(date) remove $1 from ipvsadm" >> $LOG } #检查真实服务器存活状态 function checkrs(){ index=0 for((;index<2;index++)) do ip=${RS[$index]} weight=${RW[$index]} status_num=${RSSTATUS[$index]} num=$(curl --connect-timeout 2 -ls http://$ip |wc -l ) if [[ $num -eq 1 && $status_num -eq 0 ]];then addrs $ip $weight RSSTATUS[$index]=1 let AS++ #当任意一台真实服务器恢复状态后,把转发到本机的规则删除 if [[ $AS -eq 2 && $flag -eq 1 ]];then delrs $LIP let AS-- flag=0 fi elif [[ $num -eq 1 && $status_num -eq 1 ]];then continue elif [[ $num -eq 0 && $status_num -eq 1 ]];then delrs $ip RSSTATUS[$index]=0 let AS-- #若所有真实服务器均发生宕机,LVS把虚拟IP转发到本机处理 elif [[ $AS -eq 0 ]];then addrs $LIP 1 let AS++ flag=1 fi done } initstatus #设定每隔五秒钟运行一次 while : do checkrs sleep 5 echo "keep monitoring..." done
测试验证
关闭node2服务
[root@node2 ~]# systemctl stop httpd.service #查看日志信息 remove 192.168.29.142 from ipvsadm #查看ipvsadm信息 [root@node1 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr -> node3:http Route 1 0 0
把node3服务也进行关闭
[root@node3 ~]# systemctl stop httpd.service #查看日志信息 remove 192.168.29.144 from ipvsadm add 192.168.29.143 to ipvsadm #查看ipvsadm信息 [root@node1 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr
重启服务
[root@node2 ~]# systemctl start httpd.service [root@node3 ~]# systemctl start httpd.service #查看ipvsadm信息 [root@node1 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr -> node2:http Route 1 0 0 -> node3:http Route 1 0 0 #查看日志信息 add 192.168.29.142 to ipvsadm remove 192.168.29.143 from ipvsadm add 192.168.29.144 to ipvsadm
- 客服微信
- 微信扫一扫
-
- 微信公众号
- OPS技术联盟,每天掌握一个小知识!
-
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏