본문 바로가기
오픈스택

오픈스택 VM 백업 스크립트(Controller)

by 좀빅 2020. 4. 27.

오픈스택 서버 장애 시 복구를 위한 환경설정 파일 및 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

댓글