목차

RHEV 3.6 Backup / Restore

이강우 2016/04/16 01:10

사전 준비사항

Self-Hosted Engine인 경우에는 Maintenance mode 로 변경후 진행한다.

Self Host 서버에서 아래 명령어를 입력하여 Manager VM을 maintenance상태로 변경한다.

hosted-engine --set-maintenance --mode=global

RHEV Backup / Restore 는 동일 버전에서만 가능하다. 즉, 3.5 백업데이터는 3.6에서 복구가 되지 않는다.

백업 절차

Manager 서버에 접속하여 아래 명령어로 백업 파일을 생성한다.

[root@host]# engine-backup --scope=all --mode=backup --file=BACKUP_FILE --log=LOG_FILE

복구 절차

이 절에서는 자체 호스트 엔진 환경을 백업하고 새로 설치된 호스트에 복원하는 방법에 대해 설명합니다.
지원되는 백업 방법은 엔진 백업 도구를 사용하며 Red Hat Enterprise Virtualization Manager 가상 시스템 만 백업 할 수는 있지만 Manager 가상 시스템을 포함하는 호스트는 백업 할 수 없습니다.
자체 호스트 엔진 환경을 백업 및 복원하려면 다음과 같은 주요 작업이 필요합니다.

  1. 원래의 Red Hat Enterprise Virtualization Manager 구성 설정과 데이터베이스 내용을 백업하십시오.
  2. 새로 설치된 Red Hat Enterprise Linux 호스트를 만들고 호스트 된 엔진 배치 스크립트를 실행하십시오.
  3. 새 Manager 가상 시스템에서 Red Hat Enterprise Virtualization Manager 구성 설정 및 데이터베이스 컨텐츠를 복원하십시오.
  4. 비 작동 상태의 호스트 엔진 호스트를 제거하고 복원 된 자체 호스트 엔진 환경에 다시 설치합니다.

새로 구성된 RHEVM에 복원하기

우선 새로 구성된 RHEVM을 관리 모드로 변경한다.
Self host 에서 아래 명령어로 maintenance 상태로 변경한다.

[root@host1 ~]# hosted-engine --set-maintenance --mode=global

그다음 RHEVM 서버에 접속하여 ovirt-engine을 중지 시킨다.

[root@host]# service ovirt-engine stop

[root@host]# engine-cleanup 

[ INFO  ] Stage: Initializing
[ INFO  ] Stage: Environment setup
          Configuration files: ['/etc/ovirt-engine-setup.conf.d/10-packaging-wsp.conf', '/etc/ovirt-engine-setup.conf.d/10-packaging.conf', '/etc/ovirt-engine-setup.conf.d/20-setup-ovirt-post.conf']
          Log file: /var/log/ovirt-engine/setup/ovirt-engine-remove-20170208102356-1jfyw3.log
          Version: otopi-1.3.2 (otopi-1.3.2-1.el6ev)
[ INFO  ] Stage: Environment packages setup
[ INFO  ] Stage: Programs detection
[ INFO  ] Stage: Environment customization
          Do you want to remove all components? (Yes, No) [Yes]: 
         
          --== PRODUCT OPTIONS ==--
         
          Do you want to remove Engine database content? All data will be lost (Yes, No) [No]: yes
[ INFO  ] Stage: Setup validation
          All the installed ovirt components are about to be removed, data will be lost (OK, Cancel) [Cancel]: ok
[ INFO  ] Stage: Transaction setup
[ INFO  ] Stopping engine service
[ INFO  ] Stopping ovirt-fence-kdump-listener service
[ INFO  ] Stopping websocket-proxy service
[ INFO  ] Stage: Misc configuration
[ INFO  ] Stage: Package installation
[ INFO  ] Stage: Misc configuration
[ INFO  ] Backing up PKI configuration and keys
[ INFO  ] Backing up database localhost:engine to '/var/lib/ovirt-engine/backups/engine-20170208102416.PcFb92.dump'.
[ INFO  ] Clearing Engine database engine
[ INFO  ] Removing files
[ INFO  ] Reverting changes to files
[ INFO  ] Stage: Transaction commit
[ INFO  ] Stage: Closing up
         
          --== SUMMARY ==--
         
          A backup of the Engine database is available at /var/lib/ovirt-engine/backups/engine-20170208102416.PcFb92.dump
          ovirt-engine has been removed
          A backup of PKI configuration and keys is available at /var/lib/ovirt-engine/backups/engine-pki-201702081024152OjLvC.tar.gz
          Engine setup successfully cleaned up
         
          --== END OF SUMMARY ==--
         
[ INFO  ] Stage: Clean up
          Log file is located at /var/log/ovirt-engine/setup/ovirt-engine-remove-20170208102356-1jfyw3.log
[ INFO  ] Generating answer file '/var/lib/ovirt-engine/setup/answers/20170208102423-cleanup.conf'
[ INFO  ] Stage: Pre-termination
[ INFO  ] Stage: Termination
[ INFO  ] Execution of cleanup completed successfully

