第11章 Controller ノードの置き換え

特定の状況では、高可用性クラスター内の Controller ノードに障害が発生することがあります。その場合は、その Controller ノードをクラスターから削除して新しい Controller ノードに置き換える必要があります。

以下のシナリオの手順を実施して、Controller ノードを置き換えます。Controller ノードを置き換えるプロセスでは、openstack overcloud deploy コマンドを実行し、 Controller ノードを置き換えるリクエストでオーバークラウドを更新します。

重要

以下の手順は、高可用性環境にのみ適用されます。Controller ノード 1 台の場合には、この手順は使用しないでください。

11.1. Controller 置き換えの準備

オーバークラウドの Controller ノードを置き換える前に、Red Hat OpenStack Platform 環境の現在の状態をチェックしておくことが重要です。このチェックをしておくと、Controller の置き換えプロセス中に複雑な事態が発生するのを防ぐことができます。以下の事前チェックリストを使用して、Controller ノードの置き換えを実行しても安全かどうかを確認してください。チェックのためのコマンドはすべてアンダークラウドで実行します。

手順

  1. アンダークラウドで、overcloud スタックの現在の状態をチェックします。

    $ source stackrc
    $ openstack overcloud status

    overcloud スタックの deployemnt ステータスが DEPLOY_SUCCESS である場合にのみ続行します。

  2. データベースクライアントツールをインストールします。

    $ sudo dnf -y install mariadb
  3. root ユーザーのデータベースへのアクセス権限を設定します。

    $ sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
  4. アンダークラウドデータベースのバックアップを実行します。

    $ mkdir /home/stack/backup
    $ sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
  5. アンダークラウドに、新規ノードプロビジョニング時のイメージのキャッシュと変換に対応できる 10 GB の空きストレージ領域があることを確認します。

    $ df -h
  6. 新規 Controller ノード用に IP アドレスを再利用する場合は、古い Controller が使用したポートを削除するようにしてください。

    $ openstack port delete <port>
  7. Controller ノードで実行中の Pacemaker の状態をチェックします。たとえば、実行中の Controller ノードの IP アドレスが 192.168.0.47 の場合には、以下のコマンドで Pacemaker のステータスを表示します。

    $ ssh tripleo-admin@192.168.0.47 'sudo pcs status'

    この出力には、既存のノードで動作中のサービスおよび障害の発生しているノードで停止しているサービスがすべて表示されます。

  8. オーバークラウド MariaDB クラスターの各ノードで以下のパラメーターをチェックします。

    • wsrep_local_state_comment: Synced
    • wsrep_cluster_size: 2

      実行中の Controller ノードで以下のコマンドを使用して、パラメーターをチェックします。以下の例では、Controller ノードの IP アドレスは、それぞれ 192.168.0.47 と 192.168.0.46 です。

      $ for i in 192.168.0.46 192.168.0.47 ; do echo "*** $i ***" ; ssh tripleo-admin@$i "sudo podman exec \$(sudo podman ps --filter name=galera-bundle -q) mysql -e \"SHOW STATUS LIKE 'wsrep_local_state_comment'; SHOW STATUS LIKE 'wsrep_cluster_size';\""; done
  9. RabbitMQ のステータスをチェックします。たとえば、実行中の Controller ノードの IP アドレスが 192.168.0.47 の場合には、以下のコマンドで RabbitMQ のステータスを表示します。

    $ ssh tripleo-admin@192.168.0.47 "sudo podman exec \$(sudo podman ps -f name=rabbitmq-bundle -q) rabbitmqctl cluster_status"

    running_nodes キーには、障害が発生しているノードは表示されず、稼働中のノード 2 台のみが表示されるはずです。

  10. フェンシングが有効な場合は、無効にします。たとえば、実行中の Controller ノードの IP アドレスが 192.168.0.47 の場合には、以下のコマンドを実行してフェンシングのステータスを確認します。

    $ ssh tripleo-admin@192.168.0.47 "sudo pcs property show stonith-enabled"

    フェンシングを無効にするには、以下のコマンドを実行します。

    $ ssh tripleo-admin@192.168.0.47 "sudo pcs property set stonith-enabled=false"
  11. 障害が発生したコントローラーノードにログインし、実行中のすべての nova_* コンテナーを停止します。

    $ sudo systemctl stop tripleo_nova_api.service
    $ sudo systemctl stop tripleo_nova_api_cron.service
    $ sudo systemctl stop tripleo_nova_compute.service
    $ sudo systemctl stop tripleo_nova_conductor.service
    $ sudo systemctl stop tripleo_nova_metadata.service
    $ sudo systemctl stop tripleo_nova_placement.service
    $ sudo systemctl stop tripleo_nova_scheduler.service
  12. オプション: virt ドライバーとして Bare Metal サービス (ironic) を使用している場合は、削除する Controller に instances.host が設定されているベアメタルインスタンスのセルデータベースのサービスエントリーを手動で更新する必要があります。レッドハットサポートにお問い合わせください。

    注記

    Bare Metal サービス (ironic) を virt ドライバーとして使用する場合のセルデータベースのこの手動更新は、BZ2017980 が完了するまで、ノードのリバランスを確保するための一時的な回避策です。