0
点赞
收藏
分享

微信扫一扫

脑裂现象产生的原因和解决方法

    在HA集群(High Availability,高可用集群)系统中,如果出现了脑裂现象,小则影响到脑裂现象对应的集群,大则影响到集群系统的整体功能。在分析脑裂产生的原因和解决方法前,我们先来看下什么是脑裂。

  1. 名词释义

    HA集群系统由一个或多个集群构成,正常情况下每一个集群都是一个单独的整体,并且各节点保持着协调的工作关系,各节点之间凭借heartbeat来判定其他节点的存活状态。

    以上一篇keepalived实现Nginx高可用为例,在同一个路由服务器中可能会有两个节点来协调后端服务器的工作,正常情况一个为优先级高的MASTER节点,另一个为优先级相对较低的BACKUP节点,VIP地址是飘在MASTER节点上的,在对外服务时,资源会优先被调度到MASTER节点上,由MASTER节点来向后端服务器进行转发,只有当MASTER节点出现故障不可用时,BACKUP节点因检测不到MASTER节点的心跳才会接管MASTER节点的资源,并成为新的MASTER节点对外提供服务,保证服务的高可用。

    当MASTER节点出现网络堵塞等现象时,BACKUP节点因无法及时检测到MASTER节点的heartbeat而认为MASTER节点已经挂掉了,就抢来了MASTER节点的VIP,并接管了MASTER节点的资源。而MASTER节点认为自己还是正常的,这就出现了同一个服务集群中,同一个VIP地址同时飘在两个节点上的现象,即产生了两个MASTER节点,正常情况下是一个节点对外提供服务,现在也变成了两个节点能同时被用户访问到,对于一个集群同时存在两个MASTER状态的现象,我们称之为脑裂。

    当脑裂现象产生时,会导致服务集群的选举机制出现问题,对于MySQL这类对写操作要求较高的服务来说,可能会带来极其糟糕的影响。


  1. 脑裂现象产生的原因

    通常,脑裂现象的出现是由以下几种情况引起的:

    ①高可用集群服务器队列之间的心跳线链路发生了故障,如心跳线的断裂、老化等导致各节点之间无法正常通信;

    ②集群服务器队列之间的IP配置发生了冲突;

    ③网卡或交换机等负责连接心跳线的设备发生了故障;

    ④高可用服务器上未禁止iptables防火墙规则的生成,导致心跳消息无法传输;

    ⑤在同一个VRRP实例中,各节点上的virtual_router_id设置的参数不同;

    ⑥开启了抢占模式,但是未设置抢占延时。


  1. 应对脑裂现象的措施

    为了减少或避免HA集群中出现脑裂现象,我们可以采取以下措施:

    ①添加冗余心跳线,如双线条线等;

    ②启动“智能”磁盘锁,只有正在提供服务的MASTER节点才能锁住或者解锁共享磁盘,当MASTER节点出现了短暂的网络堵塞等情况时会自动加锁,BACKUP节点也无法接管资源,只有当MASTER出现故障无法提供服务时才会自动解锁共享磁盘,并交由BACKUP节点接管

    ③设置仲裁机制,例如出现检测不到心跳线的情况时,MASTER节点和BACKUP节点都去ping一下网关IP,如果ping不通则主动释放资源或者放弃抢占资源;

    ④通过脚本来监控和监测节点是否处于正常工作状态,如果MASTER节点出现了异常,并在脚本设定的期限内无法恢复正常,则杀死当前MASTER的服务进程,将资源交由BACKUP节点来接管。

举报

相关推荐

0 条评论