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

本項では、Red Hat OpenStack Platform director で使用するアンダークラウドの復元方法を説明します。

2.1. アンダークラウドの復元

以下の復元プロセスは、アンダークラウドノードでエラーが発生して、回復不可能な状態であることを前提としています。この手順では、新規インストール環境でデータベースおよびクリティカルなファイルシステムの復元を行う必要があります。以下が前提条件です。

  • Red Hat Enterprise Linux 7 の最新版を再インストール済みであること
  • ハードウェアレイアウトが同じであること
  • マシンのホスト名とアンダークラウドの設定が同じであること
  • バックアップアーカイブが root ディレクトリーにコピー済みであること

手順

  1. アンダークラウドに root ユーザーとしてログインします。
  2. stack ユーザーを作成します。

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

    [root@director ~]# passwd stack
  4. sudo を使用する場合にパスワードを要求されないようにします。

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  5. コンテンツ配信ネットワークにシステムを登録します。プロンプトが表示されたら、カスタマーポータルのユーザー名とパスワードを入力します。

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

    [root@director ~]# subscription-manager attach --pool=Valid-Pool-Number-123456
  7. デフォルトのリポジトリーをすべて無効にしてから、必要な Red Hat Enterprise Linux リポジトリーを有効にします。

    [root@director ~]# subscription-manager repos --disable=*
    [root@director ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-13-rpms
  8. システムで更新を実行して、ベースシステムパッケージを最新の状態にします。

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

    [root@director ~]# yum install -y ntp
    [root@director ~]# systemctl start ntpd
    [root@director ~]# systemctl enable ntpd
    [root@director ~]# ntpdate pool.ntp.org
    [root@director ~]# systemctl restart ntpd
  10. バックアップ用に一時ディレクトリーを作成します。

    [root@director ~]# mkdir /var/tmp/undercloud_backup
  11. ファイルシステムのバックアップアーカイブを一時ディレクトリーに抽出します。

    [root@director ~]# tar -xvf /root/undercloud-backup-[timestamp].tar -C /var/tmp/undercloud_backup --xattrs || true
  12. rsync をインストールします。

    [root@director ~]# yum -y install rsync
  13. 以下のディレクトリーをバックアップのコンテンツと同期します。

    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/home/stack/ /home/stack
    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/etc/haproxy/ /etc/haproxy/
    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/etc/pki/instack-certs/ /etc/pki/instack-certs/
    [root@director ~]# mkdir -p /etc/puppet/hieradata/
    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/etc/puppet/hieradata/ /etc/puppet/hieradata/
    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/srv/node/ /srv/node/
    [root@director ~]# rsync -a -X /var/tmp/undercloud_backup/var/lib/glance/ /var/lib/glance/
  14. openstack-keystone パッケージをインストールして、その設定データを同期します。

    [root@director ~]# yum -y install openstack-keystone
    [root@director ~]# rsync -a /var/tmp/undercloud_backup/etc/keystone/ /etc/keystone/
  15. policycoreutils-python パッケージをインストールします。

    [root@director ~]# yum -y install policycoreutils-python
  16. アンダークラウドで SSL を使用している場合には、CA 証明書をリフレッシュします。

    [root@director ~]# semanage fcontext -a -t etc_t "/etc/pki/instack-certs(/.*)?"
    [root@director ~]# restorecon -R /etc/pki/instack-certs
    [root@director ~]# update-ca-trust extract
  17. データベースサーバーとクライアントツールをインストールします。

    [root@director ~]# yum install -y mariadb mariadb-server python-tripleoclient
  18. データベースを起動します。

    [root@director ~]# systemctl start mariadb
    [root@director ~]# systemctl enable mariadb
  19. データベースのバックアップのサイズに対応するように、許可されるパケット数を増やします。

    [root@director ~]# mysql -uroot -e"set global max_allowed_packet = 1073741824;"
  20. データベースのバックアップを復元します。

    [root@director ~]# mysql -u root < /var/tmp/undercloud_backup/root/undercloud-all-databases.sql
  21. Mariadb を再起動して、バックアップファイルからパーミッションをリフレッシュします。

    [root@director ~]# systemctl restart mariadb
  1. 古いユーザーパーミッションの一覧を取得します。

    [root@director ~]# mysql -e 'select host, user, password from mysql.user;'
  2. リストされた各ホストの古いユーザーパーミッションを削除します。以下に例を示します。

    [root@director ~]# HOST="192.0.2.1"
    [root@director ~]# USERS=$(mysql -Nse "select user from mysql.user WHERE user != \"root\" and host = \"$HOST\";" | uniq | xargs)
    [root@director ~]# for USER in $USERS ; do mysql -e "drop user \"$USER\"@\"$HOST\"" || true ;done
    [root@director ~]# mysql -e 'flush privileges'
  3. openstack-glance パッケージをインストールして、そのファイルパーミッションを復元します。

    [root@director ~]# yum install -y openstack-glance
    [root@director ~]# chown -R glance: /var/lib/glance/images
  4. openstack-swift パッケージをインストールして、そのファイルパーミッションを復元します。

    [root@director ~]# yum install -y openstack-swift
    [root@director ~]# chown -R swift: /srv/node
  5. 新規作成した stack ユーザーに切り替えます。

    [root@director ~]# su - stack
    [stack@director ~]$
  6. アンダークラウドのインストールコマンドを実行します。このコマンドは、stack ユーザーのホームディレクトリーから実行するようにしてください。

    [stack@director ~]$ openstack undercloud install
  7. インストールが完了するまで待ちます。アンダークラウドは、オーバークラウドへの接続を自動的に復元します。ノードは、保留中のタスクに対して、OpenStack Orchestration (heat) のポーリングを続けます。
  8. コンテナーのデータをバックアップのコンテンツと同期します。

    [root@director ~]$ sudo rsync -a -X /var/tmp/undercloud_backup/var/lib/docker/ /var/lib/docker/
    [root@director ~]$ sudo rsync -a -X /var/tmp/undercloud_backup/var/lib/registry/ /var/lib/registry/
    [root@director ~]$ sudo rsync -a -X /var/tmp/undercloud_backup/etc/docker/ /etc/docker/
    [root@director ~]$ sudo rsync -a -X /var/tmp/undercloud_backup/etc/docker-distribution/ /etc/docker-distribution/
    [root@director ~]$ sudo cp /var/tmp/undercloud_backup/etc/sysconfig/docker* /etc/sysconfig/.
    [root@director ~]$ sudo systemctl restart docker docker-distribution

2.2. 完了した復元の検証

以下のコマンドを使用して、新しく復元した環境のヘルスチェックを実行します。

2.2.1. Identity サービス (Keystone) の動作の確認

このステップでは、ユーザーの一覧をクエリーで取得して、Identity サービスの動作を検証します。

# source overcloudrc
# openstack user list

コントローラーから実行する場合は、このコマンドの出力には、この環境で作成されたユーザーの一覧が含まれているはずです。このアクションでは、keystone が実行中でユーザーの要求を正常に認証していることが分かります。以下に例を示します。

# openstack user list
+----------------------------------+------------+---------+----------------------+
|                id                |    name    | enabled |        email         |
+----------------------------------+------------+---------+----------------------+
| 9e47bb53bb40453094e32eccce996828 |   admin    |   True  |    root@localhost    |
| 9fe2466f88cc4fa0ba69e59b47898829 | ceilometer |   True  | ceilometer@localhost |
| 7a40d944e55d422fa4e85daf47e47c42 |   cinder   |   True  |   cinder@localhost   |
| 3d2ed97538064f258f67c98d1912132e |    demo    |   True  |                      |
| 756e73a5115d4e9a947d8aadc6f5ac22 |   glance   |   True  |   glance@localhost   |
| f0d1fcee8f9b4da39556b78b72fdafb1 |  neutron   |   True  |  neutron@localhost   |
| e9025f3faeee4d6bb7a057523576ea19 |    nova    |   True  |    nova@localhost    |
| 65c60b1278a0498980b2dc46c7dcf4b7 |   swift    |   True  |   swift@localhost    |
+----------------------------------+------------+---------+----------------------+