集群仲裁盘voting disk的原理

    我们在配置各种cluster系统时总会要求配置仲裁盘(oracle叫voting disk,IBM GPFS里边叫tiebreaker)。那么为什么cluster必须配置仲裁盘,它有什么作用呢?

    集群(cluster)也就是由多个节点组成的一个协同工作的系统。就像人一样,一个人的力量是有限的,把许多人召集在一起才能做大事业,因此人类社会才有了政府、公司等组织形式的出现。目前常见的计算机集群软件有Oracle RAC,IBM HACMP, IBM GPFS文件系统,VMware vSphere里边的VMFS等等。不管是哪种cluster,其工作原理都大致相同。任何组织和单位都要有个领导,进行统一协调。同理,在计算机集群软件中也有个领导者,我们称之为cluster manager(CM).

   集群中的领导者CM一般是通过投票的方式由集群中的所有符合资格的成员(quorum node)采用少数服从多数的原则共同推举产生。被选举出的CM通过网络通信协调各个节点的工作。这就有个问题,当网络出现故障的情况下,部分节点将失去与集群的联系无法得到CM指令,从而产生两个或多个孤立系统,俗称split brain(脑裂)。一个健康的集群是不允许产生脑裂情况的,因为多个无法协调行为的系统一起使用共享数据会造成数据的不一致。

    下面举个简单的例子说明:

    比如,原来一个集群由2个节点组成,分别是A、B,其中A是CM.B节点受A控制与A协同工作。某一天B突然无法获得A的指令了,那么在B看来有两种可能的情况发生了:

1)A节点坏掉了,网络正常

2)A还活着,是网络故障造成AB不能通信的

 

如果是1)的情况,那么B应该主动退出集群的操作,因为没有A的指令B是不能随便操作的,以避免整个集群数据的不一致。我们经常碰到Oracle RAC网络心跳线断了,其中一个Oracle节点就自动down,就是这个原因。

如果是2)的情况,那么B应该接管集群的控制权成为CM,以维持集群的继续工作。

两种不同的情况下,B应该采取的措施是截然不同的。但问题是B如何才能判断到底是1)还是2)的情况发生了呢?没有第三方的帮助,B是无法做出正确判断的。这时仲裁盘就起作用了。

所谓的仲裁盘,就是各个节点都可以访问的一个或多个共享存储盘。共享盘一般走的是SAN网络,所以当IP网络故障时,共享盘是不受影响的。一旦IP网络不通后,各个节点则通过仲裁盘进行通信来做出正确的判断。

还是拿上面的情况举例子。当B与A失联后,B会在仲裁盘的特定区域写上一条信息“我是B,请问A的情况如何?”。此时有可能出现两种情况:

1)如果只是网络故障,A还活着,则A会看到B的询问并回答:“我是A,我还好,你可以退出了”。B选择退出

2)如果A死掉了,则B始终不会收到A的回复。在等待一段时间后,B认为A不在工作,自己将成为A的继任者,主动成为CM来指挥集群的工作。

 

    以上只是举的最简单的情况,实际上的算法会更复杂一些,但基本原理是一样的。了解了这些,在配置仲裁盘时就知其所以然了。

 


 

 

你可能感兴趣的:(oracle,Quorum,GPFS)