在深入了解如何使用 gluster 设置复制之后,我遇到了这个问题:Apache Can Read The GlusterFS Brick Directly But Write to the GlusterFS Mount?
我还发现了一个似乎可以解释同一件事的方法,我认为我理解它,但现在我认为我不理解。
因此,为了获得这种复制功能,我需要让两台机器同时充当服务器和客户端吗?现在我不明白这种关系是如何运作的:B 不是,例如 A 的客户吗?
是否涉及多个级别的客户端-服务器关系?A 是 A 的客户端,B 是 B 的客户端,每个文件夹都安装在同一台机器上的一个卷中,并且这两个卷在第三层关系中以某种方式同步(从 A 到 B)?
为什么上面的问题是关于写入文件系统或已安装卷的问题?当我让 B 成为 A 的客户端时,A 导出一个文件夹,B 将其安装为文件夹中的远程卷时,我从不问自己在写什么:我写入了 A 上的原始文件夹和安装的卷B. 这不是它应该如何工作的吗?
crb*_*crb 12
假设您有两台机器,A 和 B。在每台机器上,您导出/opt/files
为 Gluster 块,并设置客户端复制。然后我们将生成的目录挂载/mnt/gluster-files
在两台机器上。这个很重要!
使用该挂载点,我们现在在两台机器上拥有了一个高度可用的文件系统。
当你写一个文件时——假设/mnt/gluster-files/example
在机器 A 上,它会导致两件事发生:
/opt/files
/opt/files
机器 B的副本。这很好,因为我们想要冗余,这意味着我们必须拥有多个数据副本。
接下来,假设我们要读取同一个文件。再次在机器 A 上:
/mnt/gluster-files/example
(§ 有一个read-subvolume
客户端选项,在作为 Gluster 客户端和服务器的任何机器上将其设置为本地卷是明智的,在这种情况下。否则,第 5 步可能是“您从随机节点'。)
在幕后,GlusterFS/opt/files
在两台机器上保持同步。检查每个节点,尤其是对于大量小文件,会增加一个不小的性能损失。
因此提出了一个问题:如果我在这两台机器之一上运行一个进程,并且我知道文件是同步的,为什么我不能从本地共享中读取文件?
不建议这样做,但您可以这样做。从/opt/files
. 手动跟踪是否退出同步,如果退出,请执行类似于ls -laR
in 的操作/mnt/gluster-files
以触发同步。
那么,如果您/opt/files
在机器 A 上写入会发生什么?
GlusterFS 没有注意到该文件。Gluster 不是这样工作的。它不会进入机器 B,除非你碰巧做了一些让 Gluster 在机器 A 上注意到它的事情。
因此,您不能只告诉 Apache 读取和写入/opt/files
. 告诉它读取/opt/files
但写入/mnt/gluster-files
. 这只有在您的应用程序允许您指定读取和写入文件的不同路径时才有可能,而这种情况并不多见。