director のアンダークラウドのバックアップとリストア

Red Hat OpenStack Platform 16.2

Red Hat OpenStack Platform director のアンダークラウドのバックアップとリストア

概要

アンダークラウドノードのデータベースおよび重要なファイルシステムをバックアップし、それらを新たにインストールしたアンダークラウドノードにリストアすることができます。

前書き

重要

Red Hat OpenStack Platform 17.0 では、アンダークラウドの手動バックアップと復元は非推奨となり、本ガイドは削除されます。アンダークラウドをバックアップおよびリストアするには、ReaR(Relax-and-Recover)を使用してバックアップと復元の手順を実行する必要があります。詳細は、「 アンダークラウドおよびコントロールプレーンノードのバックアップおよびリストア 」を参照してください。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の CTO、Chris Wright のメッセージ を参照してください。

Red Hat ドキュメントへのフィードバック (英語のみ)

弊社ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。

ドキュメントへのダイレクトフィードバック (DDF) 機能の使用 (英語版のみ)

特定の文章、段落、またはコードブロックに対して直接コメントを送付するには、DDF の Add Feedback 機能を使用してください。なお、この機能は英語版のドキュメントでのみご利用いただけます。

  1. Multi-page HTML 形式でドキュメントを表示します。
  2. ドキュメントの右上隅に Feedback ボタンが表示されていることを確認してください。
  3. コメントするテキスト部分をハイライト表示します。
  4. Add Feedback をクリックします。
  5. Add Feedback フィールドにコメントを入力します。
  6. (オプション) ドキュメントチームが連絡を取り問題についてお伺いできるように、ご自分のメールアドレスを追加します。
  7. Submit をクリックします。

第1章 director のアンダークラウドのバックアップ

データ損失やシステムのダウンタイムを最小限に抑えるために、Red Hat OpenStack Platform (RHOSP) director のアンダークラウドノードで実行されるデータベースおよび重要なファイルシステムのバックアップを作成して復旧することができます。

バックアッププロセスが正常に完了したことを検証するには、リストアプロセスを実行して検証します。詳細は、「2章director のアンダークラウドの復元」を参照してください。

1.1. コンテナー化されたアンダークラウドのバックアップ

完全なアンダークラウドのバックアップには、以下のデータベースおよびファイルが含まれます。

  • アンダークラウドノード上のすべての MariaDB データベース
  • データベースを正確にリストアできるようにするためのアンダークラウド上の MariaDB 設定ファイル
  • 設定データ: /etc
  • ログデータ: /var/log
  • イメージデータ: /var/lib/glance
  • 証明書生成データ (SSL を使用している場合): /var/lib/certmonger
  • コンテナーイメージデータ: /var/lib/containers および /var/lib/image-serve
  • swift の全データ: /srv/node
  • stack ユーザーのホームディレクトリー内の全データ: /home/stack

前提条件

  • アーカイブファイル用に、アンダークラウドに少なくとも 3.5 GB の空き領域がある。

手順

  1. アンダークラウドに root ユーザーとしてログインします。
  2. MySql の root パスワードを取得します。

    [root@director ~]# PASSWORD=$(/bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
  3. バックアップを実行します。

    [root@director ~]# podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" > /root/undercloud-all-databases.sql
  4. データベースのバックアップと設定ファイルをアーカイブします。

    [root@director ~]# cd /backup
    [root@director backup]# tar --xattrs --xattrs-include='*.*' --ignore-failed-read -cf \
        undercloud-backup-`date +%F`.tar \
        /root/undercloud-all-databases.sql \
        /etc \
        /var/log \
        /var/lib/glance \
        /var/lib/certmonger \
        /var/lib/containers \
        /var/lib/image-serve \
        /var/lib/config-data \
        /srv/node \
        /root \
        /home/stack
    • --ignore-failed-read オプションを指定すると、アンダークラウドには適用しないディレクトリーはスキップされます。
    • --xattrs オプションには、Object Storage (swift) のメタデータを保管するのに必要な拡張属性が含まれます。

    このコマンドにより、undercloud-backup-<timestamp>.tar という名前のファイルが作成されます。_<timestamp>_、はシステムの日付けです。この tar ファイルをセキュアな場所にコピーします。

第2章 director のアンダークラウドの復元

Red Hat OpenStack Platform (RHOSP) アンダークラウドのバックアップを使用して、デプロイメントの新たにインストールされたアンダークラウドノードにアンダークラウドデータをリストアできます。

これにより、リストアされたアンダークラウドでは最新のパッケージが使用されます。

2.1. コンテナー化されたアンダークラウドの復元

デプロイメントのアンダークラウドノードでエラーが発生してリカバリー不可能な状態である場合は、新たにデプロイされたアンダークラウドノードにデータベースおよび重要なファイルシステムを復元できます。

