分享最近我们团队对GFS脑裂的分析 - 感谢陈方县同学

本文详细分析了GlusterFS Replica的IO流程,包括创建文件和写文件的过程,并探讨了其脑裂现象。通过研究changelog机制,揭示了脑裂发生的原因,以及如何通过扩展属性和故障处理机制来识别和处理脑裂问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1         glusterfsreplica脑裂分析

1.1  glusterfs replica io流程

glusterfs通过对replica卷的所有子卷写相同的数据实现冗余功能。当glusterfs的客户端对replica卷有任何写操作(包括数据与元数据)时,glusterfs通过对所有的子卷加锁进行同步。

glusterfs的client每次对server端做操作,都需要经过多层translator,若client端完成一次完整的处理需要向server端发送多次不同的逻辑请求,而由于glusterfs的translator采用异步回调机制,导致不可能在同一个上下文顺序的向server端发送多次不同的逻辑请求,所以只能采用在当前请求的callback函数中处理下一个请求的方法。图6-1简要描述了上述过程


图6-1

下面对glusterfs replica卷的基本流程进行分析。

1.1.1  glusterfs replica 创建文件

1.        glusterfsreplica卷创建文件的基本流程:

1)       对每个up(正常工作的子卷)的子卷加非阻塞entry锁,只有所有up的子卷加锁成功,才算加锁成功。

2)       如果非阻塞锁失败,则加阻塞锁。

3)       对每个加锁成功的子卷对应的扩展属性设置changelog(扩展属性相应区域加1)。

4)       在所有up的子卷上创建文件。

5)       当所有up的子卷创建文件之后,对这些子卷对应的扩展属性清除changelog(扩展属性相应区域减1)

6)       对所有up的子卷解锁。

2.        glusterfsreplica卷创建文件的详细流程:如图6-2所示


                                                        图 6-2

1.1.2  glusterfs replica 写文件

1.        glusterfsreplica卷写文件的基本流程如下:

1)       对每个up(正常工作的子卷)的子卷对应文件加非阻塞inode锁,只有所有up的子卷加锁成功,才算加锁成功。

2)       如果非阻塞锁失败,则加阻塞锁。

3)       对每个加锁成功的子卷对应文件扩展属性设置changelog(扩展属性相应区域加1)。

4)       向所有up的子卷上对应文件写数据。

5)       当所有up的子卷写完数据后,对这些子卷对应文件扩展属性清除changelog(扩展属性相应区域减1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值