Dav*_*ary 2 virtual-machines virtualbox glusterfs
我正在设置一个高可用性的无共享地理分布式 Web 服务器,为其域使用多个 A 记录。现在我更关心高可用性——“当我拔掉任何一根电源线时,每个浏览器仍然可以看到我的网站”——而不是速度。
Web 服务器软件在每个物理机的一台虚拟机内运行。(我使用的 Web 服务器和虚拟机管理程序真的很重要吗?如果是,我目前正在使用 Apache 和 VirtualBox)
有人建议我放弃我计划用来保持 Web 服务器同步的当前极其复杂的自制系统,并用 Gluster 替换它。
这些替代方案中的哪一个更好?
让主机操作系统仅运行管理程序并仅存储VM 磁盘映像。在每个虚拟机内,安装 Gluster 软件,设置指向 VM 磁盘映像内某个文件夹(砖块)的 GlusterFS 挂载点,并使用该挂载点(或其中的文件夹)作为 Web 根目录。
在主机操作系统运行仅在管理程序和存储都在VM图像和单独的文件夹(砖),我让VM访问。在每个虚拟机内,安装 Gluster 软件,设置一个指向 VM 磁盘映像外部砖块的 GlusterFS 挂载点,并使用该挂载点(或其中的文件夹)作为 Web 根目录。
让主机操作系统运行管理程序和 Gluster。在主机操作系统上,设置一个 GlusterFS 挂载点,指向实际物理磁盘上其他地方的某个文件夹(砖块)。允许 VM 作为 Web 根访问 GlusterFS 挂载点。(无需在虚拟机内部安装 Gluster 软件)。
让主机操作系统运行管理程序和 Gluster。在主机操作系统上,设置一个 GlusterFS 挂载点,指向实际物理磁盘上其他地方的某个文件夹(砖块)。由于两个 Web 服务器应该是相同的,因此告诉虚拟机管理程序将虚拟磁盘映像存储在 GlusterFS 挂载点内。
还有什么?
我怀疑比我更了解 Gluster 的人会立即说“如果你做 #4,(一些可怕的事情会发生),和(其他一些数字)原因(其他一些可怕的事情)......所以唯一的选择是实际有效的是(唯一剩余的数字)”。(即,我不认为这是一个主观问题)。
(“有人可以解释这个 GlusterFS 设置吗? ”中提到的“优化” 可以适用于这些替代方案中的任何一个)。
除非自去年以来情况发生了变化,否则我建议不要在地理位置不同的硬件上使用 glusterfs AFR。它不能很好地处理延迟,并且未能指定 read-subvolume 将导致它随机(显然是随机的,它不是真正的随机)尝试从远程砖块读取。作为测试,在 gluster 复制中设置两个最隐蔽的节点,然后尝试touch testfile && time stat testfile
在该文件系统上查看每个 FS 操作将花费多长时间,最少。即使你指定你的应用程序是无共享的,它仍然会为你做锁检查和一致性检查,这意味着从所有其他副本轮询元数据。
运行上述测试后,如果您仍然想使用 gluster,这就是您所问的:
如果您使用 #4,并尝试同时在多个 VM 上挂载 VM 映像,则会在 FS 中遇到一致性问题。普通 Linux 文件系统根本不处理易失性后备存储。
在我尝试过的每个虚拟化系统中,#2 中的文件系统直通性能都很差。你最好使用 NFS 作为传输,而不是像 9p virtio (kvm) 或 vbox 的任何等价物;用于 vbox 的 windows-host fs passthrough 相当糟糕(阅读:缓慢,脆弱),我想 linux 托管的等效项是相似的。即使您确实让 fs passthrough 工作,它也很可能不支持 glusterfs 复制所需的 xattr。从历史上看,为扩展属性配置 NFS 一直很痛苦,但使用 NFSv4 可能会更好。这种方法充满陷阱,我会避免它。
#3 有一些承诺。在主机上设置 gluster,然后运行 gluster NFS 客户端侦听器并让 VM 连接到该侦听器。当您发现 A. 不想使用 VM 和/或 B. 不想使用 glusterfs 时,它也是最容易转换的。
#1 同样可行,但与裸机相比没有优势——任何安全增益都被有效地抵消了,因为你说它是针对单个应用程序系统的。就此而言,#3 也没有。与此唯一的区别是您可以将 linux 本机驱动程序用于 glusterfs。您可能希望为砖块设置不同的虚拟磁盘,以便在需要重新映像 VM 而不重新填充砖块时可以将其分离。