第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) のポーリングを続けます。