다음은 설치된 DB암호를 변경하도록 한다. 기존 패스워드가 뭔지 알수 없는경우도 있으므로 무조건 변경하는것이 편하다.

[root@manager ~]# su - postgres -c psql
psql (8.4.20)
Type "help" for help.

postgres=# alter role engine encrypted password 'PASSWORD';
ALTER ROLE
postgres-# \q

백업받은 데이터를 복원한다.


[root@host]# engine-backup --mode=restore --scope=all --file=BACKUP_FILE --log=LOG_FILE --change-db-credentials --db-host=localhost --db-name=engine --db-user=engine --db-password --restore-permissions

# RHEV 3.5 의 경우 --restore-permissions 옵션은 제외하도록 한다.

Enter Engine database password: 
Preparing to restore:
- Setting credentials for Engine database 'engine'
- Unpacking file 'rhevm_backup'
Restoring:
- Files
- Engine database 'engine'
Rewriting /etc/ovirt-engine/engine.conf.d/10-setup-database.conf
You should now run engine-setup.
Done.


[root@host]# engine-setup 


[root@host1 ~]# service ovirt-engine restart

정상적으로 복구가 되었고 Manager UI에서 모든 하이퍼바이저와 가상머신의 상태가 정상적으로 수집 / 출력 된다면 완료된것이다.

마지막으로 self-hosted engine을 다시 활성화 시켜주도록 한다.

[root@host1 ~]# hosted-engine --set-maintenance --mode=none

script

본 스크립트 파일은 위의 절차를 예제로 만들어본 것 뿐으로서 정확한 조건하에서만 정상적으로 동작합니다.
따라서 본 스크립트는 참고용으로만 사용할것을 권장드리며 위의 절차대로 한단계씩 테스트 해보시기 바랍니다.

#!/bin/bash
# Usage : restore.sh DB_PASS RESTORE_FILE
#

if [ $# -ne 2 ]
then
	echo "Usage : restore.sh <DB_PASS> <RESTORE_FILE>";
	exit 1;
fi

PASSWORD=$1
RESTORE_FILE=$2

####### check daemon
echo "check ovirt-engine daemon..."
service ovirt-engine status
if [ $? -ne 3 ]
then
	echo "Service ovirt-engine is not stopped.";
	echo "Service ovirt-engine daemon MUST stop.";
	echo "Exit";
	exit 1;
fi
 
engine-cleanup << EOF
yes
ok
ok
EOF

if [ $? -ne 0 ]
then
	echo "engine-cleanup is not completed";
	echo "Exit";
	exit 1;
fi

su - postgres -c psql << EOF
alter role engine encrypted password '$PASSWORD';
\q
EOF

if [ $? -ne 0 ]
then
	echo "db password is not set";
	echo "Exit";
	exit 1;
fi

engine-backup --mode=restore --scope=all --file=$RESTORE_FILE --log=restore.log --change-db-credentials --db-host=localhost --db-name=engine --db-user=engine --db-password=$PASSWORD --restore-permissions

engine-setup << EOF
yes
no
ok
EOF

echo "Restore Done"

참고사항 - DB Corruption

가끔 engine-cleanup이나 engine-setup이 제대로 안되는경우가 있는데 이런경우 database가 꼬인경우일 수도 있다.
psql로 들어가 database list를 살펴보기 바란다.

[root@host2 ~]# su - postgres -c psql
psql (8.4.20)
Type "help" for help.

postgres=# \l
                                              List of databases
         Name          |         Owner         | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------------------+-----------------------+----------+-------------+-------------+-----------------------
 engine_20160416011028 | engine_20160416011028 | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 engine_20160416011808 | engine_20160416011808 | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres              | postgres              | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0             | postgres              | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                                                      : postgres=CTc/postgres
 template1             | postgres              | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                                                      : postgres=CTc/postgres
(5 rows)

postgres=# drop database engine_20160416011028;
DROP DATABASE
postgres=# drop database engine_20160416011808;
DROP DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
(3 rows)

postgres=# \q

참고사항 - Memory Size

복구하고자 하는 대상 시스템의 메모리가 원본 시스템의 메모리보다 적을경우 서비스 기동에 문제가 생기는 경우가 있다.

engine-setup 과정에서 오류가 발생하면서 /var/log/messages 의 내용에 아래와 같은 오류가 발생한다.

Apr 21 17:02:53 testvm002 2016-04-21 17:02:53,974 ovirt-engine: ERROR run:532 Error: Cannot detect JBoss version

해결하는 방법은 복구과정중 engine-setup 하기 전 아래의 /etc/ovirt-engine/engine.conf.d/10-setup-java.conf파일을 열어 메모리 사이즈를 조정해주면 해결 된다.

ENGINE_HEAP_MIN="4096M"  # 시스템 메모리 크기에 맞게 적당히 조절해준다.
ENGINE_HEAP_MAX="4096M"

아래는 기본적으로 oVirt에서 자동으로 잡아주는 힙 사이즈 크기이다.

물리 메모리 크기 힙사이즈
8GB 1964M
32GB 7959M
256GB 64565M