2014年8月28日 星期四

ESXi 5.1 / 5.5 定期排程備份線上VM;NFS、sendmail-ghettoVCB

好的,本篇的實作花了小弟一些時間去執行,因為多數的網路文章都不正確或是少東少西的,讓小弟真的很頭疼。

 

ghettoVCB 是由一位 William 所寫的 script,在他的站台有許多 VMware 的 script 應用,非常厲害

 

 

在一開始先說明一下本篇使用 ghettoVCB 的應用功能

 

1. 定期排程備份指定的虛擬機

2. 必須要可以 mount NFS (Host 本身硬碟不夠用的時候 NFS 非常好用,又可以解決 I/O 效能)

3. 執行完成必須通知系統管理員



 

 

 

setp.1 下載 ghettoVCB zip 檔案,版本已支援最新 ESXi 5.5

2014-08-27_232432

 

 

 

※以下請使用 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 找到以下

2014-08-28_002941

並修改成
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

沒有留言:

張貼留言