我对 ZFS 还不熟悉。我一直在使用 Nexenta,但我正在考虑切换到 OpenIndiana 或 Solaris 11 Express。现在,我正在考虑将 ZFS 服务器虚拟化为 ESXi、Hyper-V 或 XenServer 中的客户机(我还没有决定使用哪一个 - 我倾向于使用 ESXi 以获得 VMDirectPath 和 FreeBSD 支持)。
主要原因是我似乎有足够的资源,可以轻松同时运行 1-3 个其他虚拟机。主要是 Windows Server。也可能是 Linux/BSD VM。我希望虚拟化的 ZFS 服务器托管其他虚拟机的所有数据,以便它们的数据可以保存在与 ZFS 磁盘物理上分开的磁盘上(作为 iscsi 或 nfs 安装)。
该服务器目前配备 AMD Phenom II,总共 6 个内核(2 个未锁定)、16GB RAM(已满)和 LSI SAS 1068E HBA,连接了 (7) 个 1TB SATA II 磁盘(计划使用带热备用的 RAIDZ2)。主板上还连接了 (4) 个 32GB SATA II SSD。我希望将两个 SSD 镜像到启动镜像(用于虚拟主机),将其他两个 SSD 留给 ZIL 和 L2ARC(用于 ZFS VM 来宾)。我愿意再添加两个磁盘来存储 VM 来宾,并将所有七个当前磁盘分配为 ZFS 存储。注意:主板确实不是有 IOMMU 支持,因为 880G 不支持它,但是我确实有一个 890FX 主板,它有 IOMMU,如果它有很大的不同。
我的问题是:
1) 这样做明智吗?我看不出有什么明显的缺点(这让我很纳闷为什么没有其他人提到这一点)。我觉得我可能会犯下巨大的疏忽,我不愿意犯这样的错误,我把所有的数据都移走,结果却因为我错过的一些微小细节而陷入困境。
2) ZFS 虚拟客户机性能?我愿意承受一点性能损失,但我认为如果 VM 客户机对磁盘具有完全磁盘访问权限,那么至少磁盘 I/O 性能可以忽略不计(与运行非虚拟化的 ZFS 相比)。有将 ZFS 服务器作为 VM 客户机托管的经验的人可以谈谈这个问题吗?
答案1
我已经构建了许多这样的“一体化” ZFS 存储设置。最初受到以下优秀帖子的启发:无处不在的谈话,我的解决方案采用了略有不同的硬件设计方法,但产生了封装虚拟化 ZFS 存储的结果。
回答您的问题:
确定这是否是一种明智的方法实际上取决于您的目标。您想要实现什么目标?如果您拥有一项技术 (ZFS) 并且正在寻找其应用程序,那么这是一个坏主意。您最好使用合适的硬件 RAID 控制器并在本地 VMFS 分区上运行您的虚拟机。这是阻力最小的路径。但是,如果您有特定的原因想要使用 ZFS(复制、压缩、数据安全、可移植性等),那么如果您愿意付出努力,这绝对是可能的。
无论是在裸机还是虚拟机上运行,性能在很大程度上取决于你的设计。使用PCI 直通(或 AMD IOMMU,就您而言)是必不可少的,因为您将为您的 ZFS VM 提供对 SAS 存储控制器和磁盘的直接访问。只要您的 VM 分配了适当数量的 RAM 和 CPU 资源,性能就接近原生。当然,您的池设计很重要。请考虑镜像与 RAID Z2。ZFS跨 vdev 扩展,而不是磁盘数量。
我的平台是VMWare ESXi 5我首选的支持 ZFS 的操作系统是NexentaStor 社区版。
这是我的家庭服务器。 它是一个HP ProLiant DL370 G6从内部 SD 卡运行 ESXi。中心的两个镜像 72GB 磁盘链接到内部智能阵列 P410 RAID 控制器并形成 VMFS 卷。该卷包含一个 NexentaStor VM。请记住,ZFS 虚拟机需要实时某处稳定储存。
有一个LSI 9211-8i SAS 控制器连接到右侧装有六个 1TB SATA 磁盘的驱动器笼。它被传递到 NexentaStor 虚拟机,允许 Nexenta 将磁盘视为 RAID 1+0 设置。这些磁盘非常便宜西部数据绿盘WD10EARS驱动器正确对齐使用修改后的zpool
二进制文件。
我没有在此安装中使用 ZIL 设备或任何 L2ARC 缓存。
VM 分配了 6GB RAM 和 2 个 vCPU。在 ESXi 中,如果您使用 PCI 直通,则会为 VM 分配的全部 RAM 创建内存预留。
我为 NexentaStor VM 提供了两个网络接口。一个用于管理流量。另一个是单独 vSwitch 的一部分,并具有 vmkernel 接口(没有外部上行链路)。这允许 VM 通过私有网络提供可由 ESXi 安装的 NFS 存储。您可以轻松添加上行链路接口以提供对外部主机的访问。
在 ZFS 导出的数据存储上安装新虚拟机。务必在 ESXi 中设置“虚拟机启动/关闭”参数。您希望存储虚拟机在客户系统之前启动并最后关闭。
这里有邦尼++和碘直接在 NexentaStor VM 上运行的结果。测试中 ZFS 压缩已关闭,以显示更多相关数字,但实际上,ZFS 默认压缩(不是 gzip)应该总是被启用。
# bonnie++ -u root -n 64:100000:16:64
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
saint 12G 156 98 206597 26 135609 24 410 97 367498 21 1478 17
Latency 280ms 3177ms 1019ms 163ms 180ms 225ms
Version 1.96 ------Sequential Create------ --------Random Create--------
saint -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
64:100000:16/64 6585 60 58754 100 32272 79 9827 58 38709 100 27189 80
Latency 1032ms 469us 1080us 101ms 375us 16108us
# iozone -t1 -i0 -i1 -i2 -r1m -s12g
Iozone: Performance Test of File I/O
Run began: Wed Jun 13 22:36:14 2012
Record Size 1024 KB
File size set to 12582912 KB
Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Throughput test with 1 process
Each process writes a 12582912 Kbyte file in 1024 Kbyte records
Children see throughput for 1 initial writers = 234459.41 KB/sec
Children see throughput for 1 rewriters = 235029.34 KB/sec
Children see throughput for 1 readers = 359297.38 KB/sec
Children see throughput for 1 re-readers = 359821.19 KB/sec
Children see throughput for 1 random readers = 57756.71 KB/sec
Children see throughput for 1 random writers = 232716.19 KB/sec
这是 NexentaStor DTrace 图表,显示了测试运行期间存储 VM 的 IOPS 和传输速率。对于这种低端磁盘,4000 IOPS 和 400+ 兆字节/秒是相当合理的。(但块大小很大)
其他说明。
- 您需要测试您的 SSD 以查看它们是否可以直接呈现给 VM 或者 DirectPath 是否选择整个主板控制器。
- 您的 CPU 能力不够,因此将存储单元限制为 2 个 vCPU。
- 除非您确实需要磁盘空间,否则不要使用 RAIDZ1/Z2/Z3。
- 不要使用重复数据删除。压缩是免费的,对虚拟机非常有用。重复数据删除需要更多的 RAM + L2ARC 才能有效。
- 开始时不要使用 SSD,必要时再添加。某些工作负载不要点击 ZIL 或 L2ARC。
- NexentaStor 是一个完整的软件包。拥有一个可靠的管理 GUI 是有好处的,但是,我听说使用纳普也一样。