4.4. Galera クラスターの手動による復元
復元手順の一環として Galera クラスターが復元されない場合は、Galera を手動で復元する必要があります。
以下の手順では、1 つのコントローラーノードでいくつかのステップを実施する必要があります。手順の実施と同じコントローラーノードで、これらのステップを実施してください。
手順
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 cluster node is synced のメッセージが表示されるのを確認してください。表示されない場合は、ノードを再作成する必要があります。
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 cluster node is synced のメッセージが表示されるのを確認してください。表示されない場合は、ノードを再作成する必要があります。
すべてのコントローラーノードで 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 リソースをmanagedモードに設定します。$ sudo pcs resource manage galera-bundle
検証
サービスが正常に実行されていることを確認するには、pacemaker のステータスを確認します。
$ sudo pcs status- オーバークラウドのステータスを確認するには、OpenStack Integration Test Suite (tempest) を使用します。詳細は、Validating your OpenStack cloud with the Integration Test Suite (tempest) を参照してください。
特定のノードで問題が疑われる場合は、
clustercheckでクラスターの状態を確認します。$ sudo podman exec clustercheck /usr/bin/clustercheck