GhettoVCB 線上不停機備份
測試環境 :
HOST OS : ESXI5 IP:192.168.10.5 NFS自動掛載備份 :/vmfs/volumes/backup/nfsshare
Geust OS : Debian6.04 IP:192.168.10.3 servername : Guest01
Geust OS : Debian6.04 IP:192.168.10.2 servername : Guest02
NFS OS : Debian6.04 IP:192.168.10.1 (mount point :/home/backup)
使用套件下載 : pietty0327、ghettoVCB
使用方法 : crontab + Linux shell script + mount (自動掛載 nfs)
一、NFS 設定步驟
1-1.安裝 nfs-server 並編輯設定檔
# apt-get update
# apt-get install nfs-kernel-server
# mkdir /home/backup
# chmoe 777 backup
# vi /etc/exports
/home/tools 192.168.10.*(rw,sync,no_subtree_check) #放多台Server使用的
/home/backup 192.168.10.*(rw,sync,no_subtree_check)
# /etc/init.d/nfs-kernel-server restart
nfs-server防火牆設定
# vi /etc/hosts.allow
portmap : 192.168.10.
mountd : 192.168.10.
1-2.檢查 nfs 服務是否有啟動
看 111 (portmap) 和 2049 (rpc.statd) port 是否有正常啟動, 沒有請重新啟動。
# showmount -e lcoalhost
二、EXSI5 HOST設定步驟
2-1.先開啟 ESXI5 ssh 連線功能
用vSphere Clint--> configuration --> Security Profile --> Services Properties --> ssh Options --> Start and stop manually -->start --> OK2-2.使用pietty 上傳 ghettoVCB.tar.gz 至 EXSI5 host 下不會因重開機而刪去的目錄內, 解tar 。(請自行下載 pietty0327.exe、ghettoVCB.tar.gz ; 因重開機而會刪去的有 tmp/、var/ 下的目錄 )
2-3.編寫設定檔
2-3-1. # vi ghettoVCB.sh (此為備份在本機端)#設定備份所存放的路徑,在這邊設定備份到本地端,用NFS設定請 # 此行
VM_BACKUP_VOLUME=/vmfs/volumes/datastore1/backup
#定義被份的硬碟格式(zeroedthick, eagerzeroedthick, thin, and 2gbsparse are available)
DISK_BACKUP_FORMAT=thin
#定義備份保留的數量
VM_BACKUP_ROTATION_COUNT=3
#設定POWER DOWN的時間。在等待關閉時VM會放棄或是忽略特定的VM備份
POWER_DOWN_TIMEOUT=5
#設定等待VM快照的時間,在等待關閉時會放棄和忽略特定備份的VM
SNAPSHOT_TIMEOUT=15
#備份是否啟用壓縮(enable=1,disable=0)
ENABLE_COMPRESSION=0
#---- NFS的相關設定----
#定義非持久性的NFS備份(yes=1,no=0)
ENABLE_NON_PERSISTENT_NFS=0
#以下是給不想讓NFS與系統長期連接的設定,允許只在備份的過程中連接到NFS,需要才掛載
當有備份需要使用到NFS時才會自動掛載上去,一旦備份完成後就會自動卸載,並不會持續的掛載。
並使用到以下5個變數。
#是否要卸載NFS(yes=1,no=0)
UNMOUNT_NFS=0
#NFS Server 的地址(ip或主機名)
NFS_SERVER=192.168.10.1
# Defining the NFS export path:/home/backup
NFS_MOUNT=/home/backup
#NFS 資料存放地方的名稱 (掛載在 /vmfs/volumes/下 )
NFS_LOCAL_NAME=TEST
#虛擬機上NFS備份的目錄
NFS_VM_BACKUP_DIR=mybackups
#------MAIL 發送LOG的設定-------
#是否要透過電子郵件來發送備份LOG(yes=1,no=0)
EMAIL_LOG=1
#是否發送debug的LOG,這是做為測試使用。
EMAIL_DEBUG=1
#mail server的ip或網址
EMAIL_SERVER= emailserver.com
#設定mail 所使用的port
EMAIL_SERVER_PORT=25
#設定每封mail之間發送的延遲時間。
EMAIL_DELAY_INTERVAL=1
#收件人的mail
EMAIL_TO=xxx@gmail.com
#寄件人的mail
EMAIL_FROM=root@ghettoVCB
#---修改EMAIL LOG存放位置--預設定情況下log都是存放在/tmp內,避免重開機後log會被清除。
USE_VM_CONF=0
USE_GLOBAL_CONF=0
BACKUP_ALL_VMS=0
EXCLUDE_SOME_VMS=0
EMAIL_LOG_HEADER=/tmp/ghettoVCB-email$$.header
EMAIL_LOG_OUTPUT=/tmp/ghettoVCB-email-$$.log
EMAIL_LOG_CONTENT=/tmp/ghettoVCB-email-$$.content
#(將tmp修改成所要存放的路徑後儲存執行即可,建議存到/vmfs/volumes/datastore1/log 內)
2-3-2. 可編輯不同的備份腳本
# vi ghettoVCB.conf (備份在NFS 端 )
VM_BACKUP_VOLUME=/vmfs/volumes/datastore1/test
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=2
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
ENABLE_NON_PERSISTENT_NFS=1
UNMOUNT_NFS=1
NFS_SERVER=192.168.10.1
NFS_MOUNT=/home/backup
NFS_LOCAL_NAME=backup
NFS_VM_BACKUP_DIR=nfsshare
SNAPSHOT_TIMEOUT=5
EMAIL_LOG=1
EMAIL_DEBUG=1
EMAIL_SERVER=smtp.gmail.com
EMAIL_SERVER_PORT=25
EMAIL_DELAY_INTERVAL=1
EMAIL_TO=xxxx@gmail.com
EMAIL_FROM=root@ghettoVCB
2-4.建立List vms_to_backup & vm_exclusion_list
# vi vms_to_backup (備份指定名單)
Guest01
#加入要指定要自動備份的虛擬機名稱,需和/vmfs/volumes/datastore1 下 虛擬機名稱相同)
# vi vm_exclusion_list (排除list中指定)
Guest02
#加入要指定排除的虛擬機名稱
2-5.ghettoVCB.sh 手動使用說明
ghettoVCB.sh參數說明 :
-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
-l File to output logging
(將LOG記錄寫到指定檔案內)
-d Debug level [info|debug|dryrun] (default: info)
(Debug測試,不會產生備份)
範例操作
只備份list內的虛擬機
#./ghettoVCB.sh -f vms_to_backup
全部備份
#./ghettoVCB.sh -a
除了排除清單(vm_exclusion_list)上的虛擬機外,剩下的都備份
#./ghettoVCB.sh -a -e vm_exclusion_list
Backup VMs using global ghettoVCB configuration file
備份虛擬機時使用ghettoVCB.conf此設定檔來備份vms_to_backup內指定的虛擬機
#./ghettoVCB.sh -f vms_to_backup -g /global/ghettoVCB.conf
Backup VMs
based on specific configuration located in
directory
根據vm_backup_configs中特定配置來備份vms_to_backup內指定的虛擬機
#./ghettoVCB.sh -f vms_to_backup -c vm_backup_configs
輸出的記錄到/tmp/ghettoVCB.log(可自行設定LOG所儲存的路徑和檔案)
#./ghettoVCB.sh -f vms_to_backup -l /vmfs/volume/local-storage/ghettoVCB.log
Dryrun測試,不會產生備份
#./ghettoVCB.sh -f vms_to_backup -d dryrun
Debug不產生備份,執行後提供詳細訊息包括備份和LOG存放的路徑及備份所需容量訊息,用來排除故障是相當好用的。
#./ghettoVCB.sh -f vms_to_backup -d debug
三、防火牆及排程設定
3-1.加入 crontab 的排程,自動定期備份 (為了測試是否正常可以先設定每10分測試一次)
# vi var/spool/cron/crontab/root
30 20 * * 1-5 /vmfs/volumes/datastore1/lamw-ghettoVCB-518cef7/ghettoVCB.sh -f /vmfs/volumes/datastore1/lamw-ghettoVCB-518cef7/vms_to_backup
* 24 * * 5 /vmfs/volumes/datastore1/lamw-ghettoVCB-518cef7/ghettoVCB.sh -a
3-2.開啟 EMAIL 請加入 25 port 的防火牆設定
3-2-1.先確認ESXI是否有開啟防火牆25port
方法一 用介面 : [Configuration]→[Security Profile]
方法二 ESXI5 SSH # esxcli network firewall ruleset list
3-2-2.加入25port
# cd /etc/vmware/firewall/
# vi smtp.xml (在最後加入以下內容)
<!-- E-MAIL SMTP -->
<ConfigRoot>
<service id='1000'>
<id>SMTP</id>
<rule>
<direction>outbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>25</port>
</rule>
<enabled>true</enabled>
<required>false</required>
</service>
</ConfigRoot>
3-2-3.重啟防火牆,重啟後會看到多出SMTP 25port的設定
# esxcli network firewall refresh
# esxcli network firewall ruleset list
SMTP true (顯現出smtp有開啟)
四、重開機防火牆自動讀入設定
4-1.編寫開機執行腳本
# vi firewall.sh
#!/bin/sh
# Firewall rules
cp /vmfs/volumes/tools/file/service.xml /etc/vmware/firewall/
esxcli network firewall refresh #重啟防火牆設定
# chmod 755 firewall.sh
4-2.寫入到rc.local讓重開機ESXI主機自動跑firewall.sh
# vi /etc/rc.local
#在最下面加入此行
/vmfs/volumes/tools/script/firewall.sh
五、設定排程設定 (單台、多台主機環境)
在設定排程的部份,也和設定MAIL的防火牆規則一樣,都會因重開而還原。
單台主機設定
適合單一主機或是管理人員較少的使用。
缺點 : 日後要設的排程多的時後,或是加入到rc.local內的東西變多時,在管理上會容易亂掉,管理較不方便。
多台主機
建議最好新增一個NFS並將設定資料都統一放到NFS內,之後在有需要的ESXI主機上在掛載NFS就可使用。
優點 : 適合主機數較多且方便統一管理。
5-1.設定排程(root)
5-1-1.單台排程設定
直接寫在rc.local
# vi /etc/rc.local
#在最下面加入crontab
/bin/kill $(cat /var/run/crond.pid) #刪去目前跑的 crond.pid
/bin/echo " */5 * * * * /vmfs/volumes/datastore1/backup/lamw-ghettoVCB-518cef7/ghettoVCB.sh -a”>> /var/spool/cron/crontabs/root
#每5秒 備份一次的備份shell寫入 /var/spool/cron/crontab/root 內
/bin/busybox crond #重啟crond
5-2-1.多台排程設定
以下範例檔案存放在NFS上 tools/script 內,可供多機備份用。
# mkdir -p /vmfs/volumes/tools/script
# mkdir /vmfs/volumes/tools/file
將要執行的 shell 暫存在 script (NFS server)
編寫 Crontab root
主要是為了日後如果有更多的排程要設定的話只需要改此root檔後,執行crontabs.sh
此腳本就會自動覆蓋舊的root檔了。在日後的管理會較為方便。
# cp /var/spool/cron/crontabs/root /vmfs/volumes/tools/file/
# cd /vmfs/volumes/tools/file/
# chmod 744 root
# vi 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 * * * * /vmfs/volumes/datastore1/backup/lamw-ghettoVCB-518cef7/ghettoVCB.sh -a
#設定讓5分鐘跑一次看是否正常,測試時請用最小的vm 來測試,節省時間。
設定crontabs.sh
# cd /vmfs/volumes/tools/script
# vi crontabs.sh
#!/bin/sh
/bin/kill $(cat /var/run/crond.pid)
cp /vmfs/volumes/tools/file/root /var/spool/cron/crontabs
/bin/busybox crond
# chmod 755 crontabs.sh
設定rc.local開機自動跑crontabs.sh
# vi /etc/rc.local
#在最下面加入此行
/vmfs/volumes/tools/script/crontabs.sh
接下來就可以觀察在本機端 及 NFS Server 內是否有備份過去的目錄了。
備註: 安裝時出現的 error訊息
1、執行 ./ghettoVCB.sh -f vms_to_backup -g ghettoVCB.conf 第二各備份設定檔時出現
error 訊息 : "mkdir: cannot create directory '/tmp/ghettoVCB.lock': File exists"
原因 : 因同第一支設定檔都使用 ghettoVCB.sh 的設定會產生 '/tmp/ghettoVCB.lock' 在跑。
解決方法 :無法同時執行,需分開備份時間或是使用另支 ghettoVCB1.sh 修改 /tmp/ghettoVCB1.lock
2、ESXI5 本機上 mount出現文件錯亂問題
2012-03-21 02:26:53 -- info: ============ ghettoVCB LOG START ==============
(vim.fault.AlreadyExists) {
dynamicType = <unset>,
faultCause = (vmodl.MethodFault) null,
name = "/vmfs/volumes/62b67156-7cecaa9a",
msg = "The specified key, name, or identifier already exists.",
}
Datastore not found.
Datastore not found.
Datastore not found.
解決方法 :
在ESXi主机上重啟管理網路服務
# services.sh restart
3、ESXi主機配置NFS存儲為Datastore时,出錯,提示如下信息:
Error during the configuration of the host: NFS Error: Unable to Mount filesystem: Unable to connect to NFS server
解決方法: 1.確認 NFSServer的exports 設定了no_root_squash或chmod 777
2.在 EXSI主機手動MOUNT 測試,nfs設定是否成功
# esxcfg-nas -a -o 192.168.15.54 -s /home/backup NFS_Test
# esxcfg-nas -l
# df -h
# esxcfg-nas -d NFS_Test #umount
4、ghettoVCB備份 錯誤訊息 Snapshot found for「host」, backup will not take place
原因 : 會出現此錯誤訊息,主要是因為當正在使用的虛擬機VM要備份的時後,會先做出一個snapshot檔。然後在備份
的中途若有不當的中斷或停止時。此snapshot檔就會無法自動刪除。進而造成下次要備份時出現此錯誤訊息因此時需要手動自行刪除。
解決方法: 手動刪除snapshot --> 請先登入VMware vSphere Client --> 然後點選卡住的開台虛擬機右鍵。
[linux]→[Snapshot]→[Snapshot Manager]→[ghettoVCB-snapshot-2012-01-05] →[Delete]
5、查看 ESXi 的 VMkernel Log (/var/log/messages)
6、出現 " ERROR: Please enable firewall rule for email traffic on port 25 " 請加入25port的防火牆設定
參考網站 : 00086網誌 ESXi 5 下 ghettoVCB.sh 安裝及操作過程
FAQ-BOOK VMware esxi 備份ghettoVCB.sh基本設定說明
FAQ-BOOK VMware esxi 備份ghettoVCB.sh進階設定說明
VM官網 VMware Communities: ghettoVCB.sh - Free alternative for backing up VM's for ESX(i) 3.5, 4.x+ & 5.x
沒有留言:
張貼留言