付録A アンダークラウドの復元

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

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

手順

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

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

    [root@director ~]# subscription-manager attach --pool=Valid-Pool-Number-123456
  4. デフォルトのリポジトリーをすべて無効にしてから、必要な 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-10-rpms
  5. システムで更新を実行して、ベースシステムパッケージを最新の状態にします。

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

    [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
  7. アンダークラウドのバックアップアーカイブをアンダークラウドの root ディレクトリーにコピーします。これ以降のステップでは、ファイル名に undercloud-backup-$TIMESTAMP.tar を使用しています。ここで、$TIMESTAMP はアーカイブのタイムスタンプの Bash 変数です。
  8. データベースサーバーとクライアントツールをインストールします。

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

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

    [root@director ~]# mysql -uroot -e"set global max_allowed_packet = 1073741824;"
  11. アーカイブからデータベースおよびデータベース設定を抽出します。

    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/my.cnf.d/*server*.cnf
    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar root/undercloud-all-databases.sql
  12. データベースのバックアップをリストアします。

    [root@director ~]# mysql -u root < /root/undercloud-all-databases.sql
  13. root 設定ファイルの一時バージョンを抽出します。

    [root@director ~]# tar -xvf undercloud-backup-$TIMESTAMP.tar root/.my.cnf
  14. データベースの古い root パスワードを取得します。

    [root@director ~]# OLDPASSWORD=$(sudo cat root/.my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'")
  15. データベースの root パスワードをリセットします。

    [root@director ~]# mysqladmin -u root password "$OLDPASSWORD"
  16. root 設定ファイルを一時ディレクトリーから root ディレクトリーに移動します。

    [root@director ~]# mv ~/root/.my.cnf ~/.
    [root@director ~]# rmdir ~/root
  17. 古いユーザー権限の一覧を取得します。

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

    [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 ~]# for USER in $USERS ; do mysql -e "drop user $USER" || true ;done
    [root@director ~]# mysql -e 'flush privileges'

    ホスト IP および任意のホスト (“%”) からアクセスするすべてのユーザーについて、この手順を実施します。

    注記

    HOST パラメーターの IP アドレスは、コントロールプレーン内のアンダークラウドの IP アドレスです。

  19. データベースを再起動します。

    [root@director ~]# systemctl restart mariadb
  20. stack ユーザーを作成します。

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

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

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  23. stack ユーザーのホームディレクトリーをリストアします。

    # tar -xvC / -f undercloud-backup-$TIMESTAMP.tar home/stack
  24. policycoreutils-python パッケージをインストールします。

    [root@director ~]# yum -y install policycoreutils-python
  25. openstack-glance パッケージをインストールして、そのデータおよびファイルパーミッションをリストアします。

    [root@director ~]# yum install -y openstack-glance
    [root@director ~]# tar --xattrs --xattrs-include='*.*' -xvC / -f undercloud-backup-$TIMESTAMP.tar var/lib/glance/images
    [root@director ~]# chown -R glance: /var/lib/glance/images
    [root@director ~]# restorecon -R /var/lib/glance/images
  26. openstack-swift パッケージをインストールして、そのデータおよびファイルパーミッションをリストアします。

    [root@director ~]# yum install -y openstack-swift
    [root@director ~]# tar --xattrs --xattrs-include='*.*' -xvC / -f undercloud-backup-$TIMESTAMP.tar srv/node
    [root@director ~]# chown -R swift: /srv/node
    [root@director ~]# restorecon -R /srv/node
  27. openstack-keystone パッケージをインストールして、その設定データをリストアします。

    [root@director ~]# yum -y install openstack-keystone
    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/keystone
    [root@director ~]# restorecon -R /etc/keystone
  28. openstack-heat をインストールして、設定をリストアします。

    [root@director ~]# yum install -y openstack-heat*
    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/heat
    [root@director ~]# restorecon -R /etc/heat
  29. Puppet をインストールして、その設定データをリストアします。

    [root@director ~]# yum install -y puppet hiera
    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/puppet/hieradata/
  30. アンダークラウドで SSL を使用している場合には、CA 証明書をリフレッシュします。

    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/instack-certs/undercloud.pem
    [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/ca-trust/source/anchors/*
    [root@director ~]# restorecon -R /etc/pki
    [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
  31. stack ユーザーに切り替えます。

    [root@director ~]# su - stack
    [stack@director ~]$
  32. python-tripleoclient パッケージをインストールします。

    $ sudo yum install -y python-tripleoclient
  33. アンダークラウドのインストールコマンドを実行します。このコマンドは、stack ユーザーのホームディレクトリーから実行するようにしてください。

    [stack@director ~]$ openstack undercloud install

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