Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

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

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

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

重要

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

注記

Red Hat は、Open vSwitch (OVS) およびデフォルトの Open Virtual Network (OVN) などのネイティブ SDN を使用する Red Hat OpenStack Platform のバックアップをサポートします。サードパーティーの SDN についての詳細は、サードパーティーの SDN ドキュメントを参照してください。

手順

  1. Pacemaker を停止し、コンテナー化されたすべてのサービスを削除します。

    1. ブートストラップコントローラーノードにログインし、Pacemaker クラスターを停止します。

      # sudo pcs cluster stop --all
    2. クラスターが完全にシャットダウンするまで待ちます。

      # sudo pcs status
    3. すべてのコントローラーノードで、OpenStack サービスのコンテナーをすべて削除します。

      # docker stop $(docker ps -a -q)
      # docker rm $(docker ps -a -q)
  2. メジャーバージョンのアップグレードの失敗からリストアする場合には、全ノードで実行された 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. 以下の Ceph リポジトリーを有効にします。

      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-tools-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-mon-rpms
    3. yum 履歴をチェックします。

      # sudo yum history list all

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

      # sudo yum history info 25
      注記

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

    4. アップグレード以降に発生した 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 を使用することを推奨します。

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

      # sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
    6. 以下の Ceph リポジトリーを無効にします。

      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms
  3. データベースを復元します。

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

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

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

    3. 一時的にデータベースのレプリケーションを無効にします。すべてのコントローラーノードで /etc/my.cnf.d/galera.cnf ファイルを編集します。

      # vi /etc/my.cnf.d/galera.cnf

      以下の変更を加えます。

      • wsrep_cluster_address パラメーターをコメントアウトする
      • wsrep_providernone に設定する
    4. /etc/my.cnf.d/galera.cnf ファイルを保存します。
    5. すべてのコントローラーノードで MariaDB データベースが無効になっていることを確認します。OpenStack Platform 13 へのアップグレード中に、以前の手順で無効にした 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. すべてのコントローラーノードでデータベースを手動で起動します。

      # mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &
    8. 古いパスワードを取得し、すべてのコントローラーノードでデータベースのパスワードを再設定します。

      # OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'")
      # mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"
    9. すべてのコントローラーノードでデータベースを停止します。

      # /usr/bin/mysqladmin -u root shutdown
    10. ブートストラップコントローラーノードで、--skip-grant-tables オプションを指定せずに手動でデータベースを起動します。

      # mysqld_safe --skip-networking --wsrep-on=OFF &
    11. ブートストラップコントローラーノードで、OpenStack データベースを復元します。この後の手順で、このデータベースが他のコントローラーノードに複製されます。

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

      # mysql -u root < grants.sql
    13. 以下のコマンドを使用して、ブートストラップコントローラーノードをシャットダウンします。

      # mysqladmin shutdown
    14. データベースのレプリケーションを有効にします。すべてのコントローラーノードで /etc/my.cnf.d/galera.cnf ファイルを編集します。

      # vi /etc/my.cnf.d/galera.cnf

      以下の変更を加えます。

      • wsrep_cluster_address パラメーターをコメント解除する
      • wsrep_provider/usr/lib64/galera/libgalera_smm.so に設定する
    15. /etc/my.cnf.d/galera.cnf ファイルを保存します。
    16. ブートストラップノードでデータベースを実行します。

      # /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_cluster.log --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm:// &

      --wsrep-cluster-address オプションにノードを含めないと、Galera により新しいクラスターが作成され、ブートストラップノードがマスターノードになります。

    17. ノードのステータスを確認します。

      # clustercheck

      このコマンドにより、Galera cluster node is synced. という出力が表示されるはずです。エラーが発生した場合には、/var/log/mysql_cluster.log ファイルを確認してください。

    18. 残りのコントローラーノードでデータベースを起動します。

      $ /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_cluster.log  --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm://overcloud-controller-0,overcloud-controller-1,overcloud-controller-2 &

      --wsrep-cluster-address オプションにノードを含めると、新しいクラスターにノードが追加され、マスターからの内容と同期されます。

    19. 定期的に各ノードのステータスを確認します。

      # clustercheck

      全ノードの同期操作が完了したら、このコマンドにより、それぞれのノードについて Galera cluster node is synced. という出力が表示されるはずです。

    20. すべてのノードのデータベースを停止します。

      $ mysqladmin shutdown
    21. 各ノードからファイアウォールルールを削除して、サービスがデータベースへのアクセスを回復するようにします。

      # sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
  4. Pacemaker の設定を復元します。

    1. Pacemaker のアーカイブをブートストラップノードにコピーします。
    2. ブートストラップノードにログインします。
    3. 設定の復元コマンドを実行します。

      # pcs config restore pacemaker_controller_backup.tar.bz2
  5. ファイルシステムを復元します。

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

      # mkdir /var/tmp/filesystem_backup/
      # cd /var/tmp/filesystem_backup/
      # mv <backup_file>.tar.gz .
      # tar --xattrs --xattrs-include='*.*' -xvzf <backup_file>.tar.gz
      注記

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

    2. os-*-config ファイルをリストアし、os-collect-config を再起動します。

      # cp -rf /var/tmp/filesystem_backup/var/lib/os-collect-config/* /var/lib/os-collect-config/.
      # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-apply-config/* /usr/libexec/os-apply-config/.
      # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-refresh-config/* /usr/libexec/os-refresh-config/.
      # systemctl restart os-collect-config
    3. Puppet hieradata ファイルを復元します。

      # cp -r /var/tmp/filesystem_backup/etc/puppet/hieradata /etc/puppet/hieradata
      # cp -r /var/tmp/filesystem_backup/etc/puppet/hiera.yaml /etc/puppet/hiera.yaml
    4. 設定ファイルが必要な場合には、このディレクトリーを保持します。
  6. redis リソースを復元します。

    1. redis ダンプを各コントローラーノードにコピーします。
    2. redis ダンプを各コントローラー上の本来の場所に移動します。

      # mv dump.rdb /var/lib/redis/dump.rdb
    3. redis ディレクトリーへのアクセス権限を復元します。

      # chown -R redis: /var/lib/redis
  7. 以下のすべてのディレクトリーの内容を削除します。

    # rm -rf /var/lib/config-data/puppet-generated/*
    # rm /root/.ffu_workaround
  8. OpenStack Object Storage (swift) サービスのアクセス権限を復元します。

    # chown -R swift: /srv/node
    # chown -R swift: /var/lib/swift
    # chown -R swift: /var/cache/swift
  9. アンダークラウドにログインし、お使いの OpenStack Platform 10 デプロイメントから元の openstack overcloud deploy コマンドを実行します。元のデプロイメントに関連するすべての環境ファイルを必ず含めてください。
  10. デプロイメントが完了するまで待ちます。
  11. オーバークラウドのコントロールプレーンのデータを復元した後には、関連する各サービスが有効化されて正しく実行されていることを確認します。

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

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

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

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