osi*_*2is 23 hardware virtualization zfs storage nexenta
我还是 ZFS 的新手。我一直在使用 Nexenta,但我正在考虑切换到 OpenIndiana 或 Solaris 11 Express。现在,我正在考虑将 ZFS 服务器虚拟化为 ESXi、Hyper-V 或 XenServer 中的客户机(我还没有决定哪一个 - 我倾向于使用 ESXi 来支持 VMDirectPath 和 FreeBSD)。
主要原因是我似乎有足够的资源可以轻松地同时运行 1-3 个其他 VM。主要是 Windows 服务器。也可能是 Linux/BSD VM。我希望虚拟化 ZFS 服务器托管其他 VM 的所有数据,以便它们的数据可以保存在与 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 来宾托管的经验来谈谈这一点吗?
eww*_*ite 38
我已经构建了许多这些“一体式”ZFS 存储设置。最初受到Ubiquitous Talk优秀帖子的启发,我的解决方案对硬件设计采用了略有不同的方法,但产生了封装虚拟化 ZFS 存储的结果。
回答您的问题:
确定这是否是一种明智的方法实际上取决于您的目标。你想达到什么目的?如果您拥有一项技术 (ZFS) 并且正在为其搜索应用程序,那么这是一个坏主意。最好使用适当的硬件 RAID 控制器并在本地 VMFS 分区上运行 VM。这是阻力最小的路径。但是,如果您有想要使用 ZFS 的特定原因(复制、压缩、数据安全性、可移植性等),那么如果您愿意付出努力,这绝对是可能的。
无论您是在裸机还是虚拟机上运行,性能都在很大程度上取决于您的设计。使用PCI 直通(或 AMD IOMMU 在您的情况下)是必不可少的,因为您将提供对 SAS 存储控制器和磁盘的 ZFS VM 直接访问。只要为您的 VM 分配了适当数量的 RAM 和 CPU 资源,性能就接近本机。当然,您的泳池设计很重要。请考虑镜像与 RAID Z2。ZFS 可跨 vdev 扩展,而不是磁盘数量。
我的平台是VMWare ESXi 5,我首选的支持 ZFS 的操作系统是NexentaStor Community Edition。
这是我的家庭服务器。它是通过内部 SD 卡运行 ESXi的HP ProLiant DL370 G6。中间的两个镜像 72GB 磁盘链接到内部 Smart Array P410 RAID 控制器并形成一个 VMFS 卷。该卷包含 NexentaStor VM。请记住,ZFS 虚拟机需要位于稳定存储的某个位置。
有一个LSI 9211-8i SAS 控制器连接到右侧装有六个 1TB SATA 磁盘的驱动器笼。它被传递到 NexentaStor 虚拟机,允许 Nexenta 将磁盘视为 RAID 1+0 设置。这些磁盘是便宜的Western Digital Green WD10EARS驱动器,与修改后的zpool二进制文件正确对齐。
我在此安装中没有使用 ZIL 设备或任何 L2ARC 缓存。

VM 有 6GB 的 RAM 和 2 个 vCPU 分配。在 ESXi 中,如果您使用 PCI 直通,则将为 VM 分配的全部 RAM 创建内存预留。
我为 NexentaStor VM 提供了两个网络接口。一是用于管理流量。另一个是单独的 vSwitch 的一部分,有一个 vmkernel 接口(没有外部上行链路)。这允许 VM 提供可由 ESXi 通过专用网络安装的 NFS 存储。您可以轻松添加上行链路接口以提供对外部主机的访问。
在 ZFS 导出的数据存储上安装新 VM。请务必在 ESXi 中设置“虚拟机启动/关闭”参数。您希望存储 VM 在来宾系统之前启动并最后关闭。

以下是直接在 NexentaStor VM 上运行的bonnie++和iozone结果。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
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
这是一个 NexentaStor DTrace 图,显示了测试运行期间存储 VM 的 IOPS 和传输速率。对于这种低端磁盘,4000 IOPS 和 400+ 兆字节/秒是相当合理的。(虽然块大小很大)

其他注意事项。