有人可以解释一下这个 GlusterFS 设置吗?

有人可以解释一下这个 GlusterFS 设置吗?

经过深入研究以了解如何使用 gluster 设置复制后,我遇到了这个问题:Apache 可以直接读取 GlusterFS Brick 但写入 GlusterFS 挂载吗?

我也发现了一种似乎可以解释同一件事的方法,我以为我理解了,但现在我认为我不明白。

那么,为了实现这种复制,我需要让两台机器同时充当服务器和客户端吗?现在我不明白这种关系是如何运作的:例如,B 不是 A 的客户端吗?

是否涉及多层次的客户端-服务器关系?A 是 A 的客户端,B 是 B 的客户端,每个客户端都在文件夹中安装来自同一台机器的卷,并且这两个卷以某种方式在第三层关系中同步(从 A 到 B)?

为什么上面的问题询问的是写入文件系统还是写入已挂载卷?当我将 B 设为 A 的客户端时,A 导出一个文件夹,B 将其作为远程卷挂载到文件夹中,我从来没有问过自己在写什么:我写入了 A 上的原始文件夹和 B 上的已挂载卷。难道它不应该这样工作吗?

答案1

假设您有两台机器,A 和 B。在每台机器上,您都将其导出/opt/files为 Gluster 块,并设置客户端复制。然后,我们将生成的目录挂载到/mnt/gluster-files两台机器上。这很重要!

使用该挂载点,我们现在在两台机器上拥有高度可用的文件系统。

当你写入一个文件时 - 假设/mnt/gluster-files/example在机器 A 上,它会导致两件事发生:

  1. 写一份副本给/opt/files
  2. /opt/files通过网络发送一份副本至机器 B 上写入。

这很好,因为我们想要有冗余,这意味着我们必须拥有一份以上的数据副本。

接下来,假设我们要读取同一个文件。同样在机器 A 上:

  1. 您发出阅读/mnt/gluster-files/example
  2. GlusterFS 说“我需要检查所有副本节点,以找出谁拥有此文件的最新版本”
  3. GlusterFS 检查每个节点
  4. 事实证明,所有副本都是相同的,因为复制工作正常
  5. 您将从本地磁盘返回文件。§

(§ 有一个read-subvolume客户端选项,将其设置为任何 Gluster 客户端和服务器机器上的本地卷是明智的,就像在这种情况下一样。否则,步骤 5 可能是“从随机节点向您发送文件”。)


在后台,GlusterFS 使/opt/files两台机器保持同步。检查每个节点(尤其是针对大量小文件)会带来不小的性能损失。

因此出现了一个问题:如果我在这两台机器中的一台上运行一个进程,并且我知道文件是同步的,为什么我不能直接从本地共享中读取文件呢?

不建议这样做,但你执行此操作。从 读取文件/opt/files。手动跟踪是否同步,如果同步,则执行类似 的操作,ls -laR/mnt/gluster-files将触发同步。

/opt/files那么,如果你在机器 A 上写入,会发生什么情况?

GlusterFS 不会注意到文件位于那里。Gluster 不会这样工作。除非您碰巧做了一些事情,让 Gluster 在机器 A 上注意到它,否则它不会进入机器 B。

因此,您不能只告诉 Apache 读取和写入/opt/files。似乎一个好的折衷方案是告诉它从 读取/opt/files但写入/mnt/gluster-files。这只有当您的应用程序允许您指定读取和写入文件的不同路径时才有可能,但很少有应用程序允许这样做。

相关内容