如何有效地与 KVM 来宾共享主机的文件夹?

ger*_*tas 8 storage-area-network qemu kvm-virtualization 9p virtio

我正在配置服务,该服务将 nginx 上传的大量文件存储在主机系统的 /srv/storage 目录中。这些文件由工作 KVM 来宾处理,它们可能会创建新文件或为现有文件分配扩展属性。文件永远不会被覆盖,但最终会被其中一名工作人员删除。

因此主机服务器的文件写入速度约为 177MB/s。KVM 映像是存储在主机文件系统上的 QCOW2 文件,由于此 virtio 设置,映像在 KVM 实例内达到了约 155MB/s:

<driver name='qemu' type='raw' cache='none' io='native'/>
Run Code Online (Sandbox Code Playgroud)

但是我无法为共享文件夹获得这样的结果。我使用virtfs aka virtio 9p获得了最大 40MB/s 的速度。似乎没有挂载的 AIO 等效项:

mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage
Run Code Online (Sandbox Code Playgroud)

我也在想:

  • 没有 NFS - 缺少扩展属性
  • 没有 GlusterFS - 工作但性能比 virtio 差,因为联网,在单个硬件机器上有点矫枉过正,
  • 也许为 r/w 共享 LVM 卷?- 实际上文件夹存储在单独的分区中,但是我在某处读到 LV 不能 r/w 共享,因为这可能会导致 fs 损坏。
  • 将上传的文件保存在 QCOW2 上并让各方共享?
  • 将 nginx 和上传的文件保存在 QCOW2 上的 KVM 实例中,以某种方式与所有客人共享图像?
  • iSCSI - 可以使用单个分区吗?

那么如何使用扩展属性有效地与 KVM 来宾共享主机的文件夹)。

dya*_*sny 0

如果您决定直接或通过 iSCSI 共享 LV 卷,则在没有集群 FS 的情况下,您将无法将其作为读/写共享。如果空间不紧张,您可以共享两个卷,一个在主机上读/写,另一个在来宾上读/写,而另一个对非读/写卷仅具有读取权限。并使这两者与 drbd 或 rsync 保持同步。

相当丑陋,但这就是当你不能使用 NFS 时你所生成的