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 节点上的数据,以及任何其他服务。

流程

  1. 执行数据库备份:

    1. 登录 Controller 节点。您可以从 undercloud 访问 overcloud:

      $ ssh heat-admin@192.0.2.100
    2. 进入 root 用户:

      $ sudo -i
    3. 创建用于存储备份的临时目录:

      # mkdir -p /var/tmp/mysql_backup/
    4. 获取数据库密码,并将它存储在 MYSQLDBPASS 环境变量中。密码存储在 /etc/puppet/hieradata/service_configs.json 文件中的 mysql::server::root_password 变量中。使用以下命令存储密码:

      # MYSQLDBPASS=$(sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
    5. 备份数据库:

      # 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 的数据库备份,其中 & lt;date > 是系统日期和时间。将此数据库转储复制到安全位置。

    6. 备份所有用户和权限信息:

      # 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 的数据库备份,其中 & lt;date > 是系统日期和时间。将此数据库转储复制到安全位置。

  2. 备份 Pacemaker 配置:

    1. 登录 Controller 节点。
    2. 运行以下命令来创建当前 Pacemaker 配置的存档:

      # sudo pcs config backup pacemaker_controller_backup
    3. 将生成的存档(pacemaker_controller_backup.tar.bz2)复制到安全的位置。
  3. 备份 OpenStack Telemetry 数据库:

    1. 连接到任何控制器并获取 MongoDB 主实例的 IP:

      # MONGOIP=$(sudo hiera -c /etc/puppet/hiera.yaml mongodb::server::bind_ip)
    2. 创建备份:

      # mkdir -p /var/tmp/mongo_backup/
      # mongodump --oplog --host $MONGOIP --out /var/tmp/mongo_backup/
    3. /var/tmp/mongo_backup/ 中的数据库转储复制到安全位置。
  4. 备份 Redis 集群:

    1. 从 HAProxy 获取 Redis 端点:

      # REDISIP=$(sudo hiera -c /etc/puppet/hiera.yaml redis_vip)
    2. 获取 Redis 集群的 master 密码:

      # REDISPASS=$(sudo hiera -c /etc/puppet/hiera.yaml redis::masterauth)
    3. 检查到 Redis 集群的连接:

      # redis-cli -a $REDISPASS -h $REDISIP ping
    4. 转储 Redis 数据库:

      # redis-cli -a $REDISPASS -h $REDISIP bgsave

      这会将数据库备份保存在默认的 /var/lib/redis/ 目录中。将此数据库转储复制到安全位置。

  5. 备份每个 Controller 节点上的文件系统:

    1. 为备份创建一个目录:

      # mkdir -p /var/tmp/filesystem_backup/
    2. 运行以下命令

      # 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 选项会忽略任何缺少的目录,如果某些服务没有在自己的自定义角色中使用或分隔,这很有用。

    3. 将生成的 tar 文件复制到安全位置。
  6. 归档在 overcloud 上删除的行:

    1. 检查归档的已删除实例:

      $ source ~/overcloudrc
      $ nova list --all-tenants --deleted
    2. 如果没有存档删除的实例,请在其中一个 overcloud Controller 节点上输入以下命令来归档已删除实例:

      # su - nova -s /bin/bash -c "nova-manage --debug db archive_deleted_rows --max_rows 1000"

      重新运行此命令,直到您已归档所有已删除的实例。

    3. 在其中一个 overcloud Controller 节点上输入以下命令来清除所有归档的已删除实例:

      # su - nova -s /bin/bash -c "nova-manage --debug db purge --all --all-cells"
    4. 验证没有剩余的已归档实例:

      $ nova list --all-tenants --deleted

相关信息