오픈스택 서버 장애 시 복구를 위한 환경설정 파일 및 VM 인스턴스를 스냅샷 및 이미지 다운으로를 활용하여 시스템을 백업합니다.
[동작원리]
1. 컨트롤러 동작에 필요한 DB, 시스템 환경설정 파일을 압축하여 백업
2. 배포된. VM을 nova image-create 명령어를 사용하여 스냅샷을 확보
-> 2-1. nova image-create 명령어 실패 시 nova backup으로 스냅샷 확보
-> nova backup으로도 이미지 백업이 실패 시, 해당 VM을 수동으로 점검해야 함 (결론적으로 백업 실패)
-> 2-2. nova image-create로 생성된 스냅샷 이미지에 UUID 정보를 glance image-list 명령어로 확인
-> 2-3. UUID로 확보하지 못할 경우 파일 형태로 내려받지 못하는 상태 -> QCOW2 전환을 수행해야 함
3. 이미지 확보가 완료되면 스냅샷 이미지 혹은 오리지널 배포된 이미지를 삭제 (계획은 스냅샷 이미지를 삭제)
[스크립트는 게속 보정중입니다.]
-20.05.07 Script동작중 UUID추출 실패로 이한 백업 보정 및 출력 내용 수정
[컨트롤러 백업 스크립트]
#!/bin/bash
####################################
#Openstack Controller Backup Script#
#Creating TAEBIN #
#Date 2020.04.14 #
####################################
########## INFO LIST ##########
HOSTNAME=`hostname`
BACK_DATE1=`date +%Y%m%d`
BACK_DATE2=`date +%Y-%m-%d_%H:%M:%S`
BACK_TIME=`date +%H:%M:%S.%3N`
FILE_NAME=`basename "${OPS_BACK_DIR}/1.SCRIPT/1.OP_CONTROL_BK"`
########## Backup directory path ##########
OPS_BACK_DIR="/root/OPS"
OPS_LOG_DIR="${OPS_BACK_DIR}/1.SCRIPT/script_log/${HOSTNAME}_${BACK_DATE1}_script.log"
DB_BACK_DIR="${OPS_BACK_DIR}/mysql_backup"
SYS_BACK_DIR="${OPS_BACK_DIR}/filesystem_backup"
MYSQL_TAR_NAME="${DB_BACK_DIR}/${HOSTNAME}-mysql-${BACK_DATE1}.sql.gz"
SYS_TAR_NAME="${SYS_BACK_DIR}/${HOSTNAME}-filesystem-${BACK_DATE1}.tar.gz"
########## Create OPS SYS_tar.gz ##########
# /etc/systemd/network CentOS System exclude!!!#
tar --ignore-failed-read --xattrs \
-zpvcf ${SYS_TAR_NAME} \
--exclude='\/var\/lib\/glance\/images\/*' \
/srv/node /etc/hosts /etc/systemd/network \
/etc/nova /var/log/nova /var/lib/nova \
/etc/glance /var/log/glance /var/lib/glance \
/etc/keystone /var/log/keystone /var/lib/keystone \
/etc/neutron /var/log/neutron /var/lib/neutron >> ${OPS_LOG_DIR}
#OPENSTACK FULL BACKUP DIR LIST
# /etc/hosts
# /etc/nova /var/log/nova /var/lib/nova /var/lib/nova/instances \
# /etc/glance /var/log/glance /var/lib/glance /var/lib/glance/images \
# /etc/keystone /var/log/keystone /var/lib/keystone \
# /etc/neutron /var/log/neutron /var/lib/neutron
########## Dump the entire MySQL database ##########
/usr/bin/mysqldump --opt --all-databases | gzip > ${MYSQL_TAR_NAME}
########## Delete backups older than 30 days ##########
find ${DB_BACK_DIR} -ctime +30 -type f -delete
find ${SYS_BACK_DIR} -ctime +30 -type f -delete
[컨트롤러 이미지 파일 다운로드 스크립트]
#!/bin/bash
####################################
#Openstack INS->Snapshot Script #
#Creating TAEBIN #
#Date 2020.04.14 #
#Update 2020.05.07 #
####################################
########## INFO LIST ##########
HOSTNAME=`hostname`
BACK_DATE1=`date +%Y%m%d`
BACK_DATE2=`date +%Y-%m-%d_%H:%M:%S`
BACK_TIME=`date +%H:%M:%S.%3N`
########## Backup directory path ##########
OPS_BACK_DIR="/root/OPS"
OPS_LOG_DIR="${OPS_BACK_DIR}/1.SCRIPT/script_log/${HOSTNAME}_${BACK_DATE1}_snapshot.log"
IMG_BACK_DIR="/OPS/img_back"
KEY_AUTH_DIR="${OPS_BACK_DIR}/0.AUTH"
########## Keystone LIST ##########
#User(Teanet ID) command openrc!!!
source ${KEY_AUTH_DIR}/admin-openrc
INS_NAMES=(`nova list | awk '{print $4}' | sed '/^$/d' | sort -u | sed -n '1,$p'`)
########## Compute instance -> Snapshot -> Download ##########
for name in ${INS_NAMES[@]}
do
echo "${name} snapshot (image-create) Start!!!"
echo "nova image-create --poll ${name} ${name}_back"
nova image-create --poll ${name} ${name}_back
#daily 2 snapshot (ex test vm instance backup total 2 snapshots) test_back, test_back2 (x) test_back, test_back (o)
case `echo $?` in
0 )
echo "${name} snapshot (image-create) Success -> glance iamge-donwload command Start!!!"
IMG_UUID=`glance image-list | grep ${name}_back | awk '{print $2}'`
echo "glance image-download --file ${IMG_BACK_DIR}/${name}_back --progress ${IMG_UUID}"
glance image-download --file ${IMG_BACK_DIR}/${name}_back --progress ${IMG_UUID}
if [ `echo $?` -ne 0 ] ; then
echo "Failed image donwload for VM : ${name}"
fi
echo "${name} image download Success"
sleep 2
;;
* )
echo "${name} nova image-create command Failed -> nova backup commnad Start!!!"
echo "nova backup ${name} ${BACK_DATE1}_${name}_back daily 2"
nova backup ${name} ${BACK_DATE1}_${name}_back daily 2
case `echo $?` in
0 )
echo "${name} snapshot (backup) Success -> glance iamge-donwload command Start!!!"
IMG_UUID=`glance image-list | grep ${name}_back | awk '{print $2}'`
echo "glance image-download --file ${IMG_BACK_DIR}/${name}_back --progress ${IMG_UUID}"
glance image-download --file ${IMG_BACK_DIR}/${name}_back --progress ${IMG_UUID}
if [ `echo $?` -ne 0 ] ; then
echo "Failed image donwload for VM : ${name}"
fi
echo "${name} image download Success"
sleep 2
;;
* )
echo "${name} nova backup command Failed -> Failed Create VM: ${name}"
;;
esac
;;
esac
done
'오픈스택' 카테고리의 다른 글
NOVA 백업 수행시 주의사항 (0) | 2020.05.06 |
---|---|
오픈스택 VM 백업 스크립트(Compute) (0) | 2020.04.27 |
댓글