Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
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。