ghettoVCB 是由一位 William 所寫的 script,在他的站台有許多 VMware 的 script 應用,非常厲害
在一開始先說明一下本篇使用 ghettoVCB 的應用功能
1. 定期排程備份指定的虛擬機
2. 必須要可以 mount NFS (Host 本身硬碟不夠用的時候 NFS 非常好用,又可以解決 I/O 效能)
3. 執行完成必須通知系統管理員
setp.1 下載 ghettoVCB zip 檔案,版本已支援最新 ESXi 5.5
※以下請使用 SSH 遠端登入操作。請參考 開啟 SSH service
setp.2 把 ghettoVCB.zip 丟到 ESXi Host 解壓縮到以下路徑
shell# cd /vmfs/volumes/datastore1/
shell# unzip ghettoVCB-master.zip
Archive: ghettoVCB-master.zip
1d4a13df7b3b26d2534d6fce1c9265afdfbbbd58
creating: ghettoVCB-master/
inflating: ghettoVCB-master/README
inflating: ghettoVCB-master/ghettoVCB-restore.sh
inflating: ghettoVCB-master/ghettoVCB-restore_vm_restore_configuration_template
inflating: ghettoVCB-master/ghettoVCB-vm_backup_configuration_template
inflating: ghettoVCB-master/ghettoVCB.conf
inflating: ghettoVCB-master/ghettoVCB.sh
※僅有在 datastore1 下的資料在重開 ESXi 後不會被清除資料。
setp.3 調整 ghettoVCB.sh,此步驟為自行斟酌,因小弟的習慣所以有修正 script。
更改 log 路徑
搜尋 LOG_OUT 找到以下
並修改成
LOG_OUTPUT="/vmfs/volumes/datastore1/BackupScript/log/BackupLog-$(date +%F%H%M).log"
拿掉 NFS_VM_BACKUP_DIR 設定
因不希望掛載 NFS 後又多一層目錄,所以拿掉所有 NFS_VM_BACKUP_DIR 變數
搜尋 ${NFS_VM_BACKUP_DIR},並拿掉所有有關 ${NFS_VM_BACKUP_DIR} 的變數。
設定完後備份出來的路徑就像以下
/vmfs/volumes/NFS/NFS_VM_BACKUP_DIR/VMBackupDIR
變更為
/vmfs/volumes/NFS/VMBackupDIR
setp.4 設定 ghettoVCB.conf 檔,僅需將要設定的部分拉出來即可,其他在 ghettoVCB.sh 內已有預設值。
VM_BACKUP_VOLUME=/vmfs/volumes/NFSBackup/ \\ 備份虛擬機的路徑
DISK_BACKUP_FORMAT=thin \\ 備份虛擬機格式,建議採預設。
VM_BACKUP_ROTATION_COUNT=2 \\ 備份份數
ENABLE_COMPRESSION=0 \\ 是否壓縮,因備份時間已經花費大量時間,再進行壓縮恐執行不完。
ENABLE_NON_PERSISTENT_NFS=1 \\ 開啟 NFS mount
UNMOUNT_NFS=1 \\ 是否執行完就 unmount。 1啟動 , 0關閉
NFS_SERVER=192.168.1.10 \\ NFS server
NFS_VERSION=nfs \\ NFS版本,nfs / nfs4
NFS_MOUNT=/volume/esxi5 \\ NFS host 掛載目錄
NFS_LOCAL_NAME=NFSBackup \\ ESXi 掛載名稱
EMAIL_LOG=1 \\ 開啟 maillog 寄送通知
EMAIL_SERVER=192.168.10.99 \\ mail server
EMAIL_SERVER_PORT=25 \\ SMTP port
EMAIL_DELAY_INTERVAL=1 \\ 是否延遲寄信
EMAIL_TO=shazi7804@gmail.com \\ 收件者
EMAIL_FROM=esxibackup@shazi.twbbs.org \\ 寄件者 sender
其餘設定大多用不到,若有需要了解可參考 ghettoVCB Documentation
setp.5 建立要備份的 VM 清單 (如果要全備份可以用 ghettoVCB.sh -a 參數略過此步驟)
shell# echo "VM1-guest-win2k8" >> listvm
※在此步驟後已可以測試是否可以正常備份 vm
shell# ghettoVCB.sh -f listvm -g ghettoVCB.conf -d debug
..
..
..
###### Final status: All VMs backed up OK! ######
setp.6 此步驟以下開始要建立排程 / 開機 script ,因為 ESXi 再重新啟動後會清除多數的設定檔,包括 root(crontab)、rc.local、service ...
設定排程 以及 建立 crondtab.sh
讓 ESXi 按照排程時間執行備份,在 ESXi 執行 crond 的是 /var/spool/cron/crontabs/root 這隻檔案
#排程
shell# cp /var/spool/cron/crontabs/root /vmfs/volumes/datastore1/BackupScript/crond/
shell# vi /vmfs/volumes/datastore1/BackupScript/crond/root
#min hour day mon dow command
1 1 * * * /sbin/tmpwatch.py
1 * * * * /sbin/auto-backup.sh
0 * * * * /usr/lib/vmware/vmksummary/log-heartbeat.py
*/5 * * * * /sbin/hostd-probe
@weekly /vmfs/volumes/datastore1/BackupScript/ghettoVCB.sh -f /vmfs/volumes/datastore1/BackupScript/conf/listvm -g /vmfs/volumes/datastore1/conf/ghettoVCB.conf -d debug
shell# cp /vmfs/volumes/datastore1/BackupScript/crond/root /var/spool/cron/crontabs/
#建立 crondtab.sh
shell# vi /vmfs/volumes/datastore1/BackupScript/crondtab.sh
#!/bin/sh
#Add BackupVMs crond by week
/bin/kill $(cat /var/run/crond.pid)
cp /vmfs/volumes/datastore1/BackupScript/crond/root /var/spool/cron/crontabs/
/usr/lib/vmware/busybox/bin/busybox crond
設定防火牆開放 25 port outbound 以及 建立 firewall.sh
#設定防火牆開放 SMTP 25 port
shell# vi /vmfs/volumes/datastore1/BackupScript/crond/smtp.xml
<ConfigRoot>
<service id='0033'>
<id>SMTP client</id>
<rule id='0000'>
<direction>outbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>25</port>
</rule>
<enabled>true</enabled>
<required>true</required>
</service>
</ConfigRoot>
shell# cp /vmfs/volumes/datastore1/BackupScript/crond/smtp.xml /etc/vmware/firewall/
shell# esxcli network firewall refresh
※這邊可以看 ESXi 的 firewall outbound 25port 已經通了。
建立 firewall.sh
#!/bin/sh
#Add SMTP OutBound 25port
#Firwall rules
cp /vmfs/volumes/datastore1/BackupScript/crond/smtp.xml /etc/vmware/firewall/
esxcli network firewall refresh
將 crondtab.sh 和 firewall.sh 加入開機設定檔 /etc/rc.local.d/local.sh
shell# vi /etc/rc.local.d/local.sh
#!/bin/sh
#backup crond
cp /vmfs/volumes/datastore1/BackupScript/crond/root /var/spool/cron/crontabs/
#firewall SMTP
cp /vmfs/volumes/datastore1/BackupScript/crond/smtp.xml /etc/vmware/firewall/
#sync UTC+8 time by Taipei 請參考ESXi時區設定
cp /vmfs/volumes/datastore1/BackupScript/crond/localtime /etc/
最後重開機後確認 crondtab.sh / firewall.sh 是否有正確執行,排程備份也如期執行。
※請注意是local.sh 而不是 rc.local,rc.local 在重開機之後依然會清除。
※ root、local.sh 若是直接編輯他都會沒有權限,即使你是 root,必須將檔案 cp 出來再改權限為 755 後再覆蓋回原設定檔。
※ root 中的 @weekly 為每個禮拜日凌晨12點執行。 man 5 crondtab
ghettoVCB.sh
Usage: ./ghettoVCB.sh -f [VM_BACKUP_UP_LIST] -c [VM_CONFIG_DIR] -l [LOG_FILE] -d [DEBUG_LEVEL] -g [GLOBAL_CONF] -e [VM_EXCLUSION_LIST]
OPTIONS:
-a Backup all VMs on host (備份主機上所有的虛擬機)
-f List of VMs to backup (針對List名單內的虛擬機備份)
-c VM configuration directory for VM backups (VM 配置目錄for VM備份)
-g Path to global ghettoVCB configuration file (引用 conf 設定檔)
-l File to output logging (將LOG記錄寫到指定檔案內)
-d Debug level [info|debug|dryrun] (default: info) (Debug測試,不會產生備份)
ghettoVCB 執行 debug:
Q1: Snapshot found for 「host」, backup will not take place
Ans: 最常發生在頻繁測試備份的過程中發生,若是執行到一半中斷了 snapshot 就會 lock 無法刪除,下次要進行備份時就會出現此錯誤,請手動刪除 snapshot。
Q2: 執行 ghettoVCB 在 mount NFS 時出現錯誤
============ ghettoVCB LOG START ==============
(vim.fault.AlreadyExists) {
dynamicType = <unset>,
faultCause = (vmodl.MethodFault) null,
name = "/vmfs/volumes/18b63ad6-3fecha5a",
msg = "The specified key, name, or identifier already exists.",
}
Datastore not found.
Datastore not found.
Datastore not found.
Ans:
狀況1, NFS 已經 mount,unmount 後再執行就可以。
狀況2, 沒有 mount NFS 也出現此錯誤,此為頻繁 mount / unmount 系統錯亂,執行 vSphere client > configuration > storage > Refresh。
參考資料:
William blog
ghettoVCB Documentation
Orignal From: ESXi 5.1 / 5.5 定期排程備份線上VM;NFS、sendmail-ghettoVCB
沒有留言:
張貼留言