2.2. 备份 overcloud control plane 服务
以下流程创建 overcloud 数据库和配置的备份。overcloud 数据库和服务的备份可确保您拥有正常工作的环境的快照。如果有这个快照,则需要在操作失败时将 overcloud 恢复到其原始状态。
此流程仅包含重要的 control plane 服务。它不包括计算节点工作负载的备份、Ceph Storage 节点上的数据,以及任何其他服务。
流程
执行数据库备份:
登录 Controller 节点。您可以从 undercloud 访问 overcloud:
$ 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 配置:
- 登录 Controller 节点。
运行以下命令来创建当前 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 集群的 master 密码:
# 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/目录中。将此数据库转储复制到安全位置。
备份每个 Controller 节点上的文件系统:
为备份创建一个目录:
# mkdir -p /var/tmp/filesystem_backup/运行以下命令:# 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文件复制到安全位置。
归档在 overcloud 上删除的行:
检查归档的已删除实例:
$ source ~/overcloudrc $ nova list --all-tenants --deleted如果没有存档删除的实例,请在其中一个 overcloud Controller 节点上输入以下命令来归档已删除实例:
# su - nova -s /bin/bash -c "nova-manage --debug db archive_deleted_rows --max_rows 1000"重新运行此命令,直到您已归档所有已删除的实例。
在其中一个 overcloud Controller 节点上输入以下命令来清除所有归档的已删除实例:
# su - nova -s /bin/bash -c "nova-manage --debug db purge --all --all-cells"验证没有剩余的已归档实例:
$ nova list --all-tenants --deleted
相关信息
- 如果您需要恢复 overcloud 备份,请参阅 附录 B, 恢复 overcloud。