暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

keepalived的脑裂问题与解决

IT运维大爆炸 2022-12-14
3541

1、简介

keepalived起初是为LVS设计的专门用来监控集群系统中各个服务节点的状态如果某个服务节点出现异常或者工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将该服务节点重新加入集群中,这些工作全部自动完成。这部分功能类似于nginx 等反向代理的应用探活功能实现后端服务高可用。后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol),虚拟路由协议出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也有HA cluster功能;这个功能实现各种中间件高可用。

2、keeplived和LVS关系

LVS 是 Linux Virtual Server 的缩写,也就是 Linux 虚拟服务器,在 linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块。它是工作在四层的负载均衡,类似于 Haproxy, 主要用于实现对服务器集群的负载均衡。

他俩都需要虚拟IP,思考一下,这俩东西到底是啊啥关系?根据上述描述,一开始keepalive是LVS用来探活上游应用使用。后来引入了VRRP 可以实现静态路由(LVS)的高可用。由此我们可以得出如下结论:LVS通过ipvsadm配置虚拟服务器,来实现反向代理和负载均衡功能。Keepalived 用来帮LVS实现服务探活功能。同时实现LVS实例的冗余备份功能。二者使用相同的虚拟IP,且keepalived已经内置了 ipvsadm 的管理功能可以根据keepalived 配置文件自动完成lvs配置。

所以Keepalived 一方面具有配置管理 LVS 的功能,同时还具有对 LVS 下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keeplived 实现高可用示意图

3、keepalived的工作原理

keepalived采用是模块化设计,不同模块实现不同的功能。

keepalived主要有三个模块,分别是core、check和vrrp。

core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等。

check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查。

vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的。

Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主宕机的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快。

4、你是如何理解VRRP协议的

为什么使用VRRP?主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。

VRRP的三种状态:VRRP路由器在运行过程中有三种状态:

  • Initialize状态:系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理。

  • Master状态;Master 状态的 VRRP 设备接管虚拟路由设备的所有转发任务,并定期向虚拟路由器发送 VRRP 通告报文。

  • Backup状态;处于Backup状态的VRRP设备不接管虚拟路由设备的转发任务,周期性地接收来自Master设备的VRRP 通告报文,判断Master设备是否正常工作。

5、VRRP的基本架构

虚拟路由器由多个VRRP路由器组成,每个VRRP路由器都有各自的IP和共同的VRID(0-255),其中一个VRRP路由器通过竞选成为MASTER,占有VIP,对外提供路由服务,其他成为BACKUP,MASTER以IP组播(组播地址:224.0.0.18)形式发送VRRP协议包,与BACKUP保持心跳连接,若MASTER不可用(或BACKUP接收不到VRRP协议包),则BACKUP通过竞选产生新的MASTER并继续对外提供路由服务,从而实现高可用。

6、VRRP 选举机制

由多台路由器组成的虚拟路由器称为 VRRP 组。VRRP 组就像一个路由器。VRRP组创建后,设备根据配置的优先级选举主设备,如下图所示。

7、什么是脑裂

在高可用集群中,节点间无法互相检测到对方心跳而各自启动故障转移功能,分裂成独立的节点,节点之间彼此都认为对方出现了故障,从而争抢”共享资源”、争起”应用服务”。进而导致严重后果:

  • 共享资源被瓜分、两边”服务”都起不来了。

  • 两边”服务”都起来了,但同时读写”共享存储”,导致数据损坏。

服务器“脑裂”容易引起服务器集群逻辑关系混乱,导致主、备服务器误认为对方宕机而同时接管对方的业务,同时占用共享的文件系统,造成数据库争抢资源,引起数据库表文件的损坏,从而导致数据库服务的中断,对外业务暂停。

8、如何脑裂问题?

在实际生产环境中,我们可以从以下几个方面来防止裂脑问题的发生。

同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。

当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、feyce)。相当于备节点接收不到心跳消患,通过单独的线路发送关机命令关闭主节点的电源。

做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短倍就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短.

当然,在实施高可用方案时,要根据业务实际需求确定是否能容忍这样的损失。对于一般的网站常规业务.这个损失是可容忍的。

9、解决keepalived脑裂问题

监控只是监控发生脑裂的可能性,不能保证一定是发生了脑裂,因为正常的主备切换VIP也是会到备上的监控脚本:

[root@slave~]# mkdir -p scripts&&cd/scripts
[root@slavescripts]#vim check_keepalived.sh
#!/bin/bash
if[`ip a show ens33|grep 192.168.32.250|wc -l` -ne0]
then
   echo"keepalived is error!"
else
   echo"keepalived is OK!"
fi

欢迎大家扫码关注:

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。



文章转载自IT运维大爆炸,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论