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

我正在configuration存储大量由nginx上传到/ srv / storage目录中的文件的服务。 这些文件由工作人员KVM来宾处理,可能会创build新文件或将扩展属性分配给现有文件。 文件从不被覆盖,但最终被工作人员删除。

所以主机服务器的文件写入速度约为177MB / s。 KVM镜像是存储在主机文件系统中的QCOW2文件,镜像在KVM实例中达到〜155MB / s,这要归功于这个virtio设置:

<driver name='qemu' type='raw' cache='none' io='native'/> 

但是我无法得到共享文件夹的结果。 我用virtfs又名virtio 9p获得了最高40MB / s。 看起来没有AIO相当于mount:

 mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage 

我也在想:

  • 没有NFS扩展属性丢失
  • 没有GlusterFS – 工作,但性能比virtio差,因为联网,在单个硬件机器上的一种矫枉过正,
  • 可能共享LVM卷r / w? – 实际上该文件夹存储在单独的分区,但是我读了LV不能共享r / w的地方,因为这可能会导致fs腐败。
  • 在QCOW2上保存上传文件并由各方共享?
  • 在QCOW2的KVM实例中保存nginx和上传的文件,以某种方式与所有客人共享图像?
  • iSCSI – 可能与单个分区?

那么如何有效地共享主机的文件夹与扩展属性工作的KVM客人)。

CIFS可以做扩展属性。 您可以在Linux上使用Samba进行设置。

如果您决定直接或通过iSCSI共享LV卷,则无法在没有群集FS的情况下将其共享为r / w。 如果你的空间不足,你可能共享两个卷,一个是主机上的r / w,另一个是客户机上的r / w,而另一个只有非r / w卷上的读取权限。 并保持这两个与drbd或rsync同步。

相当丑陋,但是这是你不能使用NFS的原因

如果您的问题是吞吐量,那么您可能会从增加最大数据包大小中受益。 它默认为8 KiB(msize = 8192)。

最佳值可能需要一些实验,并可能会根据您的使用情况和底层文件系统而有所不同,但是我发现256 KiB(msize = 262144)可以很好地满足我的需要。 吞吐量从〜150 MB / s增加到〜1.5 GB / s。

另见: https : //lime-technology.com/forum/index.php?topic=36345.15

最后,我从KVM切换到支持绑定安装的LXC + Docker容器化。 选定的主机目录被安装在容器内。 由于不涉及networking或翻译,因此性能与主机相同。 此外,多个容器可以一次性写入单个“卷”,而不需要任何独占锁。