網管人雜誌
本文刊載於 網管人雜誌第 85 期 - 2013 年 2 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。文章目錄
1、前言2、實作環境
3、快照機制(Snapshot)
4、自動化備份腳本(ghettoVCB.sh)
5、下載自動化備份腳本
6、通用設定檔 ghetthVCB.conf
7、線上備份 VM 虛擬主機
8、結語
1、前言
在先前的文章當中(第 77 期),我們介紹了可以於 ESX 虛擬化平台中利用內建的 vcbMounter 及 vcbRestore 指令,呼叫 VCB(VMware Consolidated Backup)以及快照(Snapshot)機制,來達成線上備份運作中的 VM 虛擬主機的目的,然而這些指令欲僅內建於具備 COS(Service Console)的 ESX 虛擬化平台當中。
從 VMware vSphere 5.0 版本開始便再也沒有 ESX 虛擬化平台了,從這個版本開始到目前的最新版本 VMware vSphere 5.1 以及日後的更新版本,也都只會發行 ESXi 虛擬化平台而以,因此先前文章所介紹的 vcbMounter 及 vcbRestore 指令也不存在於 ESXi 虛擬化平台當中。
您當然還是可以將 VM 虛擬主機關機後利用 Export OVF/OVA Template 的方式,來達成備份 VM 虛擬主機的目的,但是如果您希望能夠為線上運作中的 VM 虛擬主機進行備份時該如何達成? 這便是本文所要介紹的線上備份(Online Backup)方式。
VMware 社群中的熱心人士同時也是 VMware vExpert 專家的 William Lam,撰寫出可以同時運作於 ESX 及 ESXi 虛擬化平台的備份腳本「ghettoVCB.sh」,此備份本為採用類似早期 VMware 的備份機制 VCB 所達成(目前 VMware 主流備份機制為透過 vStorage APIs for Data Protection),因此您也可以將此備份腳本運用於免費版本的 VMware vSphere Hypervisor 虛擬化平台上。
圖1、VCB(VMware Consolidated Backup)備份機制
2、實作環境
- 虛擬化技術平台: VMware vSphere ESXi 5.1.0(838463)
- 連線管理軟體: VMware vSphere Client(860230)
- 自動化備份腳本: ghettoVCB.sh
- SSH Client: putty.exe
3、快照機制(Snapshot)
「快照(Snapshot)」機制在 VMware vSphere 許多產品當中都有運用此機制,例如 VMware Data Recovery、VMware Lab Manager、Storage vMotion...等,此快照機制能夠在特定的時間點保留 VM 虛擬主機的 狀態(State)及 資料(Data),以 VM 虛擬主機的電源狀態來說的話便是包括了 開機(Powered-On)、關機(Powered-Off)、暫停(Suspended)等狀態,若是以資料來看的話則包含了 虛擬硬碟(Virtual Disk)、虛擬記憶體(Virtual Memory)、虛擬網路卡(Virtual Network Adapter)、其它虛擬裝置(Virtual Devices)等。
圖2、快照機制 - 針對當時 VM 虛擬主機的狀態及資料進行暫時凍結
當 VM 虛擬主機建立快照時還有幾個要考量的部份,首先對於 VM 虛擬主機當中的虛擬記憶體狀態(Virtual Memory State)是否也需要快照,若是備份的 VM 虛擬主機其運作的服務為資料庫類型時,那麼就強烈建議必須要一起快照虛擬記憶體狀態,否則當執行快照回復作業時便會發生 VM 虛擬主機無法順利運作的問題,不過理所當然的是若需要備份虛擬記憶體狀態則所花費的快照時間也較長。
此外就是「暫停(Quiesce)」機制,ESX(i)虛擬化平台透過 VMware Tools 工具,來暫時停止 VM 虛擬主機中的檔案系統,使 Guest OS 可以將相關的緩衝資料(Buffers)以及虛擬記憶體中的快取資料(Cache),順利的寫回 Guest OS 的虛擬磁碟當中以保持資料的一致性以及可用性。
圖3、快照機制結合了虛擬記憶體(Memory)狀態以及暫停(Quiesce)機制
快照機制啟用時會參考原本的虛擬硬碟檔案 -flat.vmdk 內容,接著建立出與原來虛擬硬碟檔案差異內容的 .vmdk 及 -delta.vmdk 檔案,此機制所產生的虛擬硬碟檔案稱為 子磁碟(Child Disks),但是若再次執行快照時原本的子磁碟將會變成另一個子磁碟的參考父磁碟(Parent Disks)。
此外還會建立 .vmsd 檔案,此檔案內容為記錄 VM 虛擬主機的快照資訊以及主要來源資訊,也就是記錄了每個子磁碟以及快照與快照之間的關聯性。最後則是 .vmsn 檔案,此檔案內容為這些快照檔案中所包含的虛擬記憶體狀態時間。
圖4、虛擬主機快照機制運作流程圖
4、自動化備份腳本(ghettoVCB.sh)
ghettoVCB.sh 線上備份自動化執行腳本,可以運作於 ESX(i)3.5 / 4.x / 5.x 版本的虛擬化平台上,此備份腳本若運作於 ESX 虛擬化平台時為透過 Service Console(COS)運作,若是運作於 ESXi 虛擬化平台時則是透過 Tech Support Mode(Busybox Console)來運作備份機制。
ghettoVCB.sh 備份腳本並不像早期傳統 VMware VCB 備份機制是採用 VCB Proxy 的方式,當備份腳本開始運作時,會先針對 VM 虛擬主機進行快照(Snapshot)的動作保持其虛擬主機狀態,但是此快照檔案在當備份作業執行完成之後便會自動刪除。
此備份腳本支援將備份後的檔案儲存至 「Local Storage、SAN(iSCSI / FC)、NFS、RDM」等儲存設備上,並且它的備份流程並不是採用互動式(也就是不需要於備份過程中輸入密碼或手動指定備份裝置…等),因此它可以結合系統排程的方式自動化的執行備份作業,並且允許配合備份清單的方式(寫入要備份的 VM 虛擬主機名稱),以便僅僅備份運作於虛擬化平台上某些重要 VM 虛擬主機即可而不用全部備份,同時也可以為每台 VM 虛擬主機制定不同的備份策略,例如 不同的虛擬主機備份至不同的儲存設備及資料夾當中。
以下為 ghettoVCB.sh 自動化備份腳本的功能特色:
- 支援線上備份 VM 虛擬主機(Online Backup)
- 支援具有多個 VMDK 虛擬硬碟檔案的 VM 虛擬主機
- 只會備份有效 VMDK 虛擬硬碟檔案的 VM 虛擬主機
- 對於備份關機或開機中無回應的虛擬主機可以選擇放棄嘗試備份時間(timeout)
- 允許備份腳本執行在虛擬主機備份名單中(但是並不建議此作法因為它並不是一個好的作法)
- 每次只會備份一台 VM 虛擬主機,並且當前一台 VM 虛擬主機備份作業完成並且刪除快照檔案之後,才會開始進行下一台 VM 虛擬主機的備份作業
- 執行備份作業時對虛擬主機所建立的快照不會備份保留(避免佔用不必要的備份空間)
- 可指定要保留虛擬主機的備份數量,例如 設定保留三次備份,則產生第四份的備份檔案時則會刪除第一次的備份檔案
- 虛擬主機備份檔案預設採用 Lazy Zeroed Thick 硬碟格式,可另外選擇使用 2GB SPARSE、Thin、Eager Zeroed Thick 等硬碟格式
- 支援 IDE / SCSI 格式的虛擬硬碟
- 支援自動掛載及自動卸載 NFS 儲存設備機制(備份執行前自動掛載,備份完成後自動卸載)
- 支援備份後的 VMDK 檔案儲存在多個儲存資源 DataStore 當中
- 支援針對不同的 VM 虛擬主機採用不同的備份策略
- 可以 指定(Include List)或 排除(Exclusion List)特定的 VM 虛擬主機進行備份作業
- 支援將備份過程輸出到日誌檔上(預設存放於 /tmp 路徑下)
- 對於 VM 虛擬主機 關機(Shutdown) / 快照(Snapshot)可以調整放棄嘗試時間(timeouot)
- 可以設定 VM 虛擬主機快照記憶體大小預設值
- 支援 模擬運行(Dry Run)模式以模擬實際備份時所遭遇的情況,例如 虛擬主機已經建立快照、或者 VMDK 為 Independent 磁碟、以及其它影響備份的原因
- 支援 除錯(Debug)模式以便得到更多關於儲存環境及備份過程中相關資訊以協助找到問題
- 支援將 VM 虛擬主機備份至 RDM 儲存裝置
- 支援採用 通用設定檔(ghettoVCB.conf)或者自行指定設定檔
- 支援一次備份所有在 ESX(i)虛擬化平台上運作的 VM 虛擬主機(僅限單台 Host)
- 具備鎖定機制,以確保 ESX(i)平台上同一時間只會運作一個備份腳本(避免互相干擾)
- 備份腳本會記錄執行時的 PID(Process ID)
此備份腳本的撰寫者 William Lam 仍然持續改善及增加相關功能當中,若您對於此備份腳本有任何問題或建議可以到 VMware 社群進行討論,目前此備份腳本實驗中的新功能如下所述:
- 支援備份檔案壓縮: 針對 ESXi 3.x 平台上超過 4GB,以及 ESXi 4.x 平台上超過 8GB 的虛擬主機備份進行壓縮,使用時不要將未壓縮與壓縮的虛擬主機混合在一起進行備份,並且應該要確保備份目錄中不包含任何舊版的備份,因為此功能還在開發實驗階段在某些狀況下還原時會有問題,因此若啟用此功能記得測試能否順利還原。
- 支援 E-Mail 備份日誌: 支援當備份作業完成後,透過 E-Mail 郵件伺服器發送備份過程日誌檔(Log)至指定的管理者信箱中,必須要 ESX(i)4.1 平台版本(含)之後才支援此功能,並且因為採用的寄送郵件工具是 nc(netcat),因此可能無法相容所有的郵件伺服器。
- 支援 Rsync 同步機制: 支援備份作業完成後採用 Rsync 同步機制,將備份檔案同步至遠方儲存設備中達到異地備援的目的。
- 2GB SPARSE 硬碟格式: 如果虛擬化平台版本是 ESXi 5.1 的話,由於效能上的考量因此預設已經不支援 2gbsparse 硬碟格式,您必須要先手動載入 multiextent module 才行,否則將會發生 The system cannot find the file specified 的錯誤訊息。
5、下載自動化備份腳本
此實作中我們直接將線上運作的 VM 虛擬主機,透過備份腳本直接備份至 ESXi 虛擬化平台的 Local Storage(LocalHDD)中的 BackupVMs 資料夾,首先請至 github 網站下載最新版本的 ghettoVCB 自動化備份腳本,本實作請下載「.tar.gz」 格式的壓縮檔案至安裝 VMware vSphere Client 主機中。
圖5、下載最新版本 ghettoVCB 自動化備份腳本
接著請使用 VMware vSphere Client 登入 ESXi 5.1 虛擬化平台並開啟 Datasotre Browser,在 Datastore 下建立資料夾「BackupVMs」以存放備份腳本及虛擬主機備份,建立資料夾完成後將剛才下載的 「ghettoVCB-master.tar.gz」檔案上傳至此資料夾中。
圖6、上傳 ghettoVCB 備份腳本至 ESXi 5.1 虛擬化平台
請於 vSphere Client 操作介面中依序點選「Configuration > Software > Security Profile > Properties > SSH > Options > Start」,以啟動 ESXi 5.1 虛擬化平台 SSH 服務以便稍後遠端登入,接著使用 SSH Client 遠端登入 ESXi 5.1 虛擬化平台。
圖7、開啟 ESXi 虛擬化平台 SSH 服務以便稍後遠端登入
登入後請先切換至 BackupVMs 資料夾下後確定備份腳本檔案確實存在,接著使用「tar -zxvf」指令將備份腳本壓縮檔案解壓縮,解壓縮後將會自動建立 「ghettoVCB-master」資料夾及相關備份腳本檔案。
# cd /vmfs/volumes/LocalHDD/BackupVMs //切換至備份腳本存放路徑
# ls //確認備份腳本存在
ghettoVCB-master.tar.gz
# tar -zxvf ghettoVCB-master.tar.gz //解壓縮備份腳本檔案
ghettoVCB-master/
ghettoVCB-master/README
ghettoVCB-master/ghettoVCB-restore.sh
ghettoVCB-master/ghettoVCB-restore_vm_restore_configuration_template
ghettoVCB-master/ghettoVCB-vm_backup_configuration_template
ghettoVCB-master/ghettoVCB.conf
ghettoVCB-master/ghettoVCB.sh
6、通用設定檔 ghetthVCB.conf
此為預設的通用備份設定檔,檔案內容為所有可用的備份參數,您可以在了解備份參數後複製並修改制訂成適合您運作環境的備份設定檔,相關備份參數及說明如下: (0=Disable、1=Enable)
- VM_BACKUP_VOLUME: 備份目的地(若資料夾不存在則會自行建立)。
- DISK_BACKUP_FORMAT: 虛擬主機備份硬碟格式。
- VM_BACKUP_ROTATION_COUNT: 保留虛擬主機的備份數量。
- POWER_VM_DOWN_BEFORE_BACKUP: 虛擬主機在備份作業執行前是否要關機(請注意!! 關機中的虛擬主機將不會建立快照)。
- ENABLE_HARD_POWER_OFF: 是否啟用,因為關機後的虛擬主機 ESX/ESXi 平台無法透過 VMware Tools 偵測到虛擬主機。
- ITER_TO_WAIT_SHUTDOWN: 是否在備份作業執行前 60 秒將虛擬主機關機。
- POWER_DOWN_TIMEOUT: 當虛擬主機經過 60 秒後還沒關機完成,則要等待多久便放棄備份該虛擬主機的備份作業。
- ENABLE_COMPRESSION: 是否啟用檔案壓縮功能(請於備份後測試能否順利還原)。
- VM_SNAPSHOT_MEMORY: 是否快照虛擬主機記憶體狀態(預設為禁用)。
- VM_SNAPSHOT_QUIESCE: 是否啟用虛擬主機檔案系統暫停機制(預設為禁用)。
- ENABLE_NON_PERSISTENT_NFS: 是否啟用自動掛載及卸載 NFS 儲存設備機制。
- UNMOUNT_NFS: 是否卸載 NFS儲存設備。
- NFS_SERVER: NFS儲存設備 IP 位址或主機名稱。
- NFS_MOUNT: NFS儲存設備分享路徑。
- NFS_LOCAL_NAME: NFS儲存設備於 ESX/ESXi 平台上 Datastore 掛載名稱。
- NFS_VM_BACKUP_DIR: 存放虛擬主機備份的資料夾名稱。
- SNAPSHOT_TIMEOUT: 當虛擬主機經過 60 秒後還沒建立快照,則放棄備份該虛擬主機。
- EMAIL_LOG: 是否開啟 E-Mail 寄送備份日誌功能(預設為禁用)。
- EMAIL_DEBUG: 是否開啟 E-Mail 寄送除錯功能(尋找無法寄件的原因)。
- EMAIL_SERVER: 指定 E-Mail 郵件伺服器 IP 位址或主機名稱。
- EMAIL_SERVER_PORT: 指定 E-Mail 郵件伺服器通訊埠號(Port)。
- EMAIL_DELAY_INTERVAL: 指定 E-Mail 郵件的延遲間隔時間(預設為 1 秒)。
- EMAIL_TO: 指定郵件收件人,如果有多筆記錄則使用逗點隔開。
- EMAIL_FROM: 指定郵件寄件人。
- RSYNC_LINK: 採用 Rsync 同步機制時是否支援 Symbolic Link。
上述通用設定檔內容中備份參數雖然有點多,但是其實若您只是想要實作功能單純的 VM 虛擬主機線上備份其實也可以很簡單,我們可以將通用設定檔 ghettoVCB.conf 複製後修改為符合自已的設定即可,不需要的功能可以不用寫在設定檔案中,例如 這並不是資料庫類型的 VM 虛擬主機,同時不需要掛載 NFS 儲存設備以及 E-Mail 日誌功能,那麼設定檔內容將精簡許多,以下是複製通用設定檔後修改而成的備份設定檔內容 mybackup.conf 只有短短3行即可達成:
# cat mybackup.conf //查看自訂的備份設定檔內容
VM_BACKUP_VOLUME=/vmfs/volumes/LocalHDD/BackupVMs //指定備份存放路徑
DISK_BACKUP_FORMAT=thin //指定虛擬磁碟備份格式
VM_BACKUP_ROTATION_COUNT=5 //指定保留的備份份數
7、線上備份 VM 虛擬主機
在開始執行備份作業以前,由於我們此次實作採用的是最新版本的 VMware vSphere ESXi 5.1 虛擬化平台,而自動化備份腳本 ghettoVCB.sh 因為內容中有判斷虛擬化平台版本的機制,但是因為腳本作者還來不及更新版本判斷機制內容,因此我們可以手動修改內容加上判斷機制,否則您在執行備份腳本時將會發生「You're not running ESX(i)3.5, 4.x, 5.x!」的錯誤訊息,並且備份作業將會中斷執行,請修改備份腳本 ghettoVCB.sh 中第 231 行處加上 ESXi 5.1 版本的判斷機制 「|| [[ "${ESX_VERSION}" == "5.1.0" ]]」內容即可。
修改前
if [[ "${ESX_VERSION}" == "5.0.0" ]]; then
修改後
if [[ "${ESX_VERSION}" == "5.0.0" ]] || [[ "${ESX_VERSION}" == "5.1.0" ]]; then
接著可以使用備份腳本執行檔「ghettoVCB.sh」配合設定檔來進行備份作業,下列為搭配備份腳本所使用的參數說明:
- -a: 備份 所有 虛擬主機,備份此台 ESX(i)虛擬化平台上的所有 VM 虛擬主機。
- -f: 備份 某些 虛擬主機,建立一個檔案後其內容條列要備份的 VM 虛擬主機名稱,便可以配合此參數載入此檔案以達成目的。
- -e: 備份時 排除 某些虛擬主機,建立一個檔案後其內容不要備份的 VM 虛擬主機名稱,請配合 –a 及此參數載入該檔案。
- -c: 備份資料夾,手動指定存放的備份資料夾路徑而非讀取設定檔中的備份資料夾參數值。
- -g: 指定備份設定檔,當您未採用預設的通用設定檔時即使用此參數指定。
- -l: 指定日誌檔,手動指定備份日誌檔建立路徑(預設為自動建立於 /tmp 下)。
- -d: 除錯及模擬運行模式,配合三個參數值 info / debug / dryrun 使用。
了解備份腳本執行檔搭配參數後我們便可以執行備份作業,首先切換至備份腳本執行檔及備份設定檔的路徑 「/vmfs/volumes/LocalHDD/BackupVMs」,接著執行備份所有 VM 虛擬主機 「-a」 以及「-g」讀取自訂的備份設定檔 「mybackup.conf」,在預設不指定的情況下備份過程將會記錄到 「/tmp/ghettoVCB-2012-11-15_22-40-41.log」 日誌檔案內,以下為備份作業執行過程:
# cd /vmfs/volumes/LocalHDD/BackupVMs //切換至備份腳本存放路徑
# ./ghettoVCB.sh -a -g ./mybackup.conf //執行備份作業
Logging output to "/tmp/ghettoVCB-2012-11-15_22-40-41.log" ...
2012-11-15 22:40:42 -- info: ===== ghettoVCB LOG START =====
2012-11-15 22:40:42 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE =./mybackup.conf
2012-11-15 22:40:42 -- info: CONFIG - VERSION = 2011_11_19_1
2012-11-15 22:40:42 -- info: CONFIG - GHETTOVCB_PID = 7221
2012-11-15 22:40:42 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/LocalHDD/BackupVMs
2012-11-15 22:40:42 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 5
...略...
2012-11-15 22:40:42 -- info:
2012-11-15 22:40:51 -- info: Initiate backup for CentOS63
2012-11-15 22:40:51 -- info: Creating Snapshot "ghettoVCB-snapshot-2012-11-15" for CentOS63
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/LocalHDD/CentOS63/CentOS63.vmdk'...
Clone: 100% done.
2012-11-15 22:47:11 -- info: Removing snapshot from CentOS63 ...
2012-11-15 22:47:12 -- info: Backup Duration: 6.35 Minutes //此備份作業花費時間
2012-11-15 22:47:12 -- info: Successfully completed backup for CentOS63! //備份成功
2012-11-15 22:47:17 -- info: ###### Final status: All VMs backed up OK! ######
2012-11-15 22:47:17 -- info: ===== ghettoVCB LOG END =====
8、結語
雖然備份 VMware vSphere 虛擬化架構上運作的 VM 虛擬主機的備份還原產品,在目前市場上已經有許許多多不同的商用產品問市,然而對於 IT 預算本來就不高的中小企業來說,要採用備份產品仍然是需要一筆可觀的費用。透過 VMware vExpert 專家 William Lam 所撰寫的自動化備份腳本,您可以直接利用它輕鬆達成線上備份運作中的 VM 虛擬主機而不需要花費任何費用,並且即使您採用的是免費版本的 VMware vSphere Hypervisor 也完全可以運作(因為大部份商用備份軟體並不支援 !!)。
本文從介紹快照運作機制開始,到實作如何採用自動化備份腳本來備份線上運作的 VM 虛擬主機,在下一篇文章當中將會實作說明如何當 VM 虛擬主機發生災難時進行還原的動作,並且實作設定排程時間自動執行備份,以達成無需人工介入完全自動化的備份目的。