首页 > 其他分享 >五月学习之keepalived 脑裂起因与解决

五月学习之keepalived 脑裂起因与解决

时间:2023-05-19 23:02:33浏览次数:42  
标签:起因 keepalived ping 脑裂 心跳 HA 节点

一、keepalived脑裂

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。 对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。

在高可用HA系统中,当联系2个节点的“心跳线”断开时,本来为一整体,一个VRRP协议组,动作协调的HA系统,就分裂为两个独立的个体。由于相互失去了联系,都以为对方出了故障;两个节点的HA软件像“连体人”一样,有共同的身体却拥有两个脑袋,争抢“共享资源”身体,争抢服务器里的应用服务,就会发送严重后果,或者共享资源被瓜分,两边服务都起不来或者都起来都为Master,假如两端服务器发生了脑裂现象就会成为各自的Master,会同时读写“共享存储”,导致数据损坏(常见的如数据库轮询着的联机日志出错) 对付HA系统“裂脑”的对策,目前达成共识的的大概有以下几条:    

1)添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率;    

2)启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。    

3)设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

1、脑裂产生原因

一般来说,裂脑的发生,有以下几种原因:
1) 高可用服务器对之间心跳线链路发生故障,导致无法正常通信
2)因心跳线坏了(包括断了,老化)
3)因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
4)因心跳线间连接的设备故障(网卡及交换机)
5)因仲裁的机器出问题(采用仲裁的方案)
6)高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输
7)高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
8)其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等 提示:Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生

2、预防keepalived脑裂问题

在实际生产环境中,我们可以从以下几个方面来防止裂脑问题的发生:  
(0) 同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。 
(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。

推荐自己写脚本,写一个while循环,每轮ping网关,累计连续失败的次数,当连续失败达到一定次数则运行service keepalived stop关闭keepalived服务。
如果发现又能够ping通网关,再重启keepalived服务。最后在脚本开头再加上脚本是否已经运行的判断逻辑,将该脚本加到crontab里面。

标签:起因,keepalived,ping,脑裂,心跳,HA,节点
From: https://blog.51cto.com/u_13236892/6315677

相关文章

  • 五月学习之keepalived 综合实践
    1、需求案例业务场景在实际的工作中,我们的网站服务一般都是以域名的方式对外提供服务,对于这种情况下一般有这么两种现象:一个域名对应一个ip地址,万一域名解析的ip地址故障,就出现单点故障现象一个域名可以解析不同的后端服务,我们可以基于同域名解析多个不同服务的ip地址,更精确的响应......
  • Keepalived部署脚本:提升系统稳定性与可靠性
    在现代的计算环境中,高可用性是一个至关重要的概念。无论是在企业的服务器集群、云计算平台还是网络应用中,确保系统的持续可用性对于业务的成功运行至关重要。本文将介绍高可用性的概念,并重点关注一种流行的高可用解决方案——Keepalived的原理、特点以及应用场景。高可用性概述高可......
  • CentOS7搭建keepalived+DRBD+NFS高可用共享存储
    一、服务器信息IP地址 类型 主机名 操作系统 内存 磁盘192.168.11.110 主服务器 node01 CentOS7.9 2G 系统盘20G存储盘20G192.168.11.111 备服务器 node02 CentOS7.9 2G 系统盘20G存储盘20G二、两台主机......
  • lvs+keepAlived高可用部署实战 暂时没用
    LVS+KeepAlived高可用部署实战 1.构建高可用集群1.1什么是高可用集群高可用集群(HighAvailabilityCluster,简称HACluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外部不间断的提供服务,把因为软件,硬件,认为造成的故障对业务的影响降低到......
  • keepalived自带版本比较高,出现启动后主备都绑定了vip的情况
    解决办法单播模式些特定环境下不允许发送组播,造成备服务器无法收到p包,就比如某些云服务器吧,默认会禁止组播。可以通过单播的方式解决.单播示例配置:注意此语法在keepalived1.2.11版本以上支持unicastsrcip192.168.1.21###(本地IP地址)unicastpeer{192.168.1.22##(......
  • keepalived 发生异常进行主备切换的notify.sh脚本
    notify.sh#!/bin/sh#########DESC###########keepalive切换告警提示##########################配置文件和手机号码配置config_file="/etc/keepalived/hostinfo.cfg"alert_user_file="/etc/keepalived/alert_user.cfg"keepalive_config_file="/etc/keepaliv......
  • 搭建keepalived+LVS+nginx高可用集群负载均衡
    在LVS服务器上安装Keepalived,参考(https://www.cnblogs.com/xiaodunan/p/17374699.html)修改核心配置文件cd/etc/keepalived/vimkeepalived.confglobal_defs{router_idLVS_1}vrrp_instanceVI_1{stateMASTERinterfaceeth0virtual_router_id41......
  • keepalived-学习目录
    1、Keepalived基本概述https://www.cnblogs.com/ygbh/p/17373758.html2、Keepalived安装https://www.cnblogs.com/ygbh/p/17373985.html3、keepalived高可用配置【抢占式】https://www.cnblogs.com/ygbh/p/17374339.html4、keepalived高可用配置【非抢占式】https:/......
  • keepalived
    Keepalived安装环境:两台nginx服务器下载Keepalived安装包curlhttps://www.keepalived.org/software/keepalived-2.2.7.tar.gz-okeepalived-2.2.7.tar.gz-k解压到跟nginx安装包同一个目录下tar-zxvfkeepalived-2.2.7.tar.gz3.配置Keepalived,进入keepalived-......
  • keepalived如何手动切换主备
     概述主备部署中使用keepalived可以很方便的实现,安装维护简单,功能稳定。最近在使用过程中有小的发现,记录一下。环境CentOSLinuxrelease7.9.2009(Core)keepalived.x86_641.3.5-19.el7安装配置centos7自带的keepalived版本为1.3.5,直接使用yum安装sudoyuminstallk......