我已经构建了许多这些“多合一” ZFS存储设置。最初受到Ubiquitous Talk上出色文章的启发,我的解决方案在硬件设计上采用了稍有不同的方法,但是产生了封装的虚拟化ZFS存储的结果。
要回答您的问题:
确定这是否是一个明智的方法确实取决于您的目标。你想达到什么目的?如果您拥有一项技术(ZFS)并正在为其寻找应用程序,那么这是个坏主意。您最好使用适当的硬件RAID控制器,并在本地VMFS分区上运行VM。这是阻力最小的途径。但是,如果您有特定的原因想要使用ZFS(复制,压缩,数据安全性,可移植性等),那么如果您愿意付出努力,那么这绝对是可能的。
无论您是在裸机还是虚拟机上运行,性能都在很大程度上取决于您的设计。必须使用PCI直通(或您的情况下为AMD IOMMU),因为您将为ZFS VM提供对SAS存储控制器和磁盘的直接访问。只要为您的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设置。磁盘是el-cheapo 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
# 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。
- 不要使用重复数据删除。压缩是免费的,对于VM来说非常有用。重复数据删除将需要更多的RAM + L2ARC才能有效。
- 在没有SSD的情况下启动,并在必要时添加它们。某些工作负载不会达到ZIL或L2ARC的要求。
- NexentaStor是一个完整的软件包。拥有可靠的管理GUI会有好处,但是我也听说过Napp-It的成功。