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 ドキュメントを参照してください。
手順
Pacemaker を停止し、コンテナー化されたすべてのサービスを削除します。
ブートストラップコントローラーノードにログインし、Pacemaker クラスターを停止します。
# sudo pcs cluster stop --all
クラスターが完全にシャットダウンするまで待ちます。
# sudo pcs status
すべてのコントローラーノードで、OpenStack サービスのコンテナーをすべて削除します。
# docker stop $(docker ps -a -q) # docker rm $(docker ps -a -q)
メジャーバージョンのアップグレードの失敗からリストアする場合には、全ノードで実行された
yum
トランザクションをすべて元に戻さなければならない場合があります。これには、各ノードで以下の操作が必要です。以前のバージョンのリポジトリーを有効化します。以下に例を示します。
# 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
以下の 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
yum
履歴をチェックします。# sudo yum history list all
アップグレードプロセス中に発生したトランザクションを特定します。これらの操作の大半は、コントローラーノードの 1 台 (アップグレード中にブートストラップノードとして選択されていたコントローラーノード) で発生しているはずです。特定のトランザクションを確認する必要がある場合は、
history info
サブコマンドで表示してください。# sudo yum history info 25
注記yum history list all
で各トランザクションから実行したコマンドを表示するように強制するには、yum.conf
ファイルでhistory_list_view=commands
を設定します。アップグレード以降に発生した
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
を使用することを推奨します。関連する
yum
トランザクションが取り消されたら、全ノードで元の OpenStack Platform リポジトリーのみを有効化します。以下に例を示します。# sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
以下の 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
データベースを復元します。
- ブートストラップコントローラーノードにデータベースのバックアップをコピーします。
全コントローラーノード上でデータベースポートへの外部接続を停止します。
# MYSQLIP=$(hiera -c /etc/puppet/hiera.yaml mysql_bind_host) # sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
これにより、ノードへのデータベーストラフィックがすべて分離されます。
一時的にデータベースのレプリケーションを無効にします。すべてのコントローラーノードで
/etc/my.cnf.d/galera.cnf
ファイルを編集します。# vi /etc/my.cnf.d/galera.cnf
以下の変更を加えます。
-
wsrep_cluster_address
パラメーターをコメントアウトする -
wsrep_provider
をnone
に設定する
-
-
/etc/my.cnf.d/galera.cnf
ファイルを保存します。 すべてのコントローラーノードで MariaDB データベースが無効になっていることを確認します。OpenStack Platform 13 へのアップグレード中に、以前の手順で無効にした MariaDB サービスがコンテナー化されたサービスに移行します。ホスト上でもサービスがプロセスとして実行されていないことを確認してください。
# mysqladmin -u root shutdown
注記HAProxy から、データベースが無効になったという警告が表示される可能性があります。
既存の 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
すべてのコントローラーノードでデータベースを手動で起動します。
# mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &
古いパスワードを取得し、すべてのコントローラーノードでデータベースのパスワードを再設定します。
# OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'") # mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"
すべてのコントローラーノードでデータベースを停止します。
# /usr/bin/mysqladmin -u root shutdown
ブートストラップコントローラーノードで、
--skip-grant-tables
オプションを指定せずに手動でデータベースを起動します。# mysqld_safe --skip-networking --wsrep-on=OFF &
ブートストラップコントローラーノードで、OpenStack データベースを復元します。この後の手順で、このデータベースが他のコントローラーノードに複製されます。
# mysql -u root < openstack_database.sql
ブートストラップコントローラーノードで、ユーザーとパーミッションを復元します。
# mysql -u root < grants.sql
以下のコマンドを使用して、ブートストラップコントローラーノードをシャットダウンします。
# mysqladmin shutdown
データベースのレプリケーションを有効にします。すべてのコントローラーノードで
/etc/my.cnf.d/galera.cnf
ファイルを編集します。# vi /etc/my.cnf.d/galera.cnf
以下の変更を加えます。
-
wsrep_cluster_address
パラメーターをコメント解除する -
wsrep_provider
を/usr/lib64/galera/libgalera_smm.so
に設定する
-
-
/etc/my.cnf.d/galera.cnf
ファイルを保存します。 ブートストラップノードでデータベースを実行します。
# /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 により新しいクラスターが作成され、ブートストラップノードがマスターノードになります。ノードのステータスを確認します。
# clustercheck
このコマンドにより、
Galera cluster node is synced.
という出力が表示されるはずです。エラーが発生した場合には、/var/log/mysql_cluster.log
ファイルを確認してください。残りのコントローラーノードでデータベースを起動します。
$ /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
オプションにノードを含めると、新しいクラスターにノードが追加され、マスターからの内容と同期されます。定期的に各ノードのステータスを確認します。
# clustercheck
全ノードの同期操作が完了したら、このコマンドにより、それぞれのノードについて
Galera cluster node is synced.
という出力が表示されるはずです。すべてのノードのデータベースを停止します。
$ mysqladmin shutdown
各ノードからファイアウォールルールを削除して、サービスがデータベースへのアクセスを回復するようにします。
# sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
Pacemaker の設定を復元します。
- Pacemaker のアーカイブをブートストラップノードにコピーします。
- ブートストラップノードにログインします。
設定の復元コマンドを実行します。
# pcs config restore pacemaker_controller_backup.tar.bz2
ファイルシステムを復元します。
各コントローラーノードのバックアップ
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
注記/
ディレクトリーには直接展開しないでください。直接展開すると、現在のファイルシステムが上書きされてしまいます。ファイルを一時ディレクトリーで抽出することを推奨します。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
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
- 設定ファイルが必要な場合には、このディレクトリーを保持します。
redis リソースを復元します。
- redis ダンプを各コントローラーノードにコピーします。
redis ダンプを各コントローラー上の本来の場所に移動します。
# mv dump.rdb /var/lib/redis/dump.rdb
redis ディレクトリーへのアクセス権限を復元します。
# chown -R redis: /var/lib/redis
以下のすべてのディレクトリーの内容を削除します。
# rm -rf /var/lib/config-data/puppet-generated/* # rm /root/.ffu_workaround
OpenStack Object Storage (swift) サービスのアクセス権限を復元します。
# chown -R swift: /srv/node # chown -R swift: /var/lib/swift # chown -R swift: /var/cache/swift
-
アンダークラウドにログインし、お使いの OpenStack Platform 10 デプロイメントから元の
openstack overcloud deploy
コマンドを実行します。元のデプロイメントに関連するすべての環境ファイルを必ず含めてください。 - デプロイメントが完了するまで待ちます。
オーバークラウドのコントロールプレーンのデータを復元した後には、関連する各サービスが有効化されて正しく実行されていることを確認します。
コントローラーノード上の高可用性サービスの場合:
# pcs resource enable [SERVICE] # pcs resource cleanup [SERVICE]
コントローラーおよびコンピュートノード上のシステムサービスの場合:
# systemctl start [SERVICE] # systemctl enable [SERVICE]
以下の項には、有効にすべきサービスについての参考情報を記載します。