美文网首页
Keepalived脑裂问题研究

Keepalived脑裂问题研究

作者: 刘小白DOER | 来源:发表于2020-10-10 12:57 被阅读0次

    最近配置完Keepalived后,发现Keepalived是有可能存在脑裂问题的,于是查看学习一番。

     先了解一下什么是脑裂(split-brain)。指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。在笔者配置的数据库服务器上,详情请参考文章-Mariadb基于GTID的双主复制配置,因为自增ID配置配置不一样,使用在复制过程中不会有数据冲突,但是脑裂时就会有两份一样的数据。

    那脑裂是什么原因产生的呢?最终的原因就是心跳消息传输故障。两台keepalived服务器之间的心跳信息是VRRP协议,使用组播地址224.0.0.18来传输,可以通过wireshark来捕捉,如下图。VRRP协议目前配置的是每两秒传输一次,这个参数可以在配置文件advert_int 2来控制。

VRRP协议心跳

    总结下来有几个原因可能会导致心跳消息VRRP协议传输失败。

    1、心跳线断开或连接心跳线的中间故障(交换机等);

    2、设备故障,网卡及相关驱动存在问题;

    3、 iptables防火墙阻挡IP或阻挡VRRP协议传输;

    4、 virtual_router_id两端参数配置不一致;

    但是发现检查脚本如出一辙,都是部署在备用节点上,然后检查ping vip和本机ip addr是否都存在VIP,如果都存在就是发生了脑裂。但是如果备机正常接管了vip,那么这个脚本就是失效了。而且在非抢占式、backup的节点上部署脚本那就不可用了。

先看看脚本内容,网上好几个文章都是一样的。

#!/bin/bash

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

LB01_VIP=*

LB01_IP=*

LB02_IP=*

whiletrue

do 

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

    if[ $?-eq0 -a `ip add|grep"$LB01_VIP"|wc -l`-eq1 ];then

        echo "ha is brain."

   else        

       echo "ha is ok"    

    fi

    sleep 5

   done

    脚本中有两个命令ping 和ip add。 -a 代表and,条件与判断。那如果需要改写呢,主备节点我都要部署,都要监控,在主备节点切换时都能正常监控。那就需要用到我以前的文章-Linux怎么远程执行指令呢-SSH秘钥来完成。先上脚本。

 #!/bin/bash            

 # 检查keepalived脑裂的脚本           

LB_VIP=192.168.31.100          

 LB01_IP=192.168.31.76           

#local host IP           

LB02_IP=192.168.31.82           

while true           

do           

ipstatus=`ssh $LB01_IP "ip addr|grep 192.168.31.100|wc -l"`           

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

if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 -a $ipstatus -eq 1 ];then                    #echo "ha is brain."                 

sudo service keepalived stop                 

 if [ $? -ne 0 ] ;then                     

echo $(date +'%Y-%m-%d %H:%M:%S')". split-brain error.but ACTION keepalived-stop failed." >>/etc/keepalived/action.log                    

else                    

 echo $(date +'%Y-%m-%d %H:%M:%S')". split-brain error.ACTION keepalived-stop success." >>/etc/keepalived/action.log                     

 fi              

 else                    

#echo "ha is ok"                  

keepalivedcheck=`ps -C keepalived --no-header | wc -l`                   

 if [ $keepalivedcheck -eq 0 ] ;then                    

 sudo  service keepalived start                   

 if [ $? -ne 0 ] ;then                      

echo $(date +'%Y-%m-%d %H:%M:%S')". split-brain normal,keepalived already stopped.but ACTION keepalived-start failed" >>/etc/keepalived/action.log                     

else                     

echo $(date +'%Y-%m-%d %H:%M:%S')". split-brain normal,keepalived already stopped.ACTION keepalived-start success" >>/etc/keepalived/action.log                    

 fi              

 fi              

 sleep 5          

 done  

    细心的读者可能已经发现了,多了一个判断参数 ipstatus=`ssh $LB01_IP "ip addr|grep 192.168.31.100|wc -l"`  ,即远程到另一台机器执行ip addr指令,检查是否托管了VIP。这个指令的前提就是需要配置SSH秘钥,这样这个脚本就不需要输入密码,直接执行了。接下来就是条件判断,两台机都托管VIP,能能够ping通vip,那么就得到脑裂的结果。

    在职场情况下,需要判断keepalived进程是否存在,   keepalivedcheck=`ps -C keepalived --no-header | wc -l`  ,如果没有发生脑裂那么就要启动keepalived。当然在实际运用中,折磨来判断就有可能不断重启keepalived进程,需要根据具体情况修改脚本。

相关文章

  • Keepalived脑裂问题研究

    最近配置完Keepalived后,发现Keepalived是有可能存在脑裂问题的,于是查看学习一番。 先了解...

  • keepalived脑裂

    脑裂 在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独...

  • keepalived 脑裂监听脚本

    !/bin/bash while truedoMaster=10.0.0.10Backup=10.0.0.11Vi...

  • 脑裂问题

    大数据:hdfs两个namenode的脑裂问题解决方案:比如增加心跳线,栅栏机制。这两点甚至其他解决方案,有没有大...

  • Zookeeper的脑裂问题及解决方案

    先抛出一个问题:Zookeeper3.4.6版本是否存在脑裂问题? 一,什么是脑裂 什么是脑裂呢? 下图是一个正常...

  • MySQL架构--HA

    叶金荣HA介绍 keepalived:所在公司部署过,因为业务网络切割,发生过脑裂,补坑!且此方案支持架构有限,一...

  • Redis 系列(10) 脑裂问题 & 扩缩容问题

    1.sential模式下的脑裂问题 1.1 问题描述 1.2 解决方案 2.集群(cluster)模式下的脑裂问题...

  • es脑裂问题

    概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无...

  • Redis脑裂问题

    背景假设现在有三台机器,分别安装了redis服务,结构如图 故障发生:如果此时master服务器所在区域网络通信出...

  • keepalived是如何解决或者防止脑裂问题的?

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检...

网友评论

      本文标题:Keepalived脑裂问题研究

      本文链接:https://www.haomeiwen.com/subject/kqgpuktx.html