4.4. Galera 클러스터 수동 복원
Galera 클러스터가 복원 절차의 일부로 복원되지 않으면 Galera를 수동으로 복원해야 합니다.
이 절차에서는 하나의 컨트롤러 노드에서 일부 단계를 수행해야 합니다. 절차를 진행하는 것과 동일한 컨트롤러 노드에서 다음 단계를 수행해야 합니다.
절차
Controller-0에서 Galera 클러스터 가상 IP를 검색합니다.$ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip모든 컨트롤러 노드에서 가상 IP를 통해 데이터베이스 연결을 비활성화합니다.
$ sudo iptables -I INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROPController-0에서 MySQL root 암호를 검색합니다.$ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_passwordController-0에서 Galera 리소스를Unmanaged모드로 설정합니다.$ sudo pcs resource unmanage galera-bundle모든 컨트롤러 노드에서 MySQL 컨테이너를 중지합니다.
$ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)모든 컨트롤러 노드에서 현재 디렉터리를 이동합니다.
$ sudo mv /var/lib/mysql /var/lib/mysql-save모든 컨트롤러 노드에 새 디렉토리
/var/lib/mysq를 생성합니다.$ sudo mkdir /var/lib/mysql $ sudo chown 42434:42434 /var/lib/mysql $ sudo chcon -t container_file_t /var/lib/mysql $ sudo chmod 0755 /var/lib/mysql $ sudo chcon -r object_r /var/lib/mysql $ sudo chcon -u system_u /var/lib/mysql모든 컨트롤러 노드에서 MySQL 컨테이너를 시작합니다.
$ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)모든 컨트롤러 노드에서 MySQL 데이터베이스를 생성합니다.
$ sudo podman exec -i $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysql_install_db --datadir=/var/lib/mysql --user=mysql --log_error=/var/log/mysql/mysql_init.log"모든 컨트롤러 노드에서 데이터베이스를 시작합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysqld_safe --skip-networking --wsrep-on=OFF --log-error=/var/log/mysql/mysql_safe.log" &모든 컨트롤러 노드에서
.my.cnfGalera 구성 파일을 이동합니다.$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mv /root/.my.cnf /root/.my.cnf.bck"모든 컨트롤러 노드에서 Galera root 암호를 재설정합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysql -uroot -e'use mysql;update user set password=PASSWORD(\"$ROOTPASSWORD\")where User=\"root\";flush privileges;'"모든 컨트롤러 노드에서 Galera 컨테이너 내부에
.my.cnfGalera 구성 파일을 복원합니다.$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mv /root/.my.cnf.bck /root/.my.cnf"Controller-0에서 백업 데이터베이스 파일을/var/lib/MySQL에 복사합니다.$ sudo cp $BACKUP_FILE /var/lib/mysql $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql참고이러한 파일의 경로는 /home/heat-admin/입니다.
Controller-0에서 MySQL 데이터베이스를 복원합니다.$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_FILE\" " $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_GRANT_FILE\" "모든 컨트롤러 노드에서 데이터베이스를 종료합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysqladmin shutdown"Controller-0에서 부트스트랩 노드를 시작합니다.$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \ /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/mysql_cluster.log --user=mysql --open-files-limit=16384 \ --wsrep-cluster-address=gcomm:// &검증: Controller-0에서 클러스터 상태를 확인합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"다음 메시지가 표시되는지 확인합니다. "Galera 클러스터 노드가 동기화됨", 그렇지 않으면 노드를 다시 생성해야 합니다.
Controller-0에서 구성에서 클러스터 주소를 검색합니다.$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "grep wsrep_cluster_address /etc/my.cnf.d/galera.cnf" | awk '{print $3}'나머지 각 컨트롤러 노드에서 데이터베이스를 시작하고 클러스터를 검증합니다.
데이터베이스를 시작합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) /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/mysql_cluster.log --user=mysql --open-files-limit=16384 \ --wsrep-cluster-address=$CLUSTER_ADDRESS &MYSQL 클러스터의 상태를 확인합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"다음 메시지가 표시되는지 확인합니다. "Galera 클러스터 노드가 동기화됨", 그렇지 않으면 노드를 다시 생성해야 합니다.
모든 컨트롤러 노드에서 MySQL 컨테이너를 중지합니다.
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \ /usr/bin/mysqladmin -u root shutdown모든 컨트롤러 노드에서 다음 방화벽 규칙을 제거하여 가상 IP 주소를 통한 데이터베이스 연결을 허용합니다.
$ sudo iptables -D INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP모든 컨트롤러 노드에서 MySQL 컨테이너를 다시 시작합니다.
$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)모든 컨트롤러 노드에서
clustercheck컨테이너를 다시 시작합니다.$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=clustercheck)Controller-0에서 Galera 리소스를관리모드로 설정합니다.$ sudo pcs resource manage galera-bundle
검증
서비스가 올바르게 실행 중인지 확인하려면 pacemaker의 상태를 확인합니다.
$ sudo pcs status- Overcloud 상태를 보려면 OpenStack Integration Test Suite(tempest)를 사용합니다. 자세한 내용은 Integration Test Suite(tempest)를 사용하여 OpenStack 클라우드 검증 을 참조하십시오.
특정 노드 관련 문제가 의심되는 경우 cluster
check를 사용하여 클러스터상태를 확인하십시오.$ sudo podman exec clustercheck /usr/bin/clustercheck