[心得] Hyper-V VM Backup 方式, Replica 的替代

作者: Dino9021 (Dino9021)   2014-09-22 17:36:11
因為一些緣故, 有一座 Hyper-V 叢集跑 DataCenter, 上面會跑好幾十台 VM
但是因為授權的關係, 不能用 Replica 到別台機器上
微軟說, Hyper-V Manager 裡面有多少台 VM 就要計算多少授權
但是每個 VM 的 vhd 都又肥又大, 不能 Replica 的話每天晚上光 Export 就飽了
所以花了點時間研究寫出了兩個 PowerShell 程式利用 CheckPoint 來做差異化備份
請大家參考~
有需要儘管拿去用, 有 Bug 歡迎告訴我
Hyper-V VM Backup 方式, Replica 的替代方案 (自行撰寫 PowerShell 程式)
長網址
http://blog.dino9021.com/2014/09/hyper-v-vm-backup-replica-powershell.html
短網址
http://goo.gl/lUqCNZ
環境:
 1. 唯一一台 Hyper-V, 無法做複寫或叢集
 2. 只有一座 Hyper-V 叢集, 沒有其他 Hyper-V 主機
描述:
 上述狀況都無法進行 Hyper-V 複寫來作為備份策略
 如果用 Export-VM 的話, 若 VM 的 vhd 很大則會佔用大量 Disk I/O
解決方式:
 自行撰寫 PowerShell 程式, 利用 CheckPoint 功能土砲差異化備份
(與 Replica 雷同)
預設條件:
 VM 本身除了備份 Powershell 所建立的 CheckPoint 外不可以有其他 CheckPoint
 註: Production 環境的 VM 本來就不該有 CheckPoint, 會影響運作效率
程式運作邏輯:
 1. 建立 CheckPoint 使 VM 原始 vhd 停止寫入,
新的變更都會寫在 CheckPoint 所建立的差異磁碟 avhd
  且該 CheckPoint 會將當時的記憶體寫入成檔案, 等於 VM Pause
 2. 將上述 CheckPoint 資料複製出來作為備份,
未來就還原該 CheckPoint, 達到備份還原目的
可達到的目標:
 1. 可進行 VM 線上差異化備份, 不用每次備份都 Export, 佔用大量 I/O
 2. 可以在允許 Down Time 較久的前提下手動做不停機 Migration
   與 Export 後再 Import 是一樣的道理, 只是使用的是差異化磁碟
歷史:
 2014.09.24 加入備份檔案檢查機制
程式運作流程:
 初始化:
   1. 檢查 VM 任何 CheckPoint, 沒有就可以進行初始備份
   2. Copy VM 的 xml 檔
   3. 建立 CheckPoint (停止寫入原始 vhd 檔)
   4. 複製 VM 原始 vhd 檔
   5. 產生 CheckPoint 版本檢查檔
(純文字放在備份路徑中, 用以日後判斷差異磁碟版本)
   6. 等待下次備份
 備份:
   1. 檢查是否只有一個 CheckPoint
   2. 檢查該版本是否與 CheckPoint 版本檢查檔中的紀錄相同,
相同就可以進行備份
   3. Copy VM 的 xml 檔
   4. 建立 CheckPoint (停止寫入前一次 CheckPoint Snapshot 中的 vhd 檔)
   5. 複製前一次 CheckPoint 的 差異磁碟 avhd
   6. 複製前一次 CheckPoint 的 Snapshot (xml + bin / vsv)
   7. 產生 CheckPoint 版本檢查檔
(純文字放在備份路徑中, 用以日後判斷差異磁碟版本)
   8. 刪除前一次 CheckPoint
(使 Hyper-V 自動合併, 避免積存太多 CheckPoint 影響效能)
   9. 檢查備份數量, 如果超過所設定的備份數量,
就從最舊的版本開始進行 vhd 合併
  10. 建立備份歷史檔, 記載備份檔案清單、檔案大小、最後修改日期
  11. 等待下次備份
 還原:
  1. 列出備份資料夾中現有 CheckPoint 版本供選擇
  2. 將原始 vhd 檔複製到 Merge 資料夾中
  3. 從最舊的 CheckPoint 版本開始,
至所選擇 CheckPoint 版本的 "前一個版本" 為止
   將每一個版本所備份的差異化磁碟 avhd 檔複製到 Merge 資料夾中
  4. 將上述 avhd 與原始 vhd 依照版本順序 Merge
  5. 將所選擇 CheckPoint 版本的差異化磁碟 avhd 檔
複製到 Merge 資料夾中 (不可以 Merge)
  6. 將所選擇 CheckPoint 版本的 VM xml 複製到 Merge 資料夾中
  7. 將所選擇 CheckPoint 版本的 Snapshot複製到 Merge 資料夾中
  8. 完成, 至 Hyper-V 中 Import 上述 Merge 資料夾
  9. Import 以右鍵點選 CheckPoint 並選擇 Apply 後再開機
  10. 將該 CheckPoint 刪除,
此時會發現 CheckPoint 仍然存在且再次刪除時會發生錯誤
  11. 手動至該還原 VM 的資料夾中將 Snapshot 資料夾中的檔案全部刪除
  12. 重新整理後已沒有任何存在的檢查點,
