暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Glusterfs开源分布式存储系统(二)

云存储技术交流 2019-01-22
367

脑裂,就是指两个或多个节点都“认为”自身是正常节点而互相“指责”对方,导致不能选取正确的节点进行接管或修复,导致脑裂状态。这种现象出现在数据修复、集群管理等等高可用场景常见。

Glusterfs的冗余镜像(下文简称AFR)提供了数据副本功能,能够在即使只有一个冗余节点的情况下仍能正常工作,不中断上层应用。当节点恢复后,能够将数据修复到一致状态,保证数据的安全。


AFR工作原理

AFR数据修复主要涉及三个方面:ENTRY,META,DATA,我们以冗余度为2即含有两个副本A和B的DATA修复为例进行讲解。记录描述副本状态的称之为ChangeLog,记录在每个副本文件扩展属性里,读入内存后以矩阵形式判断是否需要修复以及要以哪个副本为Source进行修复。初始值以及正常值为0。(注:ENTRY和META,DATA分布对应着一个数值)。

Write的步骤可分解为:

1)下发Write操作。

2)加锁Lock。

3)向A,B副本的ChangeLog分别加1,记录到各个副本的扩展属性中。

4)对A,B副本进行写操作。

5)若该副本写成功则ChangeLog减1,若该副本写失败则ChangLog值不变,记录到各个副本的扩展属性中。

6)解锁UnLock。

7)向上层返回,只要有一个副本写成功就返回成功。

 

上述在AFR中是完整的一个transaction动作。根据两个副本记录的ChangeLog的数值确定了副本的几种状态:

1)WISE,智慧的,即该副本的ChangeLog中对方对应的数值大于0而且自身对应的数值等于0.

2)INNOCENT,无辜的,即该副本上的ChangeLog即不指责对方也指责自己,ChangeLog全为0.

3)FOOL,愚蠢的,即该副本上的ChangeLog是指责自己的。

4)IGNORANT,忽略的,即该副本的ChangeLog丢失。

所以一般情况下,会选取WISE的副本作为Sourse进行修复。但是当两个节点都是WISE状态时,这就出现了声名狼藉的脑裂状态。


AFR脑裂

两个副本均为WISE时发生脑裂,那么在哪种场景下会产生脑裂呢?我们还是以冗余度为2的情况举一个简单的例子:

某文件X的两个副本位于物理机A和物理机B上,在A和B上分别运行着进程a和进程b,a和b持续通过各自所在的物理机上的客户端对文件X进行不同的写操作。然后物理机A和B之间网络中断,因为AFR在一个副本的情况下仍能不中断上层应用,所以进程a和进程b仍会持续运行,但因为网络中断,文件X在A和B上的副本数据不再一致且都认为对方是异常的,当网络恢复时,两个副本互相“指责”,即出现了脑裂。

当然这是脑裂发生的场景之一,有时候是有可能发生脑裂,而有时候是必然发生脑裂。脑裂,也是很多人关心的一个问题,不能一概而论。

关于脑裂,不同的场景处理方法也是不同的,甚至某些场景的脑裂是无法避免的,只能尽量避免脑裂的发生。


关于GlusterFS存储服务器Quorum最佳实践说明:

If a cluster with an even number of nodes is split exactly down the middle, neither half can have quorum (which requires more than half of the total). This is particularly important when N=2, in which case the loss of either node leads to loss of quorum.  Therefore, it is highly advisable to ensure that the cluster size is three or greater.  The "extra" node in this case need not have any bricks or serve any data.  It need only be present to preserve the notion of a quorum majority less than the entire cluster membership, allowing the cluster to survive the loss of a single node without losing quorum。

文章转载自云存储技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论