Gluster究竟做了什么?

过去两天我一直在玩gluster,并在这里和他们的问题系统提问。 我真的不明白一些东西。 我看到人们在说些什么

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

要么

Gluster将跨卷(砖块)保持文件同步,并具有“自我修复”function,可处理由于一台服务器脱机而导致的任何不一致情况。

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

基本上,我没有看到任何解释: 当服务器节点出现故障时,会发生什么,以及是否有可能真正复制内容,如unison或rsync呢?

我们最近开始研究GlusterFS用于我们自己的用法,所以这个问题对我来说很有意思。 Gluster使用FUSE客户端上所谓的“译员”来处理数据存储。 这里有几种types的译员:

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好多了!

关于失败情况的恢复,我发现有一个有趣的logging。 Gluster系统不同于Ceph,因为它不主动意识到复制状态的变化,必须被“触发”。 因此,如果您在集群中丢失了一个节点,则必须查找每个文件,以便Gluster确保其被复制:

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

我无法find一个很好的页面来描述内部的故障场景机制,比如客户端如何检测事件被破坏。 然而,下载源代码并查看客户端时,会出现各种用于命令的超时时间,以及对群集中其他系统经常进行的探测。 它看起来像其中大部分都有TODO标记,目前不可configuration,除非通过源代码修改,如果收敛时间是关键的话,这可能是一个关注。

只有2个节点复制,gluster与自动rsync脚本没有多大区别。 一旦你有4个或更多的存储节点,事情才开始变得有趣 – 你的客户机看到一个空间池,但组成文件分布在所有的存储节点(砖)上。 这意味着如果您的4个服务器拥有10TB的本地空间,您的客户端计算机可以看到20TB(已复制,或40TB未受保护的存储)的单个名称空间。

在存储砖变得不可用时,我在客户端机器上看到了一个短暂的呃 – 大约30秒钟左右的时间。 然而,打嗝后,只要有在线服务器仍然拥有全套的卷数据,IO就会正常运行。

你正在描述意想不到的行为 – 我会在irc.freenode.net或gluster-users@gluster.org或http://community.gluster.org/上咨询#gluster

– 约翰·马克Gluster社区的家伙

当面向服务器的客户端发生故障(即客户端使用IP / DNS来挂载文件系统的服务器)时,整个卷将变为该客户端的离线,即无法在卷上读/写。

但是,如果客户端使用其他服务器的IP / DNS进行挂载,则该客户端的卷仍然处于联机状态。 但是读/写不会进入失败/崩溃的实例。