付録B オーバークラウドの復元

B.1. オーバークラウドのコントロールプレーンサービスの復元

以下の手順では、オーバークラウドのデータベースと設定を復元します。このような場合には、ターミナルのウィンドウを 3 つ開いて、特定の操作を 3 つのコントローラーノードすべてで同時に実行できるようにすることを推奨します。また、高可用性の操作を実行するコントローラーノードを 1 台選択することもお勧めします。この手順では、このコントローラーノードを ブートストラップコントローラーノード と呼びます。

重要

この手順では、コントロールプレーンサービスのみを復元します。コンピュートノードのワークロードや Ceph Storage ノード上のデータの復元は含まれません。

手順

  1. メジャーバージョンのアップグレードの失敗から復元する場合には、全ノードで実行された yum トランザクションをすべて元に戻さなければならない場合があります。これには、各ノードで以下の操作が必要です。

    1. 以前のバージョンのリポジトリーを有効化します。以下に例を示します。

      # 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
    2. yum の履歴をチェックします。

      # sudo yum history list all

      アップグレードプロセス中に発生したトランザクションを特定します。これらの操作の大半は、コントローラーノードの 1 台で発生しているはずです (アップグレード中にブートストラップノードとして選択されていたコントローラーノード)。特定のトランザクションを確認する必要がある場合は、history info サブコマンドで表示してください。

      # sudo yum history info 25
      注記

      yum history list all で各トランザクションから実行したコマンドを表示するように強制するには、yum.conf ファイルで history_list_view=commands を設定します。

    3. アップグレードから発生した yum トランザクションをすべて元に戻します。以下に例を示します。

      # sudo yum history undo 25
      # sudo yum history undo 24
      # sudo yum history undo 23
      ...

      最後のトランザクションから開始して、降順に操作を継続するようにしてください。また、rollback オプションを使用すると、複数のトランザクションを 1 回の実行で元に戻すこともできます。たとえば、以下のコマンドは最後のトランザクションから 23 までのトランザクションをロールバックします。

      # sudo yum history rollback 23
      重要

      各トランザクションの取り消しを確認できるようにするには、rollback ではなく undo を使用することを推奨します。

    4. 関連する yum トランザクションが取り消されたら、全ノードで元の OpenStack Platform リポジトリーのみを有効化します。以下に例を示します。

      # sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
  2. データベースを復元します。

    1. ブートストラップコントローラーノードにデータベースのバックアップをコピーします。
    2. 全コントローラーノード上でデータベースポートへの接続を停止します。

      # MYSQLIP=$(hiera mysql_bind_host)
      # sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP

      これにより、ノードへのデータベーストラフィックがすべて分離されます。

    3. ブートストラップコントローラーノードで、Pacemaker による Galera の管理を無効にします。

      # pcs resource unmanage galera
    4. コントローラーノード上の /etc/my.cnf.d/galera.cnf から wsrep_cluster_address パラメーターをコメントアウトします。

      # grep wsrep_cluster_address /etc/my.cnf.d/galera.cnf
      # vi /etc/my.cnf.d/galera.cnf
    5. すべてのコントローラーノード上の MariaDB データベースを停止します。

      # mysqladmin -u root shutdown
      注記

      HAProxy から、データベースが無効になったという警告が表示される可能性があります。

    6. 既存の 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
    7. root の設定とクラスターのチェックを全コントローラーノード上のバックアップファイルに移動します。

      # sudo mv /root/.my.cnf /root/.my.cnf.old
      # sudo mv /etc/sysconfig/clustercheck /etc/sysconfig/clustercheck.old
    8. ブートストラップコントローラーノードで、Pacemaker が Galera クラスターを管理するように設定します。

      # pcs resource manage galera
      # pcs resource cleanup galera
    9. Galera クラスターがきちんと立ち上がるのを待ちます。以下のコマンドを実行して、全ノードがマスターとして設定されているかどうかを確認します。

      # watch "pcs status | grep -C3 galera"
      Master/Slave Set: galera-master [galera]
      Masters: [ overcloud-controller-0 overcloud-controller-1 overcloud-controller-2 ]

      クリーンアップの実行後に全コントローラーがマスターとして表示されない場合には、クリーンアップコマンドを再度実行してください。

      # pcs resource cleanup galera
    10. ブートストラップコントローラーノードで、OpenStack データベースを復元します。これは、Galera によって他のコントローラーノードに複製されます。

      # mysql -u root < openstack_database.sql
    11. ブートストラップコントローラーノードで、ユーザーとパーミッションを復元します。

      # mysql -u root < grants.sql
    12. ブートストラップコントローラーノードで、データベースのパスワードを元のパスワードに再設定します。

      # /usr/bin/mysqladmin -u root password "$(hiera mysql::server::root_password)"
    13. ブートストラップコントローラーノードで、pcs status を実行して Galera リソースを表示します。

      # pcs status | grep -C3 galera

      このコマンドでエラーが表示される場合があります。これは、データベースが間違ったユーザー名とパスワードを使用して接続し、データベースのステータスをポーリングするようになったことが理由です。全コントローラーノードで、データベースの設定を復元します。

      # sudo mv /root/.my.cnf.old /root/.my.cnf
      # sudo mv /etc/sysconfig/clustercheck.old /etc/sysconfig/clustercheck
    14. 各コントローラーノードのクラスターチェックをローカルでテストします。

      # /bin/clustercheck
    15. ブートストラップコントローラーノードで、Pacemaker のクリーンアップを実行して、Galera の状態を再度プロービングするようにします。

      # pcs resource cleanup galera
    16. 各コントローラーノードでクラスターのチェックをテストします。

      # curl overcloud-controller-0:9200
      # curl overcloud-controller-1:9200
      # curl overcloud-controller-2:9200
    17. 各ノードからファイアウォールルールを削除して、サービスがデータベースへのアクセスを復元するようにします。

      # sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
    18. コントローラーノード上の /etc/my.cnf.d/galera.cnf から wsrep_cluster_address パラメーターをコメント解除します。

      # vi /etc/my.cnf.d/galera.cnf
  3. ファイルシステムを復元します。

    1. 各コントローラーノードのバックアップ tar ファイルを一時ディレクトリーにコピーして、圧縮された全データを展開します。

      # mkdir /var/tmp/filesystem_backup/data/
      # cd /var/tmp/filesystem_backup/data/
      # mv <backup_file>.tar.gz .
      # tar -xvzf --xattrs <backup_file>.tar.gz
      注記

      / ディレクトリーには直接展開しないようにしてください。直接展開すると、現在のファイルシステムが上書きされてしまいます。一時ディレクトリーで抽出することを推奨します。

    2. /usr/libexec/os-apply-config/templates/etc/os-net-config/config.json ファイルを復元します。

      $ cp /var/tmp/filesystem_backup/data/usr/libexec/os-apply-config/templates/etc/os-net-config/config.json /usr/libexec/os-apply-config/templates/etc/os-net-config/config.json
    3. 設定ファイルが必要な場合には、このディレクトリーを保持します。
  4. redis リソースをクリーンアップします。

    # pcs resource cleanup redis
  5. オーバークラウドのコントロールプレーンのデータを復元した後には、関連する各サービスが有効化されて正しく実行されていることを確認します。

    1. コントローラーノード上の高可用性サービスの場合:

      # pcs resource enable [SERVICE]
      # pcs resource cleanup [SERVICE]
    2. コントローラーおよびコンピュートノード上のシステムサービスの場合:

      # systemctl start [SERVICE]
      # systemctl enable [SERVICE]

