我只是检查我的glusterfs卷的状态,我有一个没有path的裂脑入口:
# 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提供的“ pipe理裂脑”的正式文档中所述, 裂脑是数据或可用性不一致性的一个状态,这个数据或可用性的不一致性来源于维护范围重叠的两个独立的数据集,这或者是因为networkingdevise中的服务器,或基于服务器不通信并且彼此同步数据的故障情况。 这是一个适用于复制configuration的术语。
请注意,它被称为“基于服务器不通信并将数据同步到彼此的失败条件” – 由于任何可能性 – 但这并不意味着您的节点可能会丢失连接。 Peer可能还在集群中并且连接在一起。
裂脑types:
我们有三种不同types的裂脑,而据我所知,你们是进入裂脑。 解释三种types的裂脑:
数据裂脑:裂脑下文件的内容在不同的副本对中是不同的,自动修复是不可能的。
元数据裂脑: ,文件的元数据(例如,用户定义的扩展属性)是不同的,自动修复是不可能的。
入口裂脑:当一个文件在每个副本上有不同的gfid时,就会发生这种情况。
GlusterFS内部文件标识符(GFID)是整个群集中每个文件所独有的uuid。 这与正常文件系统中的inode编号类似。 文件的GFID存储在名为trusted.gfid
xattr中。 要findGFID的path,我强烈build议您阅读GlusterFS提供的官方文章 。
有多种方法可以防止发生裂脑,但要解决它,必须删除相应的gfid-link文件。 gfid-link文件出现在砖的顶层目录中的.glusterfs目录中。 顺便说一下,在删除gfid链接之前,请务必确保没有到该文件夹中存在的文件的硬链接。 如果存在硬链接,则必须将其删除。 然后通过运行以下命令可以使用自我修复过程。
同时,要查看处于裂脑状态的卷上的文件列表,可以使用:
# gluster volume heal VOLNAME info split-brain
您还应该注意,对于复制卷,当某个块脱机并重新联机时,需要进行自我修复才能重新同步所有副本。
要检查您可以使用的卷和文件的修复状态:
# gluster volume heal VOLNAME info
由于您使用的是3.5版本,因此您没有自动修复。 所以在完成前面提到的步骤后,您需要触发自我修复。 要做到这一点:
只有在需要治疗的文件上:
# gluster volume heal VOLNAME
在所有文件上:
# gluster volume heal VOLNAME full
我希望这会帮助你解决你的问题。 请阅读官方文档以获取更多信息。 干杯。
我觉得文件很清楚,它甚至给你一个类似的例子。
对于Gluesterfs的治疗命令如
gluster音量愈合** VOLNAME **裂脑最新mtime **文件**
FILE可以是从卷的根(或)文件的gfidstring表示中看到的完整文件名
所以你不需要担心这一点。
而作为转换GFIDpath说:
GlusterFS内部文件标识符(GFID)是整个群集中每个文件所独有的uuid。
这个脚本可能会告诉你哪个文件名属于哪个gfid,但脑分裂发生了,它可能没有文件名。
你正在运行3.5,没有半自动治愈命令,所以你可能需要手动修复冲突,这通常意味着决定删除哪个gfid文件。
我该如何解决?
脑裂解决方法可以在这里find。 如果没有什么帮助, 这里的手册如何做到这一点。 对于这种情况,我看到这篇文章也很有帮助。
如何避免裂脑。
通过仲裁投票algorithm完成对networking分区的防护。 如果主机发生故障,或者在节点继续运行但不能再相互通信的情况下,集群中剩余的一个或多个节点竞相在证人驱动器上放置一个SCSI保留。 在脑裂的情况下,证人将有助于决定哪些持有数据副本的主机应该接pipe控制权。
一些例子。
VMware VSAN允许运行双节点集群,见证驱动器在第三主机或云中运行。 资源
StarWind Virtual SAN仅使用Microsoft故障转移群集服务以双节点设置运行,该服务还包含仲裁投票机制以避免裂脑问题。 资源
对于这两个,心跳networking用于服务/监视节点与法定人数之间的通信。 为了避免脑裂,我认为强制要使用冗余心跳频道。
当群集的两个节点断开连接时发生裂脑。 每个节点认为另一个不工作。
要解决这个问题,你必须明白为什么你的两个节点不再彼此交谈。