使用 ZFS SAN 處理 XenServer 快照和複製
我計劃設置一台 XenServer 機器,它使用基於 NexentaOS/ZFS 的 SAN 通過 iSCSI 儲存虛擬磁碟映像 (VDI)。我知道我可以在 SAN 上設置一個大型儲存庫 (SR),讓 XenServer 負責快照和複製磁碟映像。但是,出於以下幾個原因,我希望更多地利用 ZFS 的強大功能並將其用於快照/複製:
- 我不確定 XenServer 的快照/複製是如何工作的,但如果它基於 LVM,我擔心在處理多個快照時會遇到問題。不久前,我使用相同數據的多個 LVM 快照進行了一些實驗,性能似乎很差,並且快照浪費了很多空間。ZFS 快照似乎遠優於 LVM 快照。
- SAN 將自動(且高效)定期生成 ZFS 快照,這些快照可能會及時返回,我希望能夠將 VM 恢復為此類 ZFS 快照。
讓 ZFS 處理快照/複製而不是通過 XenServer 來處理是可取的,如果是這樣,最好的方法是什麼?如果我將所有 VDI 放在一個大型 SR 中,並為整個 SR 拍攝 ZFS 快照,我將無法一次回滾單個 VM。我可以為每個 VDI 創建一個 SR,如果我必須回滾 VDI,我會小心地分離 SR,在 SAN 上回滾,然後重新連接它。但是,我猜如果 XenServer 檢測到重複的 SR UUID,我在附加複製的 SR 時會遇到問題。有沒有更好的方法來處理從 SAN 複製或回滾到以前的快照?
正如其他答案所暗示的那樣,理想的方法是 LUN-per-VDI。起初看起來不可能這樣做,但是有一個未記錄的“iscsi”SR 驅動程序將創建一個 LUN-per-VDI SR(我在查看 /opt/xensource/sm 目錄時發現了這個- 參見 ISCSISR.py 文件)。您基本上為每個 iSCSI 目標設置一個 SR,XenServer 為該目標上的每個 LUN 創建 VDI。您只能通過命令行進行設置,包括創建 VBD 並將其附加到 VM。VBD 和 VDI 甚至不會出現在 XenCenter 中。
這是一個設置它的範例命令:
xe sr-create name-label=san type=iscsi device-config:target=<IP address of target> device-config:targetIQN=<IQN of target> shared=true
這將自動為每個 iSCSI LUN 創建一個 VDI。如果您最終在 SAN 上添加了新的 iSCSI LUN,XenServer 將在執行以下命令後為其添加新的 VDI:
xe sr-scan uuid=<UUID of SR>
這也適用於為複製的 LUN 添加 VDI - 新的 VDI 被分配一個新的 UUID。
此外,如果您最終調整 LUN 的大小,XenServer 不會自動處理該問題,因此您必須執行以下操作:
xe vdi-forget uuid=<UUID of VDI that you resized> iscsiadm -m node -R xe sr-scan uuid=<UUID of SR>
並創建 VBD 並將其附加到 VM:
xe vbd-create vm-uuid=<UUID of VM> device=<VBD device #, e.g. 0> vdi-uuid=<VDI of UUID>