脚本监控高可用集群中真实服务器的状态

LVS健康检测

由于在生产环境中,RS可能出现一些故障,那么LVS应该能够具备检测RS的健康情况,发现RS有问题,应立即从当前集群中删除之,当然keepalive可以解决此情况,这里使用脚本实现

脚本核心思想:循环判断当前RS状态是否正常,正常,静默等待下次循环;不正常,或删除或添加

注意,此实验环境为LVS-DR模式

可参考如下blog
LVS的DR模式搭建

脚本内容:

 #!/bin/bash
        #
        VIP=10.10.10.100	#集群虚拟IP
        CPORT=80	#定义集群端口
        FAIL_BACK=127.0.0.1	#本机回环地址
        RS=("10.10.10.12" "10.10.10.13")	#编写集群地址
        declare -a RSSTATUS  #变量RSSTATUS定义为数组态
        RW=("2" "1")
        RPORT=80	#定义集群端口
        TYPE=g	#制定LVS工作模式:g=DR m=NAT
        CHKLOOP=3
        LOG=/var/log/ipvsmonitor.log
        addrs() {
    
    
          ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
          [ $? -eq 0 ] && return 0 || return 1
        }
        delrs() {
    
    
          ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
          [ $? -eq 0 ] && return 0 || return 1
        }
        checkrs() {
    
    
          local I=1
          while [ $I -le $CHKLOOP ]; do
            if curl --connect-timeout 1 http://$1 &> /dev/null; then
              return 0
            fi
            let I++
          done
          return 1
        }
        initstatus() {
    
    
          local I
          local COUNT=0;
          for I in ${
    
    RS[*]}; do
            if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
              RSSTATUS[$COUNT]=1
            else
              RSSTATUS[$COUNT]=0
            fi
          let COUNT++
          done
        }
        initstatus
        while :; do
          let COUNT=0
          for I in ${
    
    RS[*]}; do
            if checkrs $I; then
              if [ ${
    
    RSSTATUS[$COUNT]} -eq 0 ]; then
                 addrs $I ${
    
    RW[$COUNT]}
                 [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
              fi
            else
              if [ ${
    
    RSSTATUS[$COUNT]} -eq 1 ]; then
                 delrs $I
                 [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
              fi
            fi
            let COUNT++
          done
          sleep 5
        done

测试:
首先,LVS执行脚本,监控服务器的状态
在这里插入图片描述

当RS正常时,集群采用的是轮询的负载调度,可见与预期相符
在这里插入图片描述
此时,若某一台服务器的http服务出现故障,LVS上应该删除这个节点,且页面不论如何刷新,都跳转至10.10.10.13这个真实服务器上

在这里插入图片描述
可见,与预期相符
在这里插入图片描述

在这里插入图片描述

当这个服务器恢复后,节点正常添加进去

在这里插入图片描述
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_41959899/article/details/113862043