2.2. オーバークラウドのコントロールプレーンサービスのバックアップ
以下の手順では、オーバークラウドのデータベースと設定のバックアップを作成します。オーバークラウドのデータベースとサービスのバックアップにより、稼働環境のスナップショットが確保されます。スナップショットがあると、操作のエラーが発生してオーバークラウドを元の状態に復元する必要がある場合に役立ちます。
この手順では、不可欠なコントロールプレーンサービスのみが含まれます。コンピュートノードのワークロード、Ceph Storage ノード上のデータ、追加のサービスのバックアップは対象外です。
手順
データベースのバックアップを実行します。
コントローラーノードにログインします。オーバークラウドには、アンダークラウドからアクセスできます。
$ ssh heat-admin@192.0.2.100
root
ユーザーに変更します。$ sudo -i
バックアップを保管するための一時ディレクトリーを作成します。
# mkdir -p /var/tmp/mysql_backup/
データベースのパスワードを取得して、
MYSQLDBPASS
の環境変数に保存します。このパスワードは、/etc/puppet/hieradata/service_configs.json
ファイルのmysql::server::root_password
の変数に保管されています。以下のコマンドを使用してパスワードを保管します。# MYSQLDBPASS=$(sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
データベースのバックアップを作成します。
# mysql -uroot -p$MYSQLDBPASS -s -N -e "select distinct table_schema from information_schema.tables where engine='innodb' and table_schema != 'mysql';" | xargs mysqldump -uroot -p$MYSQLDBPASS --single-transaction --databases > /var/tmp/mysql_backup/openstack_databases-$(date +%F)-$(date +%T).sql
このコマンドにより、
/var/tmp/mysql_backup/openstack_databases-<date>.sql
という名前のデータベースバックアップがダンプされます。<date>
はシステムの日付と時刻になります。このデータベースダンプを安全な場所にコピーします。ユーザーおよびパーミッションに関する全情報をバックアップします。
# mysql -uroot -p$MYSQLDBPASS -s -N -e "SELECT CONCAT('\"SHOW GRANTS FOR ''',user,'''@''',host,''';\"') FROM mysql.user where (length(user) > 0 and user NOT LIKE 'root')" | xargs -n1 mysql -uroot -p$MYSQLDBPASS -s -N -e | sed 's/$/;/' > /var/tmp/mysql_backup/openstack_databases_grants-$(date +%F)-$(date +%T).sql
このコマンドにより、
/var/tmp/mysql_backup/openstack_databases_grants-<date>.sql
という名前のデータベースバックアップがダンプされます。<date>
はシステムの日付と時刻になります。このデータベースダンプを安全な場所にコピーします。
Pacemaker の設定をバックアップします。
- コントローラーノードにログインします。
以下のコマンドを実行し、現在の Pacemaker 設定のアーカイブを作成します。
# sudo pcs config backup pacemaker_controller_backup
-
作成されたアーカイブ (
pacemaker_controller_backup.tar.bz2
) を安全な場所にコピーします。
OpenStack Telemetry データベースをバックアップします。
任意のコントローラーに接続して、MongoDB のプライマリーインスタンスの IP を取得します。
# MONGOIP=$(sudo hiera -c /etc/puppet/hiera.yaml mongodb::server::bind_ip)
バックアップを作成します。
# mkdir -p /var/tmp/mongo_backup/ # mongodump --oplog --host $MONGOIP --out /var/tmp/mongo_backup/
-
/var/tmp/mongo_backup/
内のデータベースダンプを安全な場所にコピーします。
Redis クラスターをバックアップします。
HAProxy から Redis のエンドポイントを取得します。
# REDISIP=$(sudo hiera -c /etc/puppet/hiera.yaml redis_vip)
Redis クラスターのマスターパスワードを取得します。
# REDISPASS=$(sudo hiera -c /etc/puppet/hiera.yaml redis::masterauth)
Redis クラスターの接続をチェックします。
# redis-cli -a $REDISPASS -h $REDISIP ping
Redis データベースをダンプします。
# redis-cli -a $REDISPASS -h $REDISIP bgsave
このコマンドにより、データベースのバックアップがデフォルトの
/var/lib/redis/
ディレクトリーに保管されます。このデータベースダンプを安全な場所にコピーします。
各コントローラーノードのファイルシステムをバックアップします。
バックアップ用のディレクトリーを作成します。
# mkdir -p /var/tmp/filesystem_backup/
以下の
tar
コマンドを実行します。# tar --acls --ignore-failed-read --xattrs --xattrs-include='*.*' \ -zcvf /var/tmp/filesystem_backup/`hostname`-filesystem-`date '+%Y-%m-%d-%H-%M-%S'`.tar \ /etc \ /srv/node \ /var/log \ /var/lib/nova \ --exclude /var/lib/nova/instances \ /var/lib/glance \ /var/lib/keystone \ /var/lib/cinder \ /var/lib/heat \ /var/lib/heat-config \ /var/lib/heat-cfntools \ /var/lib/rabbitmq \ /var/lib/neutron \ /var/lib/haproxy \ /var/lib/openvswitch \ /var/lib/redis \ /var/lib/os-collect-config \ /usr/libexec/os-apply-config \ /usr/libexec/os-refresh-config \ /home/heat-admin
--ignore-failed-read
オプションを使用すると、見つからないディレクトリーは無視されます。これは、特定のサービスが使用されていない場合や、独自のカスタムロール上に分離されている場合に役立ちます。-
作成された
tar
ファイルを安全な場所にコピーします。
オーバークラウドで削除された行をアーカイブします。
アーカイブされた削除済みインスタンスを確認します。
$ source ~/overcloudrc $ nova list --all-tenants --deleted
アーカイブされた削除済みインスタンスがない場合は、オーバークラウドのコントローラーノードの 1 つで以下のコマンドを入力して、削除済みインスタンスをアーカイブします。
# su - nova -s /bin/bash -c "nova-manage --debug db archive_deleted_rows --max_rows 1000"
削除されたすべてのインスタンスをアーカイブするまで、このコマンドを再実行します。
オーバークラウドのコントローラーノードの 1 つで以下のコマンドを入力して、アーカイブされた削除済みインスタンスをすべてパージします。
# su - nova -s /bin/bash -c "nova-manage --debug db purge --all --all-cells"
アーカイブされた削除済みインスタンスが残っていないことを確認します。
$ nova list --all-tenants --deleted
関連情報
- オーバークラウドのバックアップをリストアする必要がある場合には、付録B オーバークラウドの復元を参照してください。