脑裂概述
脑裂是文件或者目录的一种状态,表示多个副本的数据不一致。按照数据的类型,脑裂又分为如下几种:
- 数据脑裂,是指多个副本,同一个文件数据不一样,比如文件内容
- 元数据脑裂,是指多个副本,同一个文件的元数据不一样,比如权限、属主或者属组等
- 目录脑裂,分为两种情况。
(1)是指多个副本,同一个目录下,同一个文件的GFID不一样
(2)是指多个副本,同一个目录下,同一个名字,在某些副本中是文件,在另外一些副本中是目录
脑裂造成的主要原因
- 客户端网络异常。比如两副本R1、R2。 客户端C1暂时性的和R2失去连接,客户端C2暂时和R1失去连接,C1和C2都操作一个文件,就会导致脑裂产生。
- brick进程故障导致。比如三节点集群B1、B2、B3,三副本。 B2挂了数据写入B1、B3 ------> B2活了,B1挂了,数据写入B1、B3 ----->B3挂了,B2活了,此时B1和B2就可能会出现脑裂。
预防手段
预防手段是指,如果这个文件或者是目录 “裂了”,就不会让你再动这个文件或者目录了。此时我们需要“修理手段”,修理脑裂状态的文件或者目录,大概包括手动和自动修复两种,另一篇文章会讲到。
三副本
配合Client quorum(client quorum),形成第一道关卡。type设置成auto,也就是必须达到半数brick存活,才能写入,这样可以防止网络分区 造成的脑裂。
第二道关卡,就是AFR的写入检查,当三副本的volume,存活两个brick,达到了半数原则,通过了第一道关卡。但是如果这两个副本的数据不一致,AFR发现这一点时,就会返回EIO,不允许动这个文件。
仲裁盘机制
预防机制类似于三副本,我觉的稍微略略逊于三副本,但是人家也节约空间了。可以单击上面小标题查看详细的介绍,我这里就不啰嗦了。