附录 B. 恢复 overcloud
B.1. 恢复 overcloud control plane 服务 复制链接链接已复制到粘贴板!
以下流程恢复 overcloud 数据库和配置的备份。在这种情况下,建议在所有三个 Controller 节点上同时打开三个终端窗口。另外,建议您选择 Controller 节点来执行高可用性操作。此流程将这个 Controller 节点称为 bootstrap Controller 节点。
此流程只恢复 control plane 服务。它不包括在 Ceph Storage 节点上恢复 Compute 节点工作负载或数据。
红帽支持使用原生 SDN 备份 Red Hat OpenStack Platform,如 Open vSwitch (OVS)和默认的 Open Virtual Network (OVN)。有关第三方 SDN 的信息,请参阅第三方 SDN 文档。
流程
停止 Pacemaker 并删除所有容器化服务。
登录到 bootstrap Controller 节点并停止 pacemaker 集群:
sudo pcs cluster stop --all
# sudo pcs cluster stop --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待集群完全关闭:
sudo pcs status
# sudo pcs status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 Controller 节点上,删除所有 OpenStack 服务的容器:
docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
# docker stop $(docker ps -a -q) # docker rm $(docker ps -a -q)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您要从失败的主发行版本升级中恢复,您可能需要反转所有节点上的
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
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用以下 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
# sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-tools-rpms # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-mon-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
yum
历史记录:sudo yum history list all
# sudo yum history list all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别升级过程中发生的事务。这些操作在其中一个 Controller 节点上发生(在升级过程中选择为 bootstrap 节点的 Controller 节点)。如果您需要查看特定的事务,使用
history info
子命令查看它:sudo yum history info 25
# sudo yum history info 25
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要强制
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
# sudo yum history undo 25 # sudo yum history undo 24 # sudo yum history undo 23 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保从最后一个事务开始,再按降序排列。您还可以使用回滚选项在一个执行时恢复多个事务。
例如,以下命令将最后事务中的事务回滚至 23:
sudo yum history rollback 23
# sudo yum history rollback 23
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要建议对每个事务使用
撤消
而不是回滚
,以便您可以验证每个事务的逆转。相关的
yum
事务被反向后,在所有节点上仅启用原始 OpenStack Platform 存储库。例如:sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
# sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用以下 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
# sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
恢复数据库:
- 将数据库备份复制到 bootstrap Controller 节点。
停止到所有 Controller 节点上的数据库端口的外部连接:
MYSQLIP=$(hiera -c /etc/puppet/hiera.yaml mysql_bind_host) sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
# MYSQLIP=$(hiera -c /etc/puppet/hiera.yaml mysql_bind_host) # sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会隔离到节点的所有数据库流量。
暂时禁用数据库复制。在所有 Controller 节点上编辑
/etc/my.cnf.d/galera.cnf
文件。vi /etc/my.cnf.d/galera.cnf
# vi /etc/my.cnf.d/galera.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进行以下更改:
-
注释掉
wsrep_cluster_address
参数。 -
将
wsrep_provider
设置为none
-
注释掉
-
保存
/etc/my.cnf.d/galera.cnf
文件。 确保所有 Controller 节点上都禁用 MariaDB 数据库。在升级到 OpenStack Platform 13 时,MariaDB 服务移至您之前禁用的容器化服务。确保服务没有作为主机上的进程运行:
mysqladmin -u root shutdown
# mysqladmin -u root shutdown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从禁用数据库的 HAProxy 收到警告。
移动现有的 MariaDB 数据目录,并在所有 Controller 节点上准备新数据目录,
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 Controller 节点上手动启动数据库:
mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &
# mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 Controller 节点上获取旧的密码重置数据库密码:
OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'") mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"
# OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'") # mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止所有 Controller 节点上的数据库:
/usr/bin/mysqladmin -u root shutdown
# /usr/bin/mysqladmin -u root shutdown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 bootstrap Controller 节点上手动启动数据库,无需
--skip-grant-tables
选项:mysqld_safe --skip-networking --wsrep-on=OFF &
# mysqld_safe --skip-networking --wsrep-on=OFF &
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 bootstrap Controller 节点上,恢复 OpenStack 数据库。这会稍后复制到其他 Controller 节点:
mysql -u root < openstack_database.sql
# mysql -u root < openstack_database.sql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 bootstrap 控制器节点上,恢复用户和权限:
mysql -u root < grants.sql
# mysql -u root < grants.sql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令关闭 bootstrap Controller 节点:
mysqladmin shutdown
# mysqladmin shutdown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用数据库复制。在所有 Controller 节点上编辑
/etc/my.cnf.d/galera.cnf
文件。vi /etc/my.cnf.d/galera.cnf
# vi /etc/my.cnf.d/galera.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进行以下更改:
-
取消注释
wsrep_cluster_address
参数。 -
将
wsrep_provider
设置为/usr/lib64/galera/libgalera_smm.so
-
取消注释
-
保存
/etc/my.cnf.d/galera.cnf
文件。 在 bootstrap 节点上运行数据库:
/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:// &
# /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:// &
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --wsrep-cluster-address
选项中没有节点会强制 Galera 创建新集群,并使 bootstrap 节点成为 master 节点。检查节点的状态:
clustercheck
# clustercheck
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令应该报告
Galera 集群节点已同步。
检查/var/log/mysql_cluster.log
文件中的错误。在剩余的 Controller 节点上,启动数据库:
/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 &
$ /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 &
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
--wsrep-cluster-address
选项中包含节点会将节点添加到新集群中,并从 master 同步内容。定期检查每个节点的状态:
clustercheck
# clustercheck
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当所有节点都完成其同步操作时,这个命令应该
为每个节点报告 Galera 集群节点
。停止所有节点上的数据库:
mysqladmin shutdown
$ mysqladmin shutdown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从用于恢复对数据库的访问的服务从每个节点中删除防火墙规则:
sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
# sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
恢复 Pacemaker 配置:
- 将 Pacemaker 归档复制到 bootstrap 节点。
- 登录到 bootstrap 节点。
运行配置恢复命令:
pcs config restore pacemaker_controller_backup.tar.bz2
# pcs config restore pacemaker_controller_backup.tar.bz2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
恢复文件系统:
将每个 Controller 节点的 backup
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
# mkdir /var/tmp/filesystem_backup/ # cd /var/tmp/filesystem_backup/ # mv <backup_file>.tar.gz . # tar --xattrs --xattrs-include='*.*' -xvzf <backup_file>.tar.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不要直接提取到
/
目录。这会覆盖您当前的文件系统。建议将 文件提取到临时目录中。恢复
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
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 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
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个目录,以防需要任何配置文件。
恢复 redis 资源:
- 将 Redis 转储复制到每个 Controller 节点。
将 Redis 转储移动到每个 Controller 上的原始位置:
mv dump.rdb /var/lib/redis/dump.rdb
# mv dump.rdb /var/lib/redis/dump.rdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 Redis 目录的权限:
chown -R redis: /var/lib/redis
# chown -R redis: /var/lib/redis
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除以下任何目录的内容:
rm -rf /var/lib/config-data/puppet-generated/* rm /root/.ffu_workaround
# rm -rf /var/lib/config-data/puppet-generated/* # rm /root/.ffu_workaround
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 OpenStack Object Storage (swift)服务的权限:
chown -R swift: /srv/node chown -R swift: /var/lib/swift chown -R swift: /var/cache/swift
# chown -R swift: /srv/node # chown -R swift: /var/lib/swift # chown -R swift: /var/cache/swift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
登录 undercloud,并从 OpenStack Platform 10 部署中运行原始
openstack overcloud deploy
命令。确保包含与原始部署相关的所有环境文件。 - 等待部署完成。
恢复 overcloud control plane 数据后,检查每个相关服务是否已启用并在正确运行:
对于控制器节点上的高可用性服务:
pcs resource enable [SERVICE] pcs resource cleanup [SERVICE]
# pcs resource enable [SERVICE] # pcs resource cleanup [SERVICE]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于控制器和计算节点上的系统服务:
systemctl start [SERVICE] systemctl enable [SERVICE]
# systemctl start [SERVICE] # systemctl enable [SERVICE]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
下面几节提供了应启用的服务参考。