並且 VM 正以所選擇的 CheckPoint 版本運作中
  13. 重建備份歷史檔, 重新計算原始 vhd 檔案大小、最後修改日期,
刪除已合併的 CheckPoint 歷史資料
  14. 繼續使用 VM, 並重新進行 Backup 策略
程式共兩支:
 Hyper-V VM Backup.ps1
   1. 用來進行備份, 需要帶入 4 個參數:
     -VM [VM名稱]
     -Path [備份目標路徑]
     -RV [備份保留版本數, 數字, 未輸入則預設為 10]
     -CI [CheckPoint 檢查名稱, 如有空格前後要加引號,
未輸入預設為 'Backup Circle By Dino9021']
   2. 用排程執行就好了, 目前沒有撰寫背景等待執行的功能
 Hyper-V VM Restore.ps1
   1. 用來還原, 需要帶入 2 個參數:
     -Path [備份所在路徑, 未輸入的話程式執行時會要求輸入]
     -CI [CheckPoint 檢查名稱, 如有空格前後要加引號,
未輸入預設為 'Backup Circle By Dino9021']
已知問題:
  1. 還原後移除 CheckPoint 要按重新整理才會從 CheckPoint 列表中清除
(應該算 Hyper-V Bug?)
  2. 除了本程式建立的 CheckPoint 之外不可以有其他的 CheckPoint
   要想辦法寫出備份所有的 CheckPoint 也不是不行, 但是很麻煩
   Production 環境的 VM 本來就不該有一堆 CheckPoint
   所以目前並不打算進行這方面的研究
作者: elianfun (藍風)   2014-09-22 21:45:00
推用心分享
作者: lalelee (Yes We Can !)   2014-09-23 11:51:00
很實用!
作者: coflame (吾養吾浩然之氣)   2014-09-23 23:48:00
作者: Dino9021 (Dino9021)   2014-09-24 11:08:00
更新加入備份檔案檢查機制(檔案大小、最後修改時間)還原時會檢查備份歷史中每個檔案上述資訊以確保完整
作者: djpcsixth (排骨麵)   2014-09-24 19:35:00
作者: epenpal (.....)   2014-09-24 22:50:00
標準版2個vm授權、datacenter不計vm授權吧? .
作者: Dino9021 (Dino9021)   2014-09-24 22:56:00
但是如果要 Replica 到另一台上去, 另一台也要有授權啊而且微軟說,管你有沒有開機,在 Manager 裡面就要算數量所以也不能 Replica 到另一台 Standard 上當備份
作者: epenpal (.....)   2014-09-24 23:20:00
是原廠說的嗎? 還是代理商?. 因為replica 的話、另一台一定是關機狀態、這樣怎麼會算兩套.
作者: Dino9021 (Dino9021)   2014-09-25 06:57:00
微軟原廠業務講的,他說即使是關機狀態都要算我說那我如果沒有匯入 VM Manager 呢,他說那就不算,但是只要有VM Manager 的都要算為此我跟他們折騰了幾個禮拜,還要來原廠授權文件看,不過全英文頁數又超多後來懶得看,就信他了微軟一位這樣跟我說:不好意思,因為關機狀態不需要授權只發生在Azure上,所以有誤會。就Windows Server而言,沒有關機狀態就不需要授權這件事情,只要安裝就需要授權,不管是備援或是複寫。回我的這位是業務搞不定我的時候去搬來的救兵要計算的是這台實體機器上面”最多”可能跑多少VM,包含災難發生的時候你可能要把機器fail-over的情境,這是為什麼我說在備援或是複寫的時候,因為這台機器可能會被開啟,所以需要考量他的授權。如果你能夠提供說為什麼要把機器關機放在Hyper-V上的原因,我們可以討論一下這樣的情境下會需要什麼授權。之後他們就不理我了,因為我是個人詢問他們說沒辦法一直回答我假設性的問題,其實我沒有假設啊,根本就是大家實際上會發生的啊 XD
作者: epenpal (.....)   2014-09-25 08:36:00
再怎麼算datacenter就是不算window server的執行個體數兩個CPU的限制剛google了一下、說要有SA才有cold disaster recovery不用對replica複本額外買授權.
作者: Dino9021 (Dino9021)   2014-09-25 15:42:00
問題你還是只有一座 Datacenter 啊你要 Replica 到另一台去, 另一台還是要有授權啊而且如果 Replica 到另一台很多台的話還是要買多套 Standard 或一套 Datacenter你查到的資料可以分享一下一起研究嗎?反正你要裝兩個實體 Datacenter 就要買兩套沒辦法買兩套就不能做 Replica, 就可以用我這個替代方案第二套實體如果授權數不夠也不能 Replica當然如果無視授權當然一點問題都沒有有要符合授權就不能超出授權範圍,Replica的VM也要算進去
作者: xxoo1122 (一個連IE6都能相容的男人)   2014-09-25 20:24:00
看起來這授權請複雜的,小弟我的儲存用DRBD+ISCSI來做HAHypervisior用xenserver 6.2 免授權支援HA
作者: Dino9021 (Dino9021)   2014-09-26 21:54:00
Hyper-V Server 2012 R2 也是全功能免授權授權問題不在 Hypervisior 上

Links booklink

Contact Us: admin [ a t ] ucptt.com