Gluster 到底是做什么的?

Gluster 到底是做什么的?

我玩了 gluster 两天,一直在这里和他们的问答系统上提问。我真的不明白其中的一些东西。我看到有人说

在服务器之间设置复制块(因为您只使用 3 个,所以复制会更安全),并且每个服务器都会将所有其他服务器的文件视为“本地” - 即使一个服务器发生故障,文件也已复制到其他服务器。

或者

Gluster 将维持跨卷(块)的文件同步,并具有“自我修复”功能,可以处理由于一台服务器离线而导致的任何不一致问题。

自从我从服务器到客户端的远程卷 gluster 如何处理服务器节点(卷安装的节点)故障?据我尝试,安装卷的客户端上的文件夹变得无法访问,我必须使用 umount 来解锁它。之后服务器上就没有任何内容了。

这基本上是我在任何解释中都没有看到的内容:当服务器节点出现故障时会发生什么?是否有可能真正复制内容,就像 unison 或 rsync 那样?

答案1

我们最近开始研究 GlusterFS 以供自己使用,所以这个问题对我来说很有趣。Gluster 使用 FUSE 客户端上的所谓“转换器”来处理您存储数据的方式。转换器有几种类型,概述如下:

http://www.gluster.com/community/documentation/index.php/GlusterFS_Translators_v1.3

您具体询问的是自动文件复制转换器或AFR,这里详细介绍了它:

http://www.gluster.com/community/documentation/index.php/Understanding_AFR_Translator

查看源代码似乎数据实际上是同时写入节点的,比 rsync 好多了!

关于从故障情况中恢复,我发现了一个有趣的注意事项。Gluster 系统与 Ceph 不同,因为它不会主动感知复制状态的变化,而必须“触发”。因此,如果您丢失了集群中的某个节点,您必须查找每个文件,以便 Gluster 确保其已复制:

http://www.gluster.com/community/documentation/index.php/Gluster_3.2:_Triggering_Self-Heal_on_Replicate

我找不到一个好的页面来描述内部故障场景机制,比如客户端如何检测损坏的情况。但是下载源代码并查看客户端后,发现它对命令使用了各种超时,并且不时对集群中的其他系统进行探测。看起来其中大部分都有 TODO 标记,目前无法配置,除非通过源代码修改,如果收敛时间至关重要,那么这可能是您的一个担忧。

答案2

仅使用 2 个节点进行复制,gluster 与自动 rsync 脚本没有太大区别。只有当您拥有 4 个或更多存储节点时,事情才真正开始变得有趣 —— 您的客户端计算机会看到一个空间池,但组成文件分布在所有存储节点(砖块)上。这意味着,如果您的 4 台服务器有 10TB 的本地空间,您的客户端计算机可以看到一个 20TB 的命名空间(复制的,或 40TB 的不受保护的存储)。

我曾经看到过客户端机器在存储块不可用后尝试 IO 时出现短暂的故障(大概 30 秒左右)。不过,故障过后,只要在线的服务器仍保存着完整的卷数据,IO 就会继续正常进行。

答案3

你所描述的行为是意料之外的 - 我会咨询 irc.freenode.net 上的 #gluster 或者[电子邮件保护]或者http://community.gluster.org/

-John Mark Gluster 社区成员

答案4

当面向客户端的服务器发生故障(即客户端使用其 IP/DNS 来挂载文件系统的服务器)时,整个卷对于该客户端将处于离线状态,即无法在该卷上进行读取/写入。

但是,如果客户端使用其他服务器的 IP/DNS 挂载它,那么该卷对于该客户端来说仍将处于在线状态。但是,读/写操作不会转到失败/崩溃的实例。

相关内容