前提条件

  • director のアンダークラウドのデータベースおよびファイルのアンダークラウドのバックアップアーカイブを作成している。詳細は、「コンテナー化されたアンダークラウドのバックアップ」を参照してください。
  • Red Hat Enterprise Linux (RHEL) 8.4 を再インストールしている。
  • 新規アンダークラウドノードが、障害が発生したノードと同じハードウェアリソースを持っている。
  • デプロイメントの新しいアンダークラウドノードにおいて、障害が発生しているノードと同じホスト名およびアンダークラウド設定を使用している。

手順

  1. 新しいアンダークラウドノードに root ユーザーとしてログインします。
  2. コンテンツ配信ネットワークにシステムを登録し、プロンプトでカスタマーポータルのユーザー名とパスワードを入力します。

    [root@director ~]# subscription-manager register
  3. RHOSP のエンタイトルメントをアタッチします。

    [root@director ~]# subscription-manager attach --pool=<pool_number>
  4. デフォルトのリポジトリーをすべて無効にし、必要な RHEL リポジトリーを有効にします。

    [root@director ~]# subscription-manager repos --disable=*
    [root@director ~]# subscription-manager repos --enable=rhel-8-for-x86_64-baseos-eus-rpms --enable=rhel-8-for-x86_64-appstream-eus-rpms --enable=rhel-8-for-x86_64-highavailability-eus-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms --enable=openstack-16.2-for-rhel-8-x86_64-rpms --enable=fast-datapath-for-rhel-8-x86_64-rpms
  5. container-tools リポジトリーモジュールをバージョン 3.0 に設定します。

    [root@director ~]# sudo dnf module disable -y container-tools:rhel8
    [root@director ~]# sudo dnf module enable -y container-tools:3.0
  6. virt リポジトリーモジュールをバージョン av に設定します。

    [root@director ~]# sudo dnf module disable -y virt:rhel
    [root@director ~]# sudo dnf module enable -y virt:av
  7. ベースオペレーティングシステムの更新を実行します。

    [root@director ~]# dnf update -y
    [root@director ~]# reboot
  8. アンダークラウドの時刻が同期されていることを確認します。

    [root@director ~]# dnf install -y chrony
    [root@director ~]# systemctl start chronyd
    [root@director ~]# systemctl enable chronyd
  9. アンダークラウドのバックアップアーカイブを、新たにデプロイされたアンダークラウドノードの root ディレクトリーにコピーします。
  10. tar パッケージおよび policycoreutils-python-utils パッケージをインストールします。

    [root@director ~]# dnf install -y tar policycoreutils-python-utils
  11. stack ユーザーを作成します。

    [root@director ~]# useradd stack
  12. stack ユーザーのパスワードを設定します。

    [root@director ~]# passwd stack
  13. sudo 権限で stack ユーザーアカウントを設定します。

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  14. 以下のデータベースおよびファイルを抽出し、_<timestamp>_ をアーカイブファイル名の値に置き換えます。

    [root@director ~]#  tar --xattrs -xvC / -f undercloud-backup-<timestamp>.tar root/undercloud-all-databases.sql var/lib/glance srv/node etc/pki/undercloud-certs/undercloud.pem etc/pki/ca-trust/source/anchors/* etc/puppet home/stack var/lib/config-data/ var/lib/image-serve var/lib/containers  --exclude=var/lib/containers/storage/overlay/*/merged/*
    • /root/undercloud-all-databases.sql: データベースのバックアップです。
    • /var/lib/glance: Image サービス (glance) データを保管します。
    • /srv/node: Object サービス (swift) データを保管します。
    • /etc/pki/undercloud-certs/undercloud.pem および /etc/pki/ca-trust/source/anchors/*: 証明書を保存します。
    • /etc/puppet: すでに生成された hieradata を保管します。
    • /home/stack: stack ユーザーデータおよび設定を保管します。
    • /var/lib/config-data: 設定コンテナーファイルを保管します。
    • /var/lib/image-serve and /var/lib/containers コンテナーイメージデータベースを保存します。
  15. 証明書に必要なファイルプロパティーを復元します。

    [root@director ~]# restorecon -R /etc/pki
    [root@director ~]# semanage fcontext -a -t etc_t "/etc/pki/undercloud-certs(/.*)?"
    [root@director ~]# restorecon -R /etc/pki/undercloud-certs
    [root@director ~]# update-ca-trust extract
  16. python3-tripleoclient パッケージおよび ceph-ansible パッケージをインストールします。

    [root@director ~]# dnf -y install python3-tripleoclient ceph-ansible
  17. 以前のアンダークラウドからコンテナーを削除します。

    [root@director ~]# podman ps -a --filter='status=created' --format '{{ .Names }}' | xargs  -i podman rm {}
    [root@director ~]# podman ps -a --filter='status=exited' --format '{{ .Names }}' | xargs -i podman rm {}
  18. データベースを復元するには、以下の手順を実施します。

    1. データベースディレクトリーの SELinux 属性を作成および設定します。

      [root@director ~]# sudo mkdir /var/lib/mysql
      [root@director ~]# sudo chown 42434:42434 /var/lib/mysql
      [root@director ~]# sudo chmod 0755 /var/lib/mysql
      [root@director ~]# sudo chcon -t container_file_t /var/lib/mysql
      [root@director ~]# sudo chcon -r object_r /var/lib/mysql
      [root@director ~]# sudo chcon -u system_u /var/lib/mysql
    2. mariadb イメージのローカルタグを作成します。_<image_id>_ および _<undercloud.ctlplane.example.com>_ を、ご自身の環境に該当する値に置き換えます。

      [root@director ~]# podman images | grep mariadb
      <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.1_20210322.1   <image_id>   3 weeks ago   718 MB
      [root@director ~]# podman tag <image_id> mariadb
      [root@director ~]# podman images | grep maria
      localhost/mariadb                                                                         	latest        	<image_id>   3 weeks ago   718 MB
      <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.1_20210322.1   <image_id>   3 weeks ago   718 MB
    3. /var/lib/mysql ディレクトリーをコンテナーで初期化します。

      [root@director ~]# podman run -v /var/lib/mysql:/var/lib/mysql localhost/mariadb mysql_install_db --datadir=/var/lib/mysql --user=mysql
    4. データベースにインポートするデータベースのバックアップファイルをコピーします。

      [root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
    5. データベースサービスを起動してデータをインポートします。ここで、_<container_id>_ を実際の環境の該当するコンテナー ID の値に置き換えます。

      [root@director ~]# podman run -dt -v /var/lib/mysql:/var/lib/mysql  localhost/mariadb  /usr/libexec/mysqld
      <container_id>
    6. データをインポートして max_allowed_packet パラメーターを設定するには、設定するコンテナーにログインしてコンテナーを停止し、コンテナーが実行されていないことを確認する必要があります。

      [root@director ~]# podman exec -it <container_id> /bin/bash
      ()[mysql@5a4e429c6f40 /]$  mysql -u root -e "set global max_allowed_packet = 1073741824;"
      ()[mysql@5a4e429c6f40 /]$  mysql -u root < /var/lib/mysql/undercloud-all-databases.sql
      ()[mysql@5a4e429c6f40 /]$  mysql -u root -e 'flush privileges'
      ()[mysql@5a4e429c6f40 /]$ exit
      exit
      [root@director ~]# podman stop <container_id>
      [root@director ~]# podman ps
      CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
      [root@director ~]#
  19. サーバー名を設定します。ここで、_<undercloud.example.com>_ を実際の環境の該当する値に置き換えます。

    [root@director ~]# hostnamectl set-hostname <undercloud.example.com>
  20. アンダークラウドをインストールするコマンドを実行します。

    [root@director ~]# openstack undercloud install

    インストール手順が完了するまで待ちます。アンダークラウドは、オーバークラウドへの接続を自動的に回復します。オーバークラウドノードは、保留中のタスクに対して、OpenStack Orchestration サービス (heat) のポーリングを続けます。

2.2. アンダークラウドの復元の検証

強固なバックアップストラテジーには、バックアップデータを定期的にリストアするテストが含まれます。これは、正しいデータがバックアップされており、バックアップやリストアプロセス中にデータの破損が発生していないことを検証するのに役立ちます。アンダークラウドの復元プロセスが正常に行われたことを確認するには、Identity サービス (keystone) にクエリーを行います。

手順

  1. 新しいアンダークラウドホストに stack ユーザーとしてログインします。
  2. source コマンドで stackrc 認証情報ファイルを読み込みます。

    [stack@director ~]$ source ~/stackrc
  3. 環境内のユーザー一覧を取得します。

    [stack@director ~]$ openstack user list

    このコマンドの出力には、環境内のユーザーの一覧が含まれます。この検証では、Identity サービス (keystone) が実行中でユーザーの要求を正常に認証していることが分かります。

    +----------------------------------+-------------------------------------------------------+
    | ID                               | Name                                                  |
    +----------------------------------+-------------------------------------------------------+
    | f273be1a982b419591ccc7f89c1a5c0d | admin                                                 |
    | a0e1efeb5b654d61a393bcef92c505d2 | heat_admin                                            |
    | 59604e2d56424f9bb4f7c825d0bdc615 | heat                                                  |
    | 35d36ebc2f7043148943d0e0707336d9 | heat-cfn                                              |
    | 233ff3b22c884fa289f7a9a6ec2de326 | neutron                                               |
    | db7af369a9ed4f7fa8d8179ceae3233f | glance                                                |
    | d883b3690d7f434d9eb9cabd6b5db8f5 | nova                                                  |
    | 3dc52d74feb6402983863c8e9effbf5c | placement                                             |
    | e3bdcc9465254cbea86222191c88edd3 | swift                                                 |
    | 8e68fcc40215446c8c1412fb736522de | ironic                                                |
    | 366ccd100176495cb409dba872516cb2 | ironic-inspector                                      |
    | fe99722603fe424d99d618c368dc0257 | mistral                                               |
    | 05ae215b6b4043b6a60208ccd203644a | zaqar                                                 |
    | 83813ec920fe4b01b198770bfa538962 | zaqar-websocket                                       |
    | 5fc6bc52c7364131b1e36fd4321325e6 | heat_stack_domain_admin                               |
    +----------------------------------+-------------------------------------------------------+