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

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

我也发现了一个似乎解释同样的事情的方法,我想我明白了,但现在我认为我不知道。

所以为了获得这种复制的function,我需要让这两台机器同时作为服务器和客户端? 现在我不明白这种关系是如何工作的:不是B,比如A的客户?

是否涉及多个级别的客户端 – 服务器关系? A和B的客户端是B的客户端,每个客户端在同一台计算机上安装一个卷,并且这两个卷在第三层关系中以某种方式同步(从A到B)?

为什么上面的问题是关于写入文件系统还是写入已安装的卷? 当我把B作为A的客户端时,A出口一个文件夹,B把它作为一个远程卷装在一个文件夹中,我从来没有问过我自己写的是什么:我写入A的原始文件夹, B.这不是应该如何工作?

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

使用这个安装点,我们现在在两台机器上都有一个高度可用的文件系统。

当你写一个文件 – 比方说机器A上的/mnt/gluster-files/example时,会导致两件事情发生:

  1. 将副本写入/opt/files
  2. 通过networking发送一份拷贝到机器B上的/opt/files中。

这很好,因为我们想要冗余,这意味着我们必须有多个数据副本。

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

  1. 您为/mnt/gluster-files/example发出读取
  2. GlusterFS说:“我需要检查所有的副本节点,找出谁有这个文件的最新版本”
  3. GlusterFS检查每个节点
  4. 事实certificate,所有的副本是相同的,因为复制工作很好
  5. 您从本地磁盘返回该文件。 §

(§有一个read-subvolume客户端选项,在这种情况下,把它设置到Gluster客户端和服务器的任何机器上的本地卷是明智的,否则,第5步可能是“你发送文件从一个随机节点'。)


在幕后,GlusterFS使两台机器上的/opt/files保持同步。 检查每个节点,特别是大量的小文件,都会增加一个不重要的性能损失。

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

这不是build议,但你可以做到这一点。 从/opt/files读取/opt/files 。 手动跟踪,如果你不同步,如果你这样做,做一些像ls -laR in /mnt/gluster-files这将触发同步。

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

该文件没有被GlusterFS注意到。 Gluster不这样工作。 它不会进入机器B,除非您碰巧做了Gluster在机器A上注意的事情。

因此,你不能只告诉Apache读/opt/files/opt/files 。 什么似乎是一个很好的折衷是告诉它从/opt/files读取,但写入/mnt/gluster-files 。 这是唯一可能的,如果你的应用程序让你指定一个不同的path来读写文件,这不是很多。