脑裂的概念最早在主机的集群中广泛使用,在容灾双活系统中概念依然延续使用可以类比。假设有同一个整体、动作协调的节点A(站点A) 和节点B(站点B),A和B之间通过心跳来检查对方的存活状态,负责协调保证整个系统服务的可用性。
正常情况下,如果节点A通过心跳检测不到B存在的时候,就会接管B的资源,同理节点B检查不到A的存活状态时候也会接管A的资源。如果出现网络故障,两个节点的“心跳线”断开,本来为一个整体、数据同步、动作协调的系统,就分裂成为两个独立的节点A和节点B系统,相互之间失去了联系,都以为是对方出了故障,两个节点上的应用软件像“裂脑人”一样,“本能”地争抢“共享资源”、争起“应用服务”,造成:
1)共享资源被瓜分、两边“服务”都起不来了;
2)或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏,这种情况被称为脑裂现象。因此,站点A和站点B在某项功能层组成了一个独立的集群,即一个“大脑”,由于某些原因,站点A和B的心跳中断,形成了两独立的集群,即两个“大脑”,而当一个人有两个大脑,并相互独立时,那么必然会出问题,造成系统宕机,正如一个人不能在向前走的同时接受另一个大脑向后走的指令一样。
脑裂产生的原因当容灾系统中出现脑裂现象时,优先考虑心跳线路上的问题,其次是心跳服务。软件层面的问题,主要有以下几点原因:
1)高可用存储对之间心跳线路故障,导致无法正常的通信。原因如下:
a. 心跳线本身就坏了(包括断了,老化);
b. 网卡以及相关驱动坏了,IP配置及冲突问题;
c. 心跳线间连接的设备故障(交换机的故障或者是网卡的故障);
d. 仲裁的服务器出现问题。
2)高可用存储对之间链路上开启了防火墙阻挡了心跳消息的传输;
3)高可用存储对上的心跳网卡地址等信息配置的不正确,导致发送心跳失败;
4)其他服务配置不当等原因,如心跳的方式不同,心跳广播冲突,软件出现了BUG等。
图5 心跳断开导致脑裂
脑裂现象产生的后果在容灾系统中,当发生脑裂现象时,容易引起以下两种问题,对业务和数据造成影响。
1)引起数据的不完整性:集群中节点(在脑裂期间)同时访问同一共享资源,而且没有机制去协调控制的话,那么就存在数据不完整性的可能。
2)服务异常:对外提供的服务出现异常。
脑裂问题的解决方案针对容灾系统中的脑裂问题,通常是以心跳检测为依据来防止脑裂,有如下几种方案:
1)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个线路还是好的,依然能传送消息。
2)检测到裂脑的时候强行的关闭一个心跳节点,相当于程序上备节点发现心跳线故障,发送关机命令到主节点。
3)通过增加仲裁的机制,确定谁该获得资源提供服务:
a. 增加一个仲裁机制。例如设置参考的IP,当心跳完全断开的时候,2个节点各自都ping一下参考的IP,不通则表明断点就出现在本段,这样就主动放弃竞争,让能够ping通参考IP的一端去接管服务。
b. 通过第三方软件进行仲裁。
4)启用磁盘锁。正在服务一方锁住共享磁盘,脑裂发生的时候,让对方完全抢不走共享的磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动解锁,另一方就永远得不到共享磁盘。现实中介入服务节点突然死机或者崩溃,另一方就永远不可能执行解锁命令。后备节点也就接手不了共享的资源和应用服务。于是有人在HA中设计了“智能”锁,正在服务的一方只在发现心跳线全部断开时才启用磁盘锁。
作者:张鹏
来源:twt社区
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved