将ZFS服务器托管为虚拟访客


23

我还是ZFS的新手。我一直在使用Nexenta,但我正在考虑切换到OpenIndiana或Solaris 11 Express。现在,我正考虑将ZFS服务器虚拟化为ESXi,Hyper-V或XenServer中的客户机(我还没有确定哪个是虚拟机-我倾向于ESXi以支持VMDirectPath和FreeBSD)。

主要原因是看来我有足够的资源来轻松运行1-3个其他VM。通常是Windows Server。也许还有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 guest虚拟机)。我愿意再添加两个磁盘来存储VM guest虚拟机,并将所有当前的七个磁盘分配为ZFS存储。注:主板并没有有IOMMU支持为880G不支持它,但我有一个890FX主板里面确实有IOMMU如果它使一个巨大的差异。

我的问题是:

1)这样做明智吗?我没有看到任何明显的不利因素(这使我想知道为什么没有人提到它)。我觉得我可能会做一个巨大的疏忽,而我不愿意承诺这样做,将所有数据移到另一个位置,只是想念我错过的一些细节。

2)ZFS虚拟客户机性能如何?我愿意降低性能,但我想,如果VM guest虚拟机具有对磁盘的完整磁盘访问权限,那么至少磁盘I / O性能将是微不足道的(与非虚拟化运行ZFS相比) 。任何人都可以从将ZFS服务器作为VM guest虚拟机托管的经验谈起吗?


您说要托管所有其他VM的数据。您是否预见到自己想要重复数据删除?如果是这样,这确实应该在它自己的机器上,因为重复数据删除会占用大量内存。为什么不看看满足您ZFS需求的SmartOS之类的东西呢?这样,您也可以获得虚拟机监控程序。
devicenull 2012年

我曾经考虑过重复数据删除,但是就目前而言,不,我宁愿不使用它。我将研究SmartOS。我还没有听说过,所以我会检查一下。
osij2is 2012年

Answers:


38

我已经构建了许多这些“多合一” 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的成功。

+1。感谢您所提供的所有信息!为了回答您的问题,出于某些原因,我这样做。我主要是在利用其他CPU内核来制作一个或两个其他VM(不使用ZFS),并为我的Opteron虚拟服务器提供iSCSI目标。我选择ZFS的原因是(无特定顺序)压缩,数据安全性和复制。重复数据删除看起来很酷,但是就资源和数据而言,我不确定是否有必要。我现在正在使用Nexenta,但是如果我继续在磁盘上堆积超过18TB的限制,我正在考虑迁移到Solaris Express或OpenIndiana。
osij2is 2012年

因此,我了解您对是否将SSD用于L2ARC或ZIL的评论,我愿意这样做。首先查看性能,然后确定是否添加ZIL和/或ARC。至于镜像与RAIDZ,在阅读您的评论并阅读了此博客文章之后(constantin.glez.de/blog/2010/01/…),我想镜像在这方面略有优势。我实际上并不需要磁盘空间,但是如果我可以拥有一些冗余和快速的读/写功能,我想我会切换到那个。不管我能找到什么存储空间,这都不值得。
osij2is 2012年

另外,请记住压缩是有用的。我为客户系统和任何大于18TB的设备支付商业Nexenta费用。但是,同样的技巧也适用于OpenIndiana。
ewwhite 2012年

您是否正在将E1000 vnic或VMXNet3 vnic用于NFS网络?因为使用类似的设置,我在Nexenta / Solaris和VMware之间仅获得1gbps的速度,无法解决如何提高速度的问题。什么版本的NexentaStor?我怀疑他们当前可用的版本已损坏...
Josh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.