將 ZFS 伺服器作為虛擬來賓託管
我還是 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 來賓,並將目前所有 7 個磁碟分配為 ZFS 儲存。注意:主機板不支持IOMMU,因為 880G 不支持它,但我有一塊 890FX 主機板,如果它有很大的不同,它確實有 IOMMU。
我的問題是:
1)這樣做是否明智?我沒有看到任何明顯的缺點(這讓我想知道為什麼沒有人提到它)。我覺得我可能會做一個巨大的疏忽,我不想承諾這樣做,移動我所有的數據只是為了從我錯過的一些微小的細節中去fubar。
- ZFS 虛擬客戶機性能?我願意對性能造成一點影響,但我認為如果 VM 來賓對磁碟具有完整的磁碟訪問權限,那麼磁碟 I/O 性能至少可以忽略不計(與執行非虛擬化的 ZFS 相比) . 任何人都可以根據將 ZFS 伺服器作為 VM 來賓託管的經驗來談談這個問題嗎?
我已經建構了許多這樣的“一體式”ZFS 儲存設置。最初受到Ubiquitous Talk上優秀文章的啟發,我的解決方案在硬體設計上採用了稍微不同的方法,但產生了封裝虛擬化 ZFS 儲存的結果。
要回答您的問題:
- 確定這是否是一種明智的方法實際上取決於您的目標。你想達到什麼目的?如果您擁有一項技術 (ZFS) 並且正在為其搜尋應用程序,那麼這是一個壞主意。您最好使用適當的硬體 RAID 控制器並在本地 VMFS 分區上執行您的虛擬機。這是阻力最小的路徑。但是,如果您有特定的原因想要使用 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 介面(沒有外部上行鏈路)。這允許虛擬機通過專用網路提供 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+ MB/秒是相當合理的。(雖然大塊大小)
其他注意事項。
- 您需要測試您的 SSD 以查看它們是否可以直接呈現給 VM,或者 DirectPath 是否選擇整個主機板控制器。
- 您沒有太多 CPU 能力,因此將儲存單元限制為 2 個 vCPU。
- 除非您確實需要磁碟空間,否則不要使用 RAIDZ1/Z2/Z3。
- 不要使用重複數據刪除。壓縮是免費的,對虛擬機非常有用。重複數據刪除需要更多的 RAM + L2ARC 才能有效。
- 開始時不要使用 SSD,如有必要,請添加它們。某些工作負載不會達到 ZIL 或 L2ARC。
- NexentaStor 是一個完整的軟體包。擁有可靠的管理 GUI 是有好處的,但是,我聽說Napp-It也取得了成功。