在虚拟机内安装 Gluster,还是在 Gluster 上设置虚拟机?

在虚拟机内安装 Gluster,还是在 Gluster 上设置虚拟机?

我正在设置高可用性无共享地理上分散的 Web 服务器,为其域名使用多个 A 记录。现在我更关心高可用性 —— “当我拔掉任何一根电源线时,每个浏览器仍然可以看到我的网站” —— 而不是速度。

Web 服务器软件在每个物理机上的虚拟机中运行。(我使用哪个 Web 服务器和虚拟机管理程序真的很重要吗?如果重要的话,我目前使用的是 Apache 和 VirtualBox)

有人建议我放弃当前计划用来保持 Web 服务器同步的极其复杂的自主开发系统,并用 Gluster 取而代之。

哪一个选择更好?

  1. 运行主机操作系统仅有的虚拟机管理程序和存储仅有的VM 磁盘映像。在每个虚拟机内,安装 Gluster 软件,设置指向 VM 磁盘映像内某个文件夹(块)的 GlusterFS 挂载点,并使用该挂载点(或其中的文件夹)作为 Web 根目录。

  2. 运行主机操作系统仅有的虚拟机管理程序和存储两个都VM 映像以及我允许 VM 访问的单独的文件夹(块)。在每个虚拟机内,安装 Gluster 软件,在 VM 磁盘映像外部设置指向块的 GlusterFS 挂载点,并使用该挂载点(或其中的文件夹)作为 Web 根目录。

  3. 让主机操作系统运行虚拟机管理程序和 Gluster。在主机操作系统上,设置一个 GlusterFS 挂载点,指向实际物理磁盘上其他位置的某个文件夹(块)。允许虚拟机以 Web 根目录的形式访问 GlusterFS 挂载点。(无需在虚拟机内安装 Gluster 软件)。

  4. 让主机操作系统运行虚拟机管理程序和 Gluster。在主机操作系统上,设置一个 GlusterFS 挂载点,指向实际物理磁盘上其他位置的某个文件夹(块)。由于两个 Web 服务器应该相同,告诉虚拟机管理程序将虚拟磁盘映像存储在 GlusterFS 挂载点内。

  5. 还有别的吗?

我怀疑比我更了解 Gluster 的人会立即说“如果你选择第 4 项,(会发生一些可怕的事情),并且(其他一些数字)会导致(其他一些可怕的事情)... 因此唯一可行的选择是(唯一剩下的数字)”。 (也就是说,我不认为这是一个主观问题)。

(在 有人可以解释一下这个 GlusterFS 设置吗? 可以适用于任何这些替代方案)。

答案1

除非情况自去年以来有所改变,否则我建议不要在地理位置分散的硬件上使用 glusterfs AFR。它不能很好地处理延迟,并且未指定读取子卷将导致它随机(看似随机,但实际上并非随机)尝试从远程块读取。作为测试,在 gluster 复制中设置两个最延迟的节点,然后尝试touch testfile && time stat testfile在该文件系统上执行此操作,以查看每个 FS 操作至少需要多长时间。即使您指定应用程序不共享,它仍会为您执行锁定检查和一致性检查,这意味着从所有其他副本轮询元数据。

运行上述测试后,如果您仍然想使用 gluster,您可以询问以下内容:

如果您使用 #4,并尝试同时在多个 VM 上安装 VM 映像,那么您将遇到 FS 中的一致性问题。普通 Linux 文件系统根本不处理易失性后备存储。

在我尝试过的每个虚拟化系统中,文件系统直通(如 #2 中的情况)的性能都很差。最好使用 NFS 作为传输方式,而不是 9p virtio (kvm) 之类的东西,或者 vbox 的等效方式;windows-host fs 直通对于 vbox 来说相当糟糕(阅读:缓慢、脆弱),我想 linux 托管的等效方式也类似。即使您确实让 fs 直通工作,它很可能不支持 xattr,而这是 glusterfs 复制所必需的。从历史上看,为扩展属性配置 NFS 一直很麻烦,但使用 NFSv4 可能会更好。这种方法充满了陷阱,我会避免它。

#3 有一些希望。在主机上设置 gluster,然后运行 ​​gluster NFS 客户端侦听器并让 VM 连接到该侦听器。当您发现 A. 不想使用 VM 和/或 B. 不想使用 glusterfs 时,它也是最容易转换的。

1 号同样可行,但与裸机相比没有优势——由于您说它适用于单应用程序系统,因此任何安全优势实际上都被抵消了。就此而言,3 号也不行。唯一的区别在于,您可以使用 Linux 原生驱动程序来处理 glusterfs。您可能需要为该块设置不同的虚拟磁盘,以便在需要重新映像 VM 而无需重新填充块时可以将其分离。

答案2

我想说失去一切。不要用 VirtualBox 虚拟化,也不要使用任何集群/复制文件系统。复杂性层通常就是复杂性、错误、速度减慢和不稳定性层。

保持简单。在裸机上运行 Apache,并使用 NFS 或 rsync 在您的位置之间移动数据。

相关内容