将同一个分区挂载到多台虚拟机是否安全?

将同一个分区挂载到多台虚拟机是否安全?

我使用的是带有 Xen Hypervisor 的 ubuntu 20.04。我的机器上有一个 SSD,用于托管我的 VM 映像,还有四个 SATA 驱动器,里面有我的数据。我当前的设置是将数据挂载到我的 domain0 上,然后通过网络文件服务器将该数据提供给其他 VM。

这似乎效率不高,因为所有虚拟机都必须通过我的 NIC 才能访问数据。我是否正确地假设这是一个很大的瓶颈?

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

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

服务器设置数据图

答案1

一般情况下不行,除非你满足两个非常具体的限制之一。要么:

  • 该设备需要以只读方式公开(这必须在所有虚拟机上启用该功能(在设备级别,而不是文件系统级别),并且一定不写信给任何地方在运行时。

或者:

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

一般而言,不支持集群的文件系统被设计为假设它们对其后备存储具有独占访问权限,即除非它们执行某些操作,否则其内容不会更改。如果违反此约束,这显然会导致缓存问题,但实际上情况远比这更糟糕,因为它扩展到文件系统的内部结构,而不仅仅是文件数据。这意味着您可以通过同时在多个节点上安装文件系统来轻松彻底摧毁它。

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


我想指出的是,通过本地网桥的 NFS(实现所需功能的“简单”选项)实际上相当高效。除非您使用相当奇怪的设置或坚持每个 VM 都在其自己的 VLAN 上,否则 NFS 流量永远不会触及您的 NIC,这意味着一切都发生在内存中,因此效率问题很少(特别是如果您为 VM 使用半虚拟化网络)。

理论上,如果您设置了 9P,您可能会获得比 NFS 更好的性能,但所涉及的努力可能不值得(性能差异可能不会太大)。


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

答案2

如果您不在虚拟机内运行集群感知文件系统,那么您将在第一次元数据更新后立即销毁碎片卷。完整的澄清故事在这里:

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

相关内容