为维护数据一致性,防止集群出现“脑裂”的情况,GPFS设计了GPFS系统的仲裁机制:
节点仲裁:
将集群中的一些节点定义为仲裁节点(quorum nodes),每个节点如能和一半以上的仲裁节点成功通讯则GPFS可用,否则GPFS不可用。一半以上仲裁节点的意义是,1个要求1个、2个要求2个、3个要求2个、4个要求3个、5个要求3个,这样保证如果由于某些原因(如网络故障)导致集群分割,只有一个子集群GPFS可用。
节点仲裁和决胜磁盘(tiebreaker disks):
集群中仲裁节点不超过8个且应该包含集群主次配置服务器(primary and secondary cluster configuration servers),每个仲裁节点连接到所有决胜磁盘,则可以定义1-3个决胜磁盘但最好是奇数,只要有仲裁节点有一半以上的决胜磁盘可用则GPFS可用,否则GPFS不可用。这种模式适合小集群,特别只有两个NSD server和共享存储的情况,这时这两个NSD server还是cluster configuration servers和quorum nodes,共享存储上的某些LUN定义为决胜磁盘,这样两个NSD server坏一个整个GPFS还是可用的。
上面说的仲裁节点选择有一些原则:
一直开机稳定运行的节点
位于不同机架、不同供电来源、连接不同交换机的节点
最好包含这些节点:Primary configuration servers、Secondary configuration servers、Network Shared Disk servers
仲裁节点不是越多越好,最好奇数个且不要超过7,如3、5、7
仲裁节点应该是集群的核心节点,且能够代表集群
前面说的仲裁都是仲裁本地的GPFS是否可用,GPFS还有机制可以将一份数据复写2-3次,相当于做了NSD级别的Raid1,这样在损失一些NSD的情况下文件系统可能仍然可用,这个时候就需要对GPFS中的某个文件系统进行冲裁。
文件系统描述符(File system descriptor)仲裁:
在创建文件系统的时候,GPFS会根据NSD和故障组的情况在某些个NSD上面创建文件系统描述符,运行时根据可用的描述符数量来判断这个文件系统是否可用。
如果有至少5个不同的故障组则创建5个描述符副本,至少3个副本可用;
如果有至少3个NSD则创建3个描述符副本,至少2个副本可用;
如果只有1-2个NSD则每个NSD创建一个描述符副本,一个都不能少。
对于少于5个故障组,特别是只有2个故障组的情况,必定存在某一个故障组失效的情况下这个文件系统会不符合上述要求而被关闭的情况,可以通过创建专门的descOnly NSD来平衡描述符副本的分配,从而防止系统存在单点故障。