在虚拟机内部安装Gluster,或者在Gluster之上build立虚拟机?

我正在build立一个高可用性,无共享的地理分布式Web服务器, 为其域使用多个Alogging 。 现在我更关心高可用性 – “当我拔掉任何一个电源线,每个浏览器仍然可以看到我的网站” – 比速度。

Web服务器软件在每个物理盒子的一个虚拟机内运行。 (是否真的很重要,我正在使用哪个Web服务器和pipe理程序?如果是这样,我目前正在使用Apache和VirtualBox)

有人build议我倾倒我打算用于保持Web服务器同步的当前复杂的本土系统,并用Glusterreplace它。

哪一个更好?

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

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

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

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

  5. 别的东西?

我怀疑一个比我更了解Gluster的人可以立即说:“如果你做了#4,(会发生一些可怕的事情)和(某些其他的数字)原因(其他一些可怕的事情)…所以唯一的select是其实作品是(唯一剩下的数字)“。 (也就是说,我不认为这是一个主观的问题)。

( 有人可以解释这个GlusterFS设置的“优化”可以适用于任何这些替代品)。

除非去年以来事情发生了变化,否则我build议不要在地理位置不同的硬件上使用glusterfs AFR。 它不能很好地处理延迟,如果指定read-subvolume失败将导致它随机(显然是随机的,它不是真正的随机)试图从远程砖读取。 作为一个testing,在gluster复制中设置两个最有潜力的节点,然后尝试touch testfile && time stat testfile该文件系统上的touch testfile && time stat testfile文件,以查看每个FS操作要花费多less时间,最小。 即使你指定你的应用程序是无共享的,它仍然会为你做locking检查和一致性检查,这意味着轮询所有其他副本的元数据。

在运行testing之后,如果你仍然想使用gluster,这是你问的问题:

如果使用#4,并尝试同时在多个虚拟机上挂载虚拟机映像,则会在FS中出现一致性问题。 普通的Linux文件系统根本不处理易失性备份存储。

文件系统透传就像#2在我尝试的每个虚拟化系统中都performance不佳。 使用NFS作为传输,而不是像9p virtio(kvm)或者vbox的等价物那样更好。 对于vbox的Windows主机fs passthrough是相当可怕的(读:慢,脆弱),我想象的是linux托pipe的等价物是相似的。 即使你是通过fs passthrough工作,可能性也不会支持glusterfs复制所要求的xattr。 从历史上看,为扩展属性configurationNFS已经非常痛苦,但是使用NFSv4可能会更好。 这种做法充满了陷阱,我会避免它。

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

#1是同样可行的,但没有裸机的优势 – 任何安全收益都被有效地否定,因为你说这是一个单一的应用系统。 就这一点而言,#3也没有。 唯一的区别就是你可以使用glusterfs的linux本地驱动。 您可能需要为砖块设置不同的虚拟磁盘,以便在需要重新映像虚拟机而无需重新填充砖块的情况下将其分开。

我会说失去一切。 不要使用VirtualBox对此进行虚拟化,也不要使用任何集群/复制文件系统。 复杂层次通常会变成这样的层次,复杂性,错误,减速和不稳定性。

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