3.4. Galera 클러스터 수동 복원


Galera 클러스터가 복원 절차의 일부로 복원되지 않으면 Galera를 수동으로 복원해야 합니다.

참고

이 절차에서는 하나의 컨트롤러 노드에서 일부 단계를 수행해야 합니다. 절차를 진행하는 것과 동일한 컨트롤러 노드에서 다음 단계를 수행해야 합니다.

절차

  1. Controller-0 에서 Galera 클러스터 가상 IP를 검색합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
  2. 모든 컨트롤러 노드에서 가상 IP를 통해 데이터베이스 연결을 비활성화합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo iptables -I INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  3. Controller-0 에서 MySQL root 암호를 검색합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
  4. Controller-0 에서 Galera 리소스를 Unmanaged 모드로 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo pcs resource unmanage galera-bundle
  5. 모든 컨트롤러 노드에서 MySQL 컨테이너를 중지합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
  6. 모든 컨트롤러 노드에서 현재 디렉터리를 이동합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo mv /var/lib/mysql /var/lib/mysql-save
  7. 모든 컨트롤러 노드에 새 디렉토리 /var/lib/mysq 를 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ 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
  8. 모든 컨트롤러 노드에서 MySQL 컨테이너를 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
  9. 모든 컨트롤러 노드에서 MySQL 데이터베이스를 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ 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"
  10. 모든 컨트롤러 노드에서 데이터베이스를 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ 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" &
  11. 모든 컨트롤러 노드에서 .my.cnf Galera 구성 파일을 이동합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf /root/.my.cnf.bck"
  12. 모든 컨트롤러 노드에서 Galera root 암호를 재설정합니다.

    Copy to Clipboard Toggle word wrap
    $ 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;'"
  13. 모든 컨트롤러 노드에서 Galera 컨테이너 내부에 .my.cnf Galera 구성 파일을 복원합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"   \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf.bck /root/.my.cnf"
  14. Controller-0 에서 백업 데이터베이스 파일을 /var/lib/MySQL 에 복사합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo cp $BACKUP_FILE /var/lib/mysql
    $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
    참고

    이러한 파일의 경로는 /home/heat-admin/입니다.

  15. Controller-0 에서 MySQL 데이터베이스를 복원합니다.

    Copy to Clipboard Toggle word wrap
    $ 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\"  "
  16. 모든 컨트롤러 노드에서 데이터베이스를 종료합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
          --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
  17. Controller-0 에서 부트스트랩 노드를 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ 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:// &
  18. 검증: Controller-0에서 클러스터 상태를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
             --filter=name=galera-bundle) bash -c "clustercheck"

    다음 메시지가 표시되는지 확인합니다. "Galera 클러스터 노드가 동기화됨", 그렇지 않으면 노드를 다시 생성해야 합니다.

  19. Controller-0 에서 구성에서 클러스터 주소를 검색합니다.

    Copy to Clipboard Toggle word wrap
    $ 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}'
  20. 나머지 각 컨트롤러 노드에서 데이터베이스를 시작하고 클러스터를 검증합니다.

    1. 데이터베이스를 시작합니다.

      Copy to Clipboard Toggle word wrap
      $ 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 &
    2. MYSQL 클러스터의 상태를 확인합니다.

      Copy to Clipboard Toggle word wrap
      $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
               --filter=name=galera-bundle) bash -c "clustercheck"

      다음 메시지가 표시되는지 확인합니다. "Galera 클러스터 노드가 동기화됨", 그렇지 않으면 노드를 다시 생성해야 합니다.

  21. 모든 컨트롤러 노드에서 MySQL 컨테이너를 중지합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \
            /usr/bin/mysqladmin -u root shutdown
  22. 모든 컨트롤러 노드에서 다음 방화벽 규칙을 제거하여 가상 IP 주소를 통한 데이터베이스 연결을 허용합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo iptables -D  INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  23. 모든 컨트롤러 노드에서 MySQL 컨테이너를 다시 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=galera-bundle)
  24. 모든 컨트롤러 노드에서 clustercheck 컨테이너를 다시 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=clustercheck)
  25. Controller-0 에서 Galera 리소스를 관리 모드로 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo pcs resource manage galera-bundle

검증

  1. 서비스가 올바르게 실행 중인지 확인하려면 pacemaker의 상태를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ sudo pcs status
  2. Overcloud 상태를 보려면 OpenStack Integration Test Suite(tempest)를 사용합니다. 자세한 내용은 Integration Test Suite(tempest)를 사용하여 OpenStack 클라우드 검증 을 참조하십시오.
  3. 특정 노드 관련 문제가 의심되는 경우 cluster check를 사용하여 클러스터 상태를 확인하십시오.

    Copy to Clipboard Toggle word wrap
    $ sudo podman exec clustercheck /usr/bin/clustercheck
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.