michael1983
作者michael1983联盟成员·2018-12-18 09:53
技术总监·某证券

HA中关于脑裂的防止方法

字数 1530阅读 3464评论 0赞 2

HA中关于脑裂的防止方法

在two node HA cluster中,如果heart beat通信出现问题,比如 crossover cable断开或者类似的通路上的原因,导致2个健康node都认为对方挂掉,试图争取shared resource(比如IP, 共享盘阵上的共享卷等资源),并试图修改集群成员关系,各自组成一个集群. 这种情况就叫做brain-split. brain-split 的情况发生后,除了争抢IP导致的网络配置错乱,更严重的是因互相抢夺共享卷组成集群导致共享卷数据读写不一致然后被破坏掉.

防止brain -split 有好多方法:
第一种是建立冗余的heartbeat, 最简单的就是把heart beat 的path作冗余,比如bonding或者multi lan switch.或者是一根crossover+串口,都有

第二种是使用fencing技术,
RHCS 用的是fencing 机制,用一个可以被服务器控制的外部电源控制系统powerswitch来关闭掉一个node,解决争抢的问题. 如果不用powerswitch,还可以用服务器上自带的硬件管理设备,比如HP iLO远程控制或Dell DRAC, RHCS也支持直接去操控 SAN 交换机来做fencing.故障发生的时候,禁止某个node通过SAN交换机访问盘阵.

第三种是使用仲裁机制
有些集群使用仲裁, 比如HP MC/SG, 在共享盘阵的最前面单独划分一个很小的区域(分区或LUN卷),不建文件系统,2个node的集群系统在正常运行的时候直接裸读写这个区域,交换当前的成员信息,防止brain-split. 这个lun 又叫做lock lun. windows MSCS也使用仲裁盘Quorum Disk/partition的方式来做.

仲裁还可以通过第三台机器作Quorum Server来实现,并不一定要通过仲裁盘. MC/SG建议的方式就是使用仲裁服务器.

================================

解决脑裂(split brain)问题:

在“双机热备”高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一个整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障,2个节点上的HA软件像“裂脑人”一样,“本能”地争抢“共享资源”、争起“应用服务”,就会发生严重后果:或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

对付HA系统“裂脑”的对策大概有以下几条:

1)添加冗余的心跳线,例如双心跳线。尽量减少“裂脑”发生机会。

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

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

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广