부록 B. 오버클라우드 복원
B.1. 오버클라우드 컨트롤 플레인 서비스 복원 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 오버클라우드 데이터베이스 및 구성의 백업을 복원합니다. 이 경우 세 개의 컨트롤러 노드 모두에서 특정 작업을 동시에 수행할 수 있도록 3개의 터미널 창을 여는 것이 좋습니다. 또한 고가용성 작업을 수행하기 위해 컨트롤러 노드를 선택하는 것이 좋습니다. 이 절차에서는 이 컨트롤러 노드를 부트스트랩 컨트롤러 노드로 참조합니다.
이 절차에서는 컨트롤 플레인 서비스만 복원합니다. Ceph Storage 노드의 복원 계산 노드 워크로드 또는 데이터는 포함되지 않습니다.
Red Hat은 OVS(Open vSwitch) 및 기본 OVN(Open Virtual Network)과 같은 기본 SDN을 사용하여 Red Hat OpenStack Platform 백업을 지원합니다. 타사 SDN에 대한 자세한 내용은 타사 SDN 문서를 참조하십시오.
절차
Pacemaker를 중지하고 컨테이너화된 모든 서비스를 제거합니다.
부트스트랩 컨트롤러 노드에 로그인하고 pacemaker 클러스터를 중지합니다.
# sudo pcs cluster stop --all클러스터가 완전히 종료될 때까지 기다립니다.
# sudo pcs status모든 컨트롤러 노드에서 OpenStack 서비스의 모든 컨테이너를 제거합니다.
# docker stop $(docker ps -a -q) # docker rm $(docker ps -a -q)
실패한 주요 버전 업그레이드에서 복원하는 경우 모든 노드에서 발생한
yum트랜잭션을 취소해야 할 수 있습니다. 이 작업은 각 노드에서 다음 작업을 수행해야 합니다.이전 버전의 리포지토리를 활성화합니다. 예를 들면 다음과 같습니다.
# sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms # sudo subscription-manager repos --enable=rhel-7-server-openstack-11-rpms # sudo subscription-manager repos --enable=rhel-7-server-openstack-12-rpms다음 Ceph 리포지토리를 활성화합니다.
# sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-tools-rpms # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-mon-rpmsyum기록을 확인합니다.# sudo yum history list all업그레이드 프로세스 중에 발생한 트랜잭션을 식별합니다. 이러한 작업은 대부분 컨트롤러 노드 중 하나에서 수행됩니다(업그레이드 중에 부트스트랩 노드로 선택한 컨트롤러 노드). 특정 트랜잭션을 확인해야 하는 경우
history info하위 명령을 사용하여 확인합니다.# sudo yum history info 25참고yum history를 모두 나열하여 각 트랜잭션에서 실행된 명령을 표시하려면yum.conf파일에history_list_view=commands를 설정합니다.업그레이드 이후 발생한 모든
yum트랜잭션을 되돌립니다. 예를 들면 다음과 같습니다.# sudo yum history undo 25 # sudo yum history undo 24 # sudo yum history undo 23 ...마지막 트랜잭션에서 시작하여 내림차순으로 계속합니다.
롤백옵션을 사용하여 한 번 실행에서 여러 트랜잭션을 되돌릴 수도 있습니다. 예를 들어 다음 명령은 마지막 트랜잭션에서 23으로 트랜잭션을 롤백합니다.# sudo yum history rollback 23중요각 트랜잭션의 역추적을 확인할 수 있도록
롤백대신 각 트랜잭션에 대해실행 취소를 사용하는 것이 좋습니다.관련
yum트랜잭션이 되돌리면 모든 노드에서 원래 OpenStack Platform 리포지토리만 활성화합니다. 예를 들면 다음과 같습니다.# sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms다음 Ceph 리포지토리를 비활성화합니다.
# sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms
데이터베이스를 복원하십시오.
- 데이터베이스 백업을 부트스트랩 컨트롤러 노드에 복사합니다.
모든 컨트롤러 노드에서 데이터베이스 포트에 대한 외부 연결을 중지합니다.
# MYSQLIP=$(hiera -c /etc/puppet/hiera.yaml mysql_bind_host) # sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP이렇게 하면 모든 데이터베이스 트래픽을 노드에 격리합니다.
데이터베이스 복제를 일시적으로 비활성화합니다. 모든 컨트롤러 노드에서
/etc/my.cnf.d/galera.cnf파일을 편집합니다.# vi /etc/my.cnf.d/galera.cnf다음과 같이 변경합니다.
-
wsrep_cluster_address매개 변수를 주석 처리합니다. -
wsrep_provider를none으로 설정합니다
-
-
/etc/my.cnf.d/galera.cnf파일을 저장합니다. 모든 컨트롤러 노드에서 MariaDB 데이터베이스가 비활성화되어 있는지 확인합니다. OpenStack Platform 13으로 업그레이드하는 동안 MariaDB 서비스는 이전에 비활성화한 컨테이너화된 서비스로 이동합니다. 서비스가 호스트에서 프로세스로 실행되지 않는지 확인합니다.
# mysqladmin -u root shutdown참고HAProxy에서 데이터베이스가 비활성화되었다는 경고가 표시될 수 있습니다.
기존 MariaDB 데이터 디렉터리를 이동하고 모든 컨트롤러 노드에서 새 데이터 디렉토리를 준비합니다.
# mv /var/lib/mysql/ /var/lib/mysql.old # mkdir /var/lib/mysql # chown mysql:mysql /var/lib/mysql # chmod 0755 /var/lib/mysql # mysql_install_db --datadir=/var/lib/mysql --user=mysql # chown -R mysql:mysql /var/lib/mysql/ # restorecon -R /var/lib/mysql모든 컨트롤러 노드에서 데이터베이스를 수동으로 시작합니다.
# mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &모든 컨트롤러 노드에서 이전 암호를 Reset the database password를 가져옵니다.
# OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'") # mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"모든 컨트롤러 노드에서 데이터베이스를 중지합니다.
# /usr/bin/mysqladmin -u root shutdown--skip-grant-tables옵션 없이 부트스트랩 컨트롤러 노드에서 데이터베이스를 수동으로 시작합니다.# mysqld_safe --skip-networking --wsrep-on=OFF &부트스트랩 컨트롤러 노드에서 OpenStack 데이터베이스를 복원합니다. 이 작업은 나중에 다른 컨트롤러 노드에 복제됩니다.
# mysql -u root < openstack_database.sql부트스트랩 컨트롤러 노드에서 사용자 및 권한을 복원합니다.
# mysql -u root < grants.sql다음 명령을 사용하여 부트스트랩 컨트롤러 노드를 종료합니다.
# mysqladmin shutdown데이터베이스 복제를 활성화합니다. 모든 컨트롤러 노드에서
/etc/my.cnf.d/galera.cnf파일을 편집합니다.# vi /etc/my.cnf.d/galera.cnf다음과 같이 변경합니다.
-
wsrep_cluster_address매개 변수의 주석을 제거합니다. -
wsrep_provider를/usr/lib64/galera/libgalera_smm.so로 설정합니다.
-
-
/etc/my.cnf.d/galera.cnf파일을 저장합니다. 부트스트랩 노드에서 데이터베이스를 실행합니다.
# /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock --datadir=/var/lib/mysql --log-error=/var/log/mysql_cluster.log --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm:// &ws
rep-cluster-address옵션에 노드 부족으로 인해 Galera가 새 클러스터를 생성하고 부트스트랩 노드를 마스터 노드로 설정합니다.노드의 상태를 확인합니다.
# clustercheck이 명령에서
Galera 클러스터 노드가 동기화됨을 보고해야 합니다./var/log/mysql_cluster.log파일에 오류가 있는지 확인합니다.나머지 컨트롤러 노드에서 데이터베이스를 시작합니다.
$ /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock --datadir=/var/lib/mysql --log-error=/var/log/mysql_cluster.log --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm://overcloud-controller-0,overcloud-controller-1,overcloud-controller-2 &ws
rep-cluster-address 옵션에 노드가포함되면 새 클러스터에 노드를 추가하고 마스터의 콘텐츠를 동기화합니다.각 노드의 상태를 주기적으로 확인합니다.
# clustercheck모든 노드가 동기화 작업을 완료하면 이 명령에서 각 노드의
Galera 클러스터 노드가 동기화됨을보고해야 합니다.모든 노드에서 데이터베이스를 중지합니다.
$ mysqladmin shutdown서비스에 대한 각 노드에서 방화벽 규칙을 제거하여 데이터베이스에 대한 액세스를 복원합니다.
# sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
Pacemaker 구성을 복원합니다.
- Pacemaker 아카이브를 부트스트랩 노드에 복사합니다.
- 부트 스트랩 노드에 로그인합니다.
구성 복원 명령을 실행합니다.
# pcs config restore pacemaker_controller_backup.tar.bz2
파일 시스템을 복원하십시오.
각 컨트롤러 노드의 백업
tar파일을 임시 디렉터리에 복사하고 모든 데이터 압축을 해제합니다.# mkdir /var/tmp/filesystem_backup/ # cd /var/tmp/filesystem_backup/ # mv <backup_file>.tar.gz . # tar --xattrs --xattrs-include='*.*' -xvzf <backup_file>.tar.gz참고/디렉토리로 직접 추출하지 마십시오. 이렇게 하면 현재 파일 시스템이 재정의됩니다. 임시 디렉터리에 파일을 추출하는 것이 좋습니다.os-*-config파일을 복원하고os-collect-config를 다시 시작합니다.# cp -rf /var/tmp/filesystem_backup/var/lib/os-collect-config/* /var/lib/os-collect-config/. # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-apply-config/* /usr/libexec/os-apply-config/. # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-refresh-config/* /usr/libexec/os-refresh-config/. # systemctl restart os-collect-configPuppet hieradata 파일을 복원합니다.
# cp -r /var/tmp/filesystem_backup/etc/puppet/hieradata /etc/puppet/hieradata # cp -r /var/tmp/filesystem_backup/etc/puppet/hiera.yaml /etc/puppet/hiera.yaml- 구성 파일이 필요한 경우 이 디렉터리를 유지합니다.
redis 리소스를 복원합니다.
- Redis 덤프를 각 컨트롤러 노드에 복사합니다.
Redis 덤프를 각 컨트롤러의 원래 위치로 이동합니다.
# mv dump.rdb /var/lib/redis/dump.rdbRedis 디렉터리에 권한을 복원하십시오.
# chown -R redis: /var/lib/redis
다음 디렉터리의 내용을 제거합니다.
# rm -rf /var/lib/config-data/puppet-generated/* # rm /root/.ffu_workaroundOpenStack Object Storage(swift) 서비스에 대한 권한을 복원합니다.
# chown -R swift: /srv/node # chown -R swift: /var/lib/swift # chown -R swift: /var/cache/swift-
언더클라우드에 로그인하고 OpenStack Platform 10
배포에서 원래 openstack overcloud deploy명령을 실행합니다. 원래 배포와 관련된 모든 환경 파일을 포함해야 합니다. - 배포가 완료될 때까지 기다립니다.
오버클라우드 컨트롤 플레인 데이터를 복원한 후 각 관련 서비스가 활성화되어 올바르게 실행되고 있는지 확인합니다.
컨트롤러 노드의 고가용성 서비스:
# pcs resource enable [SERVICE] # pcs resource cleanup [SERVICE]컨트롤러 및 계산 노드의 시스템 서비스의 경우 다음을 수행합니다.
# systemctl start [SERVICE] # systemctl enable [SERVICE]
다음 몇 섹션에서는 활성화해야 하는 서비스 참조를 제공합니다.