背景
我使用 Ubuntu 16.04.4 LTS(从桌面转换为服务器),安装在 ZFS 文件系统上,而 ZFS 文件系统本身位于三星 840 Evo 120 GB SSD 上。我还有四块 HDD,其中两个镜像(1 TB 和 2 TB 镜像)也是 ZFS。
我使用该系统进行存储,也进行虚拟化。我在 Ubuntu 上使用 KVM 虚拟化,对于其中一台虚拟机,我将虚拟机操作系统磁盘映像(安装在“/”)存储在 SSD 上,将存储磁盘映像(安装在“/home”)存储在 1TB HDD 镜像上。
系统有 16 GB ECC RAM,SSD 上有 8GB SWAP 卷(ZLE 压缩)。VM 设置为 8192 MB,因此加上主机上的其他服务,它为 ZFS ARC 提供了大约 7.8 GB。
我注意到,当将虚拟机中的大量数据写入虚拟机磁盘映像时,ZFS ARC 的大小会大幅增加。虽然这是 ARC 的预期行为,因为数据正在被访问,但我确实有一些关于使用 ZFS 存储和使用虚拟机映像的问题,下面我不太确定。
案件
请注意以下事项:
- VM 磁盘映像没有存储任何重要数据 - 它们仅用于托管和实验,因此完整性并不那么重要;
- 磁盘映像存储在文件系统内的文件系统中 - 因此,如果目录是“/MyMirror/VM/”,则“MyMirror”是初始文件系统,而后者(“VM”)是其中的文件系统;
- 磁盘映像为 RAW 格式 (*.img)。
问题
考虑到上述情况并考虑案例......
- 与 ext4 相比,在 ZFS 中拥有 VM 磁盘映像实际上有什么好处吗?
- ARC 缓存 VM 磁盘映像是否有任何逻辑原因/好处?
- 我做得对吗?
目前,第 2 点最让我困惑,因为我很难理解 ARC 缓存磁盘映像的逻辑和任何潜在好处。我可能完全没有抓住重点(也许是头脑混乱),但在主机上缓存磁盘映像如何帮助主机甚至虚拟机本身?
我知道第 3 点可能更多的是个人意见(我想避免),但我不确定我是否以“正确”的方式处理这个问题。考虑到我的设置,也许有更好的方法来存储和使用虚拟机。
提前致谢!
答案1
- 使用 ZFS 作为虚拟机磁盘存储有什么好处吗?
有可能。ZFS 具有内置压缩、重复数据删除、快照和克隆以及许多其他功能,您可以使用这些功能来减少存储空间,更轻松地将这些文件系统复制到另一个系统等等。这真的取决于您的用例。不是狂热分子 ;),但也许在需要时可以灵活地使用这些功能就足以说“是”了?
- ARC 能做什么有用的事吗?
从您所说的内容来看,我无法判断您是否拥有大量虚拟机,如果是,它们是否彼此共享任何块(通过快照/克隆或通过重复数据删除)。如果是这样,缓存可以为您带来好处,因为在一个虚拟机中拥有热数据将有利于所有其他虚拟机的性能。如果不是,好处可能微乎其微,因为客户操作系统通常有一个页面缓存,其中包含它们读取或写入的所有内容。但是,如果您的主机操作系统有任何压力,这些内存将被迅速驱逐,因为它只会被访问一次(并且将位于 ARC 中的 LRU 列表中),所以我不会担心浪费空间。
- 我做得对吗?
完全取决于您的用例。对于您描述的简单情况,这似乎没问题,但话又说回来,几乎任何事情都可以。如果您尝试为大型虚拟机场构建存储设备:
- 你可以考虑使用 ZFS ZVOL 作为存储,而不是 ZFS 文件系统内的文件
- 您可能会在与存储不同的服务器上运行虚拟机(这样您就可以更轻松地扩展 RAM 和 CPU,并且可以将存储性能与虚拟机性能隔离);在这种情况下,您可以将 ZVOL 公开为 iSCSI 或光纤通道目标
- 为了提高性能,您可能需要添加更多 RAM,启用重复数据删除和压缩以节省存储空间(在 RAM 和磁盘上),添加专用的 SLOG 设备以实现更快的同步写入,添加 L2ARC 设备以将缓存扩展到 SSD
- 为了实现数据弹性,您可能需要启用 RAID-Z 或类似功能
- 为了允许维护停机时间,您可能需要另一个待机的存储主机,您可以使用
zfs send
和将数据复制到zfs receive
该主机,然后以某种方式切换 VM 主机以指向新位置(或者可能是其他故障转移方式;这只是一种选择)
如果情况足够严重,您可以随意将部署复杂化。但是,如果您对系统当前的运行方式没有任何不满,那么保持原样又有什么坏处呢?