2012年3月15日 星期四

[ How-To ] ESXI5 GhettoVCB 線上不停機備份(linux版 )


 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 --> OK

2-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

沒有留言:

張貼留言