在心跳失效的时候,就发生了split-brain。
比如: 正常情况下,NodeA和NodeB在心跳检测以确认对方存在; 在通过心跳检测不到对方时,就接管对应的resource。 如果突然间,NodeA和NodeB之间的心跳不存在了,而NodeA和NodeB事实上都active,这时NodeA要接管NodeB的resource么? 而同时NodeB要接管NodeA的resource么?这时就是split-brain。

不对的情况请大家指正。

split-brain会引起数据的不完整性,甚至是灾难性的,又如何理解呢?
其实不仅仅是数据的不完整性,可能会对服务造成严重影响。

对于数据的不完整性,主要为集群节点访问同一存储,而此时并没有锁机制来控制数据访问(都split-brain,心跳全没有了,咋控制里),那就存在数据的不完整性的可能。这个也是RHCS为何必须要fence设备的主要原因。可以参考RHCS的文档,其中也有对split-brainde 说明。
对于服务的影响,主要是可能早上NodeA和NodeB同时接管了一个虚拟IP(仅仅是举例子。)

裂脑”,一个很形象的术语。HA系统危机情景。

曾经看央视10套教育频道,获知“裂脑”是治疗“×××”病的一种手术。医生们认为×××病发作是由于大脑“异常放电”所至。为了阻止“异常放电”波及整个大脑(左、右半脑),就用手术来割断病人左右脑的连接神经。使今后病人在发病时至少还有半个大脑正常、能控制行为。但施行过手术的所谓“裂脑人”在术后有一段不适应期,表现得行为分裂,仿佛体内存在着2个人,时常要发生冲突。例如,右脑想让一只手去脸上挠痒痒,左脑却不认同、以为是谁的手要“登鼻子上脸”就让另一只手去阻止,于是明明是自己的2只手,却互不相让、扭在一起扳起了手腕...

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

对付HA系统“裂脑”的对策,目前我所了解的大概有以下几条:
1)添加冗余的心跳线,例如双线条线。尽量减少“裂脑”发生机会。
2)启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即,正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3)设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下 参考IP,不通则表明断点就出在本端,不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

# What does "split-brain" mean?

"Split brain" is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the cluster were intact. This is like having two governments trying to rule the same country. If multiple computers are allowed to write to the same file system without knowledge of what the other nodes are doing, it will quickly lead to data corruption and other serious problems.

Split-brain is prevented by enforcing quorum rules (which say that no group of nodes may operate unless they are in contact with a majority of all nodes) and fencing (which makes sure nodes outside of the quorum are prevented from interfering with the cluster).

 

# What does "split-brain" mean?

"Split brain" is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the clus ...
这个应该是红帽文档吧?

简单来说,脑裂就是上面提到的当心跳网络出现状况的时候,集群可能分裂成几个节点组,几个节点组都分别接管服务并且访问文件系统资源(例如并发写入文件系统)导致数据损坏。

实际上脑裂正常情况下是无法见到的,现代集群都应该有保护机制来避免这种情况发生。例如RHCS引入的fence的概念。

具体情况是这样,例如2个节点集群,当心跳断开导致节点之间互相无法通信的时候,每个节点会尝试fence掉对方(确保对方释放掉文件系统资源)后再继续运行服务访问资源。这样,就可以确保只有一个节点可以访问资源而不会导致数据损坏。

所以这个也是RHCS为什么必须有fence设备的原因。前面很多帖子都在讨论到底要不要fence,官方讲法是,如果你跑生产,要保证数据不受损坏,就必须有fence设备。

集群出现bug的时候也会出现脑裂,这里就不提怎么产生脑裂了,希望大家都别碰到。。。 呵呵

http://hi.baidu.com/james_yulei/blog/item/bc3644ee78132ddc2e2e215f.html

-----

Esx Server

HA的基本工作过程


HA的基本工作过程
VI3的HA为处于同一个HA Cluster中的ESX服务器提供互相检测的功能. 一旦一台ESX服务器被确认为故障. 则剩余正常的ESX服务器会启动原来在故障ESX上运行的VM, 从而提供VM一级的高可用性.

ESX之间互相检测是由心跳(heartbeat)来完成的. 心跳的传输在Service Console Network上进行.

当一台ESX没有接收到来自其他服务器的心跳信号, 有两种可能性:

1. 是其它ESX服务器发生了故障,
2. 是本机的网络连接 (指Service Console Network) 发生故障, 也称为被孤立(Isolation)

为了区分这两种情形, ESX会试图PING一个网络地址, 并以能否收到应答来确定本机是否被孤立. 这个网络地址一般默认为SC的网关. 你也可以在HA的高级选项中重新设定(加选项: das.isolationaddress).

如果ESX认为自己被孤立, 默认的动作是它Power-Off(不是安全Shutdown)在该ESX上运行的所有VM. 这样做的目的是释放对那些VM的盘文件的锁定, 以便其他正常的ESX服务器可以接管对这些VM的控制.

如果ESX认为是其他的ESX故障, 它则会启动原来在故障ESX上运行的VM.

这个过程中有几个比较重要的时序 (有的用户找到一些更详细的数据, 但未经VMWARE证实):

在ESX停止接受到心跳的12秒后, 如果它认自己已被孤立, 既POWER-OFF自己的VM.

正常ESX在停止接到故障ESX的15秒后, 开始启动原来在故障ESX上运行的VM.

这个时间差有可能导致混乱:

比如发生网络故障的ESX在第12秒POWER-OFF VM. 如果网络在15秒之前恢复, 正常运行的ESX并不启动在曾经发生网络故障的ESX上的VM, 尽管故障ESX已将那些VM POWER-OFF了.

还有一种称为脑裂的情况, 在两节点的CLUSTER中很常见:

假设ESX1崩溃, ESX2失去来自ESX1的心跳. 这时候它并不知道是被孤立了还是ESX1出现故障, 于是它要靠PING指定的网络地址来做判断. 如果该网络地址设置的不好. PING 失败的话, ESX2会以为自己是被孤立了, 这时候它不但不启动原来在ESX1上的VM, 而且还可能按默认设置将自己的VM也POWER-OFF.
 

http://bbs.51cto.com/thread-539936-1.html