以下の項には、有効にすべきサービスについての参考情報を記載します。

B.2. 復元した高可用性サービス

復元の後に OpensTack Platform 10 のコントローラーノードでアクティブにする必要のある高可用性サービスの一覧は以下のとおりです。これらのサービスのいずれかが無効化されている場合には、以下のコマンドで有効化します。

# pcs resource enable [SERVICE]
# pcs resource cleanup [SERVICE]
コントローラーサービス

galera

haproxy

openstack-cinder-volume

rabbitmq

redis

B.3. コントローラーサービスの復元

復元の後に OpensTack Platform 10 のコントローラーノードでアクティブにする必要のある Systemd のコアサービスの一覧は以下のとおりです。これらのサービスのいずれかが無効化されている場合には、以下のコマンドで有効化します。

# systemctl start [SERVICE]
# systemctl enable [SERVICE]
コントローラーサービス

httpd

memcached

neutron-dhcp-agent

neutron-l3-agent

neutron-metadata-agent

neutron-openvswitch-agent

neutron-ovs-cleanup

neutron-server

ntpd

openstack-aodh-evaluator

openstack-aodh-listener

openstack-aodh-notifier

openstack-ceilometer-central

openstack-ceilometer-collector

openstack-ceilometer-notification

openstack-cinder-api

openstack-cinder-scheduler

openstack-glance-api

openstack-glance-registry

openstack-gnocchi-metricd

openstack-gnocchi-statsd

openstack-heat-api-cfn

openstack-heat-api-cloudwatch

openstack-heat-api

openstack-heat-engine

openstack-nova-api

openstack-nova-conductor

openstack-nova-consoleauth

openstack-nova-novncproxy

openstack-nova-scheduler

openstack-swift-account-auditor

openstack-swift-account-reaper

openstack-swift-account-replicator

openstack-swift-account

openstack-swift-container-auditor

openstack-swift-container-replicator

openstack-swift-container-updater

openstack-swift-container

openstack-swift-object-auditor

openstack-swift-object-expirer

openstack-swift-object-replicator

openstack-swift-object-updater

openstack-swift-object

openstack-swift-proxy

openvswitch

os-collect-config

ovs-delete-transient-ports

ovs-vswitchd

ovsdb-server

pacemaker

B.4. オーバークラウドの Compute サービスの復元

復元の後に OpensTack Platform 10 のコンピュートノードでアクティブにする必要のある Systemd のコアサービスは以下のとおりです。これらのサービスのいずれかが無効化されている場合には、以下のコマンドで有効化します。

# systemctl start [SERVICE]
# systemctl enable [SERVICE]
Compute サービス

neutron-openvswitch-agent

neutron-ovs-cleanup

ntpd

openstack-ceilometer-compute

openstack-nova-compute

openvswitch

os-collect-config