我还是ZFS的新手。 我一直在使用Nexenta,但我正在考虑切换到OpenIndiana或Solaris 11 Express。 现在,我正考虑将ESX / ESXi,Hyper-V或XenServer中的ZFS服务器作为guest虚拟机进行虚拟化(我还没有决定哪一个 – 我倾向于ESXi来支持VMDirectPath和FreeBSD)。
主要的原因是,似乎有足够的资源可以让我轻松地同时运行1-3个其他虚拟机。 主要是Windows服务器。 也许是Linux / BSD虚拟机。 我希望虚拟化的ZFS服务器托pipe其他虚拟机的所有数据,这样它们的数据可以保存在与ZFS磁盘物理上分离的磁盘上(以iSCSI或NFS的forms安装)。
该服务器目前有一个AMD Phenom II,总共有6个核心(2个解锁),16GB RAM(最大输出)和一个LSI SAS 1068E HBA(7个)1TB SATA II磁盘(规划在RAIDZ2上,带有热备份)。 我也有(4)32GB的SATA II固态硬盘连接到主板。 我希望将两个SSD镜像到一个引导镜像(对于虚拟主机),并将另外两个SSD留给ZIL和L2ARC(对于ZFS VM来宾)。 我愿意添加两个磁盘来存储VM guest,并将所有七个当前磁盘分配为ZFS存储。 注意:主板没有IOMMU支持,因为880G不支持,但是我确实有一个890FX主板,如果它有很大的区别的话,它有IOMMU。
我的问题是:
1)这样做是明智的吗? 我没有看到任何明显的缺点(这让我想知道为什么没有人提到它)。 我觉得我可以做一个巨大的监督,我不愿意承诺这个,移动我的所有数据,只是从我错过了一些细节的fubar。
2)ZFS虚拟客人performance? 我愿意尝试一个小的性能,但是我认为,如果VM guest虚拟机有磁盘的完整磁盘访问权限,至less磁盘I / O性能可以忽略不计(与运行非虚拟化的ZFS相比) 。 任何人都可以从托pipeZFS服务器作为虚拟机客户的经验谈到这一点?
我已经构build了一些“一体化”ZFS存储设置。 最初受到Ubiquitous Talk优秀文章的启发,我的解决scheme采用了与硬件devise稍有不同的方法,但是产生了封装的虚拟化ZFS存储的结果。
回答你的问题:
确定这是否是一个明智的方法真的取决于你的目标。 你想完成什么? 如果你有一个技术(ZFS),并正在寻找一个应用程序,那么这是一个坏主意。 最好使用适当的硬件RAID控制器,并在本地VMFS分区上运行虚拟机。 这是阻力最小的path。 但是,如果您有特定的原因想要使用ZFS(复制,压缩,数据安全性,可移植性等),那么如果您愿意付出努力,这绝对是可能的。
性能很大程度上取决于您的devise,无论您使用的是裸机还是虚拟机。 使用PCI-passthrough (或您的案例中的AMD IOMMU)是必不可less的,因为您将提供您的ZFS VM直接访问SAS存储控制器和磁盘。 只要您的VM分配了适量的RAM和CPU资源,性能就接近本机。 当然,你的泳池devise很重要。 请考虑镜像与RAID Z2。 ZFS 跨越vdevs而不是磁盘的数量 。
我的平台是VMWare ESXi 5 ,我的首选ZFSfunction的操作系统是NexentaStor Community Edition 。
这是我的家庭服务器 。 这是运行ESXi的HP ProLiant DL370 G6内置SD卡。 中间的两个镜像72GB磁盘连接到内部Smart Array P410 RAID控制器,形成一个VMFS卷。 该卷容纳NexentaStor虚拟机。 请记住,ZFS虚拟机需要在稳定存储的某个地方居住。
有一个LSI 9211-8i SAS控制器连接到驱动器仓,右侧有六个1TB SATA磁盘。 它传递给NexentaStor虚拟机,允许Nexenta将这些磁盘视为RAID 1 + 0设置。 这些磁盘是西部数据绿色WD10EARS驱动器与修改后的zpool
二进制文件正确alignment 。
在此安装中,我没有使用ZIL设备或任何L2ARCcaching。
VM有6GB RAM和2个vCPU。 在ESXi中,如果使用PCI-passthrough,将为虚拟机分配的RAM的全部数量创build内存预留。
我给NexentaStor VM两个networking接口。 一个是pipe理stream量。 另一个是单独的vSwitch的一部分,并有一个vmkernel接口(没有外部上行链路)。 这允许VM通过专用networking提供可由ESXi安装的NFS存储。 您可以轻松添加上行链路接口来提供对外部主机的访问。
在ZFS导出的数据存储上安装新的虚拟机。 确保在ESXi中设置“虚拟机启动/closures”参数。 您希望存储虚拟机在来宾系统之前启动并最后closures。
以下是直接在NexentaStor虚拟机上运行的bonnie ++和iozone结果。 ZFS压缩closures,testing显示更多的可关联的数字,但实际上,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图,显示testing运行期间存储虚拟机的IOPS和传输速率。 对于这样的低端磁盘,4000 IOPS和400+兆字节/秒是相当合理的。 (虽然大块大小)
其他说明。