我只是在检查我的 glusterfs 卷的状态,我有一个没有路径的裂脑条目:
# gluster volume heal private_uploads info
Brick server01:/var/lib/glusterfs/brick01/uploads/
<gfid:4c0edafb-0c28-427c-a162-e530280b3396> - Is in split-brain
<gfid:42d62418-1be9-4f96-96c4-268230316869> - Is in split-brain
Number of entries: 2
Brick server02:/var/lib/glusterfs/brick01/uploads/
<gfid:42d62418-1be9-4f96-96c4-268230316869> - Is in split-brain
<gfid:4c0edafb-0c28-427c-a162-e530280b3396> - Is in split-brain
Number of entries: 2
这是什么意思?我如何解决它?
我正在运行 GlusterFS 3.5.9:
# gluster --version
glusterfs 3.5.9 built on Mar 28 2016 07:10:17
Repository revision: git://git.gluster.com/glusterfs.git
什么是脑裂?
正如RedHat 提供的关于管理裂脑的官方文档中所提到的,裂脑是由于维护两个独立的数据集而导致数据或可用性不一致的一种状态,这些数据集的范围重叠,或者是因为网络设计中的服务器,或基于服务器未相互通信和同步其数据的故障情况。它是适用于复制配置的术语。
请注意,它被称为“基于服务器不相互通信和同步数据的故障条件” - 由于任何可能性 - 但这并不意味着您的节点可能会失去连接。对等体可能还处于集群中并已连接。
脑裂类型:
我们有三种不同类型的脑裂,据我所知,你的脑裂是入门级的。解释三种类型的脑裂:
数据裂脑:裂脑下的文件内容在不同的副本对中是不同的,无法自动修复。
元数据裂脑:,文件的元数据(例如,用户定义的扩展属性)不同,无法自动修复。
入口裂脑:当文件在每个副本对上具有不同的 gfid 时,就会发生这种情况。
什么是 GFID?
GlusterFS 内部文件标识符 (GFID)是一个 uuid,对于整个集群中的每个文件都是唯一的。这类似于普通文件系统中的 inode 编号。文件的 GFID 存储在其名为
trusted.gfid
. 要从 GFID 中找到路径,我强烈建议您阅读GlusterFS 提供的这篇官方文章。如何解决入口脑裂?
有多种方法可以防止发生脑裂,但要解决它,必须删除相应的 gfid-link 文件。gfid-link 文件存在于程序块顶层目录的 .glusterfs 目录中。顺便说一句,请注意,在删除 gfid 链接之前,您必须确保没有指向该砖块上文件的硬链接。如果存在硬链接,您也必须删除它们。然后,您可以通过运行以下命令来使用自愈过程。
同时,要查看卷上处于裂脑状态的文件列表,您可以使用:
您还应该注意,对于复制的卷,当块离线并重新在线时,需要自我修复来重新同步所有副本。
要检查卷和文件的修复状态,您可以使用:
由于您使用的是 3.5 版,因此您没有自动修复功能。所以在做了前面提到的步骤之后,你需要触发自愈。为此:
仅在需要修复的文件上:
# gluster volume heal VOLNAME
在所有文件上:
# gluster volume heal VOLNAME full
我希望这将帮助您解决问题。请阅读官方文档以获取更多信息。干杯。
我认为文档很清楚,它甚至给了你一个类似的例子。
对于 Gluesterfs 的治疗命令,例如
所以你不需要担心这个。
正如将 GFID 转换为路径所说:
这个脚本可能会告诉你哪个文件名属于哪个 gfid,但是发生了脑裂,它可能没有文件名。
您正在运行 3.5 并且没有半自动修复 cmd,因此您可能需要自己手动修复冲突,这通常意味着决定需要删除哪个 gfid 文件。
当集群的两个节点断开连接时,就会发生裂脑。每个节点都认为另一个节点不工作。
要修复它,您必须了解为什么您的两个节点不再相互通信。
可以在这里找到裂脑解决方案。如果没有太大帮助,这里的手动操作方法应该可以完成这项工作。对于这种情况,我看到这篇文章也很有帮助。
如何避免脑裂。
针对网络分区的保护是通过仲裁投票算法完成的。如果主机发生故障,或者存在节点继续运行但无法再相互通信的脑裂情况,则集群中的其余节点或多个节点竞相在见证驱动器上放置 SCSI 预留。在脑裂的情况下,见证人将帮助决定哪些持有数据副本的主机应该接管控制权。
一些例子。
VMware VSAN 允许运行 2 节点集群,见证驱动器在第三台主机或云中运行。资源
StarWind Virtual SAN 使用 Microsoft 故障转移群集服务仅在 2 节点设置中运行,该服务还包含仲裁投票机制以避免脑裂问题。资源
对于两者,Heartbeat 网络用于服务/监控节点和仲裁之间的通信。为了避免脑裂,我认为必须使用冗余的心跳通道。