VCSA 6.5 스케쥴 백업

VCSA 6.7 에서 추가된 기능중 하나가, VAMI 를 통하여 VCSA 의 백업을 스케쥴링 할 수 있다는 것입니다.

안타깝게도 VCSA 6.5 에서는 현재 latest 인 6.5 U2 에서도 해당 기능을 지원하지 않고 있어, 앞으로도 지원이 될지 안될지에 대한 여부를 알 수 없는 상태입니다. 

다만 VAMI 를 통하지 않고, bash script 형태로 백업을 진행할 수가 있습니다.

backup script 를 만들고… 해당 스크립트를 crontab 에 등록을 하면…? 아마 될 수 있지 않을까 해서 한번 테스트 해봤습니다.

아래 테스트는 VCSA 6.5 U2 으로 진행것이고, 다른 버전에서는 테스트 하지 않았습니다.

이게 뭔가 안맞는 부분이 있어서 그런지, log 의 내용이 좀 깨지는것 같네요. value, start_time 등이 나오면 안될것 같은데… ㅋㅋ 

{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Appliance stats monitor SQLite database"],"default_message":"Successfully finished the Appliance stats monitor SQLite database backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":66,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Appliance stats monitor SQLite database"],"default_message":"Successfully finished the Appliance stats monitor SQLite database backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":83,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Appliance stats monitor SQLite database"],"default_message":"Successfully finished the Appliance stats monitor SQLite database backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Configuration files"],"default_message":"Successfully finished the Configuration files backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Configuration files"],"default_message":"Successfully finished the Configuration files backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Configuration files"],"default_message":"Successfully finished the Configuration files backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["Configuration files"],"default_message":"Successfully finished the Configuration files backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","messages":[{"args":["VCDB"],"default_message":"Successfully finished the VCDB backup.","id":"com.vmware.applmgmt.backup.backup_part_finish"}],"progress":95,"state":"INPROGRESS","id":"20180716-020410-8307201"}}
{"value":{"start_time":"2018-07-16T02:04:14.128Z","end_time":"2018-07-16T02:06:03.042Z","messages":[{"args":[],"default_message":"Backup job finished successfully.","id":"com.vmware.applmgmt.backup.finish_success"}],"progress":100,"state":"SUCCEEDED","id":"20180716-020410-8307201"}}

 

일단 백업 자체는 잘 떠지는것 같습니다.

그리고 crontab 에 아래와 같이 등록해주었습니다. (매시 정각에 job 이 돌게끔..)

제가 테스트하고 있는 시간으로 보면.. PM 03:00 시에 돌아야 하는데, 돌지를 않네요. 왜 그럴까 싶어서 확인해보니, VCSA 내의 crontab 으로는 실행이 안되는것 같습니다.

https://www.drewgreen.net/2017/04/19/fix-for-cron-failing-on-vmware-vcenter-server-appliance-vcsa-6-5/

인증관련해서 설정을 바꿔줘야하는것 같은데.. 별로 바꾸고 싶지 않아서… 별도의 리눅스서버에 올리고 돌려봤습니다.

백업 스크립트는 잘 도는것 같은데, crontab -e 로 추가하면 cron job 이 돌지 않고, /etc/crontab 을 수정해야 도네요.. 왜그런지는 잘 모르겠습니다.

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
30 * * * * root /tmp/vcsa_backup.sh >> /tmp/cronlog.log 2>&1

저는 위와 같이 돌렸구요. 잘 떠지는것을 확인했습니다. 꼭 필요하시다면 한번 설정해보시는것도 괜찮겠네요.

Script Source Code (https://pubs.vmware.com/vsphere-6-5/index.jsp?topic=%2Fcom.vmware.vsphere.vcsapg-rest.doc%2FGUID-222400F3-678E-4028-874F-1F83036D2E85.html)

#!/bin/bash
##### EDITABLE BY USER to specify vCenter Server instance and backup destination. #####
VC_ADDRESS=vc_server_ip
VC_USER=sso_user
VC_PASSWORD=sso_pass
FTP_ADDRESS=storage_server
FTP_USER=ftpuser
FTP_PASSWORD=ftpuser
BACKUP_FOLDER=backup
############################

# Authenticate with basic credentials.
curl -u "$VC_USER:$VC_PASSWORD" \
   -X POST \
   -k --cookie-jar cookies.txt \
   "https://$VC_ADDRESS/rest/com/vmware/cis/session"

# Create a message body for the backup request.
TIME=$(date +%Y-%m-%d-%H-%M-%S)
cat << EOF >task.json
{ "piece":
     {
         "location_type":"FTP",
         "comment":"Automatic backup",
         "parts":["seat"],
         "location":"ftp://$FTP_ADDRESS/$BACKUP_FOLDER/$TIME",
         "location_user":"$FTP_USER",
         "location_password":"$FTP_PASSWORD"
     }
}
EOF

# Issue a request to start the backup operation.
echo Starting backup $TIME >>backup.log
curl -k --cookie cookies.txt \
   -H 'Accept:application/json' \
   -H 'Content-Type:application/json' \
   -X POST \
   --data @task.json 2>>backup.log >response.txt \
   "https://$VC_ADDRESS/rest/appliance/recovery/backup/job"
cat response.txt >>backup.log
echo '' >>backup.log

# Parse the response to locate the unique identifier of the backup operation.
ID=$(awk '{if (match($0,/"id":"\w+-\w+-\w+"/)) \
          print substr($0, RSTART+6, RLENGTH-7);}' \
         response.txt)
echo 'Backup job id: '$ID

# Monitor progress of the operation until it is complete.
PROGRESS=INPROGRESS
until [ "$PROGRESS" != "INPROGRESS" ]
do
     sleep 10s
     curl -k --cookie cookies.txt \
       -H 'Accept:application/json' \
       --globoff \
       "https://$VC_ADDRESS/rest/appliance/recovery/backup/job/$ID" \
       >response.txt
     cat response.txt >>backup.log
     echo ''  >>backup.log
     PROGRESS=$(awk '{if (match($0,/"state":"\w+"/)) \
                     print substr($0, RSTART+9, RLENGTH-10);}' \
                    response.txt)
     echo 'Backup job state: '$PROGRESS
done

# Report job completion and clean up temporary files.
echo ''
echo "Backup job completion status: $PROGRESS"
rm -f task.json
rm -f response.txt
rm -f cookies.txt
echo ''  >>backup.log

crontab 으로 돌렸을때 backup.log 를 남기실려면 절대경로까지 다 표시해주셔야 합니다. 예) echo ‘ ‘ >> /tmp/backup.log

 

 

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다