前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决keepalived脑裂问题

解决keepalived脑裂问题

原创
作者头像
陈不成i
修改2021-07-07 10:24:56
2K0
修改2021-07-07 10:24:56
举报
文章被收录于专栏:ops技术分享

一.介绍

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,例如都去用同一个ip提供网页服务,结果会导致系统混乱,数据损坏。

对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。

二.产生的原因

  • 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
  • 因心跳线坏了(包括断了,老化)。
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
  • 因心跳线间连接的设备故障(网卡及交换机)。
  • 因仲裁的机器出问题(采用仲裁的方案)。
  • 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
  • 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  • 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

提示: Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。

三.解决方案

检测网关

由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,那就ping网关,如果失败则证明网络有问题,将当前节点关闭,如果成功再开启。

问题是,当内部mysql所在机器出现网络问题,但是他是给内网提供服务的,这会导致2台mysql都关闭虚拟ip。

所以可以改改,将两台机器互相ping,防止网络问题。

vim check_keepalived.sh

代码语言:javascript
复制
#!/bin/bash
#检测keepalived脑裂脚本
#ping网关失败2次则关闭keepalived服务,成功2次则启动
#[使用设置]
#网关地址或者对方keepalived节点地址,互ping
getway_ip=192.168.1.1
#[自带变量]
check_ok=0
check_no=0
while [ 1 ]
do
    ping -c 1 $getway_ip
    if [[ $? -eq 0 ]];then
        let check_ok++
    else
        let check_ok++
    fi
    
    if [[ $check_ok -eq 2 ]];then
        systemctl start keepalived
        check_ok=0
    elif [[ $check_no -eq 2 ]];then
        systemctl stop keepalived
        check_no=0
    fi
    sleep 1
done

更改为单播

将方式改为单播,这样检测更加完善

代码语言:javascript
复制
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
#增加部分
unicast_src_ip 192.168.2.41 #本机ip
unicast_peer {
        192.168.2.150 #其他机器ip,可多个
}
    virtual_ipaddress {
        192.168.2.99
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.介绍
  • 二.产生的原因
  • 三.解决方案
    • 检测网关
      • 更改为单播
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档