如何预防keepalived脑裂问题

(1)可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,就会发生脑裂,此时keepalived体系中会出现双主的情况,产生资源竞争。

(2)一般可以引入仲裁来解决这个问题,即每个节点必须判断自身的状态。最简单的一种操作方法是,在主备的keepalived的配置文件中增加check配置,服务器周期性地ping一下网关,如果ping不通则认为自身有问题 。

(3)最容易的是借助keepalived提供的vrrp_script及track_script实现。如下所示:

#vim /etc/keepalived/keepalived.conf


  ......


  vrrp_script check_local {


   script "/root/check_gateway.sh"


   interval 5


   }


  ...... 


  track_script {    


  check_local                  


  }


   脚本内容:


   # cat /root/check_gateway.sh


  #!/bin/sh


  VIP=$1


  GATEWAY=192.168.1.1


  /sbin/arping -I em1 -c 5 -s $VIP $GATEWAY &>/dev/null  

   check_gateway.sh 就是我们的仲裁逻辑,发现ping不通网关,则关闭keepalived。

(4)检测思路:正常情况下keepalived的VIP地址是在主节点上的,如果在从节点发现了VIP,就设置报警信息。脚本(在从节点上)如下:


vim split-brainc_check.sh


#!/bin/bash


# 检查脑裂的脚本,在备节点上进行部署


LB01_VIP=192.168.1.229


LB01_IP=192.168.1.129


LB02_IP=192.168.1.130


while true


do


 ping -c 2 -W 3 $LB01_VIP &>/dev/null


   if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then


       echo "ha is brain."


   else


       echo "ha is ok"


   fi


   sleep 5


done

请使用浏览器的分享功能分享到微信等