脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,例如都去用同一个ip提供网页服务,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。
提示: Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,那就ping网关,如果失败则证明网络有问题,将当前节点关闭,如果成功再开启。
问题是,当内部mysql所在机器出现网络问题,但是他是给内网提供服务的,这会导致2台mysql都关闭虚拟ip。
所以可以改改,将两台机器互相ping,防止网络问题。
vim check_keepalived.sh
#!/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
将方式改为单播,这样检测更加完善
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 删除。