将同一个分区挂载到多个 VM 是否安全?

cur*_*ios 22 xen virtual-machines lvm mount

我将 ubuntu 20.04 与 Xen Hypervisor 一起使用。在我的机器上,我有一个 SSD 来承载我的 VM 映像,然后是四个我有数据的 sata 驱动器。我当前的设置是在我的 domain0 上挂载数据,然后通过网络文件服务器将该数据提供给其他 VM。

这似乎效率低下,因为所有 VM 都必须通过我的 NIC 才能访问数据。我认为这是一个大瓶颈的假设是否正确?

在同一物理机中提供数据的行业标准是什么?对此设置有什么建议或改进吗?

在每个 VM 上安装数据 LVM 是否有危害?我对这种方法的担忧是,如果两个 VM 尝试同时访问同一个数据点会发生什么?此设置是否容易受到数据损坏的影响?

服务器设置数据图

Aus*_*arn 37

一般来说,不会,除非您满足两个非常具体的限制之一。任何一个:

  • 该设备需要暴露只读(这必须是在设备层面,而不是文件系统级)到所有的虚拟机,并且不得从写入任何地方在运行时。

或者:

  • 卷必须使用集群感知文件系统进行格式化,并且所有 VM 都必须是集群的一部分(如果需要访问数据,主机系统也是如此)。

通常,不识别集群的文件系统被设计为假设它们对它们的后备存储具有独占访问权限,即除非它们做一些事情来改变它们,否则它的内容不会改变。如果违反此约束,这显然会导致缓存问题,但实际上比这更糟糕,因为它扩展到文件系统的内部结构,而不仅仅是文件数据。这意味着您可以通过将文件系统同时挂载在多个节点上来轻松地完全销毁它。

集群感知文件系统是对此的传统解决方案,它们使用基于网络的锁定或共享存储本身的特殊形式的同步来确保一致性。在 Linux 上,您的选择几乎是 OCFS2 和 GFS2(基于个人经验,我推荐 OCFS2 而不是 GFS2,但 YMMV)。然而,他们需要更多来自集群中所有节点的资源来保持同步。作为一般规则,由于它们强制执行锁定和缓存失效要求,它们对许多工作负载具有显着的性能限制,它们往往涉及大量磁盘和网络流量,并且与传统的单节点相比,它们的功能可能不完整文件系统。


我想指出,通过本地网桥的 NFS(做你想做的事情的“简单”选项)实际上相当有效。除非您使用相当奇怪的设置或坚持每个 VM 都在它自己的 VLAN 上,否则 NFS 流量甚至永远不会触及您的 NIC,这意味着它都发生在内存中,因此几乎没有效率问题(尤其是如果您为 VM 使用半虚拟化网络)。

理论上,如果你设置9P,你可能会得到比NFS更好的性能,但付出的努力可能不值得(性能差异可能不大)。


除此之外,还有第三种选择,但在单台机器上使用它是过度的。您可以设置分布式文件系统,如 GlusterFS 或 Ceph。这实际上可能是最好的选择,如果您的数据本身并不与您的 VM 共存(也就是说,您可能在数据所在的节点以外的节点上运行 VM),因为虽然它不如 NFS 或 9P 高效,但将在基础设施方面为您提供更大的灵活性。


Bar*_*958 19

如果您不在 VM 内运行集群感知文件系统,您只需在第一次元数据更新后立即销毁切碎卷。完整的澄清故事在这里:

https://forums.starwindsoftware.com/viewtopic.php?f=5&t=1392

  • 我想你的意思是“共享”,但这是一个很好的弗洛伊德错别字。 (33认同)
  • 正确的。共享。你说得对,看起来不错,我什至不会编辑我的帖子:) (12认同)