PengX3 DB Backup

PengX(U-XEN)에서는 구성에 필요한 데이터를 DB(PostgreSQL)에 저장하고 있어, 정기적으로 DB 백업을 진행하여 데이터 소실을 예방하고 있습 니다.

구성도

백업이 진행 Node의 daily cronjob에 등록되어 매일 일정한 시각에 DB Backup이 진행됩니다.

  1. 1차 백업 : U-XEN의 DB 서버의 경우 별도의 관리노드의 VM으로 구동되어집니다. 해당 DB서버의 U-XEN DB를 Dump하여 Node의 OS영역 디스크에 백업합니다.
  2. 2차 백업 : 1차 백업과 동일한 방식으로 다른 Node에서 Dump를 진행합니다.

백업된 데이터는 총 2주간(14개) 저장되며, 2주가 넘은 데이터들은 자동 삭제됩니다.

백업 설정

script 설정

백업을 수행할 노드의 ~orchard/uxen/scripts/db_backup.sh 파일을 열어 아래의 부분을 환경에 맞게 설정합니다. (uxen3의 경우 /opt/uxen3/scripts/db_dbackup.sh) 일반적인 경우라면 UXEN의 설정값을 읽어들여 별도의 수정없이 Backup이 가능합니다. 다만, Backup 영역을 변경하거나 DB Dump가 정상적이지 않을경우 환경에 맞게 설정해야합니다.

UXEN_DIR="/opt/uxen3"
BACKUP_DIR="$UXEN_DIR/var/db_backup"
BACKUPLOG_DIR="$UXEN_DIR/var/log/db_backup"

DBHOST=$(grep "'HOST'" $UXEN_DIR/settings/production.py | awk -F"'" '{print $4}')
DBNAME=$(grep "'NAME'" $UXEN_DIR/settings/production.py | awk -F"'" '{print $4}')
DBUSER=$(grep "'USER'" $UXEN_DIR/settings/production.py | awk -F"'" '{print $4}')
DBPASSWORD=$(grep "'PASSWORD'" $UXEN_DIR/settings/production.py | awk -F"'" '{print $4}')

위의 Default값 대신 아래와 같이 수정합니다.

DBHOST="192.168.0.20"
DBNAME="uxen"
DBUSER="uxen"
DBPASSWORD="uxen_password"
  • DBHOST : U-XEN DB 서버 관리 IP
  • DBNAME : U-XEN DB 서버 Database 이름
  • DBUSER : U-XEN DB 서버 User
  • DBPASSWORD : U-XEN DB 서버 Password
  • BACKUP_DIR, BACKUPLOG_DIR : 백업(Dump)데이터가 저장될 디렉토리, 백업로그가 저장될 디렉토리

cronjob 등록

백업이 진행될 Node의 crontab에 backup script를 등록합니다. 아래의 경우는 매일 01:00로 등록한 예입니다. 데이터의 변동이 많지 않은 새벽 시간대에 진행하는 것이 좋습니다.

# crontab -e
0 1 * * * /home/orchard/uxen/scripts/db_backup.sh

uxen3의 경우는 아래와 같습니다.

# crontab -e
0 1 * * * /opt/uxen3/scripts/db_backup.sh

백업 확인

백업된 데이터는 ~orchard/uxen/var/db_backup이라는 directory에 DBNAME_YYYYMMDD.sql 파일로 저장됩니다. (uxen3의 경우 /opt/uxen3/var/db_backup) 총 2주(14개)간의 데이터가 저장되며 2주가 넘은 데이터를 자동으로 삭제됩니다. 백업된 데이터의 크기는 구성의 규모(노드, GVM, VM의 수)에 따라 비례하지만, 일반적으로 몇백 KB정도로 1MB 이내 크기입니다.

백업 로그

DB 백업 script는 작업시 로그를 기록합니다. 백업이 실패할 경우 로그를 확인하여 원인을 파악할 수 있습니다. 로그는 ~orchard/uxen/var/log/db_backup_YYYYMMDD.log에 (uxen3의 경우, /opt/uxen3/var/log/db_backup) 위치 합니다.

복구

데이터가 유실되어 복구가 필요하다면 아래의 명령으로 복구를 진행할수 있습니다. 백업된 기존 데이터를 덮어씌우는 작업이므로 신중하게 진행되어야하며, 복구 작업동의 데이터 변경을 위해 UXEN Daemon을 모두 내린뒤 작업해야합니다.

# pg_restore -h [DBHOST] -U [DBUSER] -w [DBNAME] -v "BACKUPDATA.sql"