备份和恢复 Director Undercloud
备份和恢复 director undercloud
摘要
第 1 章 备份 Undercloud
本指南论述了如何备份 Red Hat OpenStack Platform director 中使用的 undercloud。undercloud 通常是一个物理节点(尽管使用虚拟机中运行的双节点 pacemaker 集群)存在一个物理节点(尽管高可用性选项)用于部署和管理 OpenStack 环境。
1.1. 备份注意事项
制定一个强大的备份和恢复策略,以最大程度降低数据丢失和系统停机时间。在确定您的备份策略时,您需要回答以下问题:
- 从数据丢失中恢复需要多长时间?如果您根本不能有数据丢失,除了使用备份外,还必须在部署策略中包含高可用性。您需要考虑获取物理备份介质(包括从非现场位置、如果使用)以及有多少磁带驱动器可用于恢复操作所需的时间。
- 您应该保留多少个备份?您需要考虑一些法律法规要求,它们会影响您应该存储数据的时间。
- 您的备份是否应该保持非现场?存储备份介质将有助于缓解发生物理位置所带来的风险。
- 要测试备份的频率?强大的备份策略包括常规恢复测试备份数据。这有助于验证是否仍备份正确的数据,在备份或恢复过程中不会引入任何损坏。这些分析应假定在实际的灾难恢复条件下执行。
- 将备份什么?以下小节描述了组件的数据库和文件系统备份,以及恢复备份的信息。
1.2. Undercloud 节点的高可用性
您可以自由考虑 Undercloud 节点的首选高可用性(HA)选项;红帽不预先考虑这一特定要求。例如,您可能会考虑将 Undercloud 节点作为红帽企业虚拟化(RHEV)中的高可用性虚拟机运行。您还可以考虑在 Pacemaker 中使用物理节点为所需服务提供 HA。
在处理 Undercloud 节点的高可用性时,您应该查阅您决定最适合您环境的解决方案的文档和最佳做法。
1.3. 创建裸机 Undercloud 备份
完整的 undercloud 备份包括以下数据库和文件:
- undercloud 节点上的所有 MariaDB 数据库
- undercloud 上的 MariaDB 配置文件(因此您可以准确恢复数据库)
-
配置数据:
/etc
-
日志数据:
/var/log
-
镜像数据:
/var/lib/glance
-
如果使用 SSL:
/var/lib/certmonger
,证书生成数据 -
任何容器镜像数据:
/var/lib/docker
和/var/lib/registry
-
所有 swift 数据:
/srv/node
-
stack 用户主目录中的所有数据:
/home/stack
在执行备份过程前,确认 undercloud 上有足够的磁盘空间。如果不存在,存档文件至少为 3.5 GB。
流程
-
以
root
用户身份登录 undercloud。 备份数据库:
[root@director ~]# mysqldump --opt --all-databases > /root/undercloud-all-databases.sql
创建
备份目录
,并将目录的用户所有权改为stack
用户:[root@director ~]# mkdir /backup [root@director ~]# chown stack: /backup
您将使用此目录存储包含 undercloud 数据库和文件系统的存档。
进入
备份目录
[root@director ~]# cd /backup
归档数据库备份和配置文件:
[root@director ~]# tar --xattrs --xattrs-include='*.*' --ignore-failed-read -cf \ undercloud-backup-$(date +%F).tar \ /root/undercloud-all-databases.sql \ /etc \ /var/log \ /var/lib/glance \ /var/lib/certmonger \ /var/lib/docker \ /var/lib/registry \ /srv/node \ /root \ /home/stack
-
--ignore-failed-read
选项跳过任何不适用于 undercloud 的目录。 -
--xattrs
和--xattrs-include='*'
选项包括扩展属性,这是存储 Object Storage (swift)和 SELinux 的元数据所必需的。
这会创建一个名为
undercloud-backup-<date>.tar.gz
的文件,其中 <date
> 是系统日期。将此tar
文件复制到安全位置。-
1.4. 验证完成的备份
您可以通过运行和验证恢复过程来验证已完成的备份过程是否成功。有关从备份中恢复的详情,请参见下一节。
部分 I. 恢复 Undercloud
这部分论述了如何恢复 Red Hat OpenStack Platform Director 中使用的 undercloud。
此过程包含将数据从 OpenStack Platform director 备份恢复到新的 undercloud 安装的步骤。因此,恢复的 undercloud 使用最新的软件包。
第 2 章 恢复 undercloud
以下恢复过程会假定 undercloud 节点失败,且处于不可恢复的状态。这个过程包括在全新安装中恢复数据库和关键文件系统。它假设如下:
- 您已重新安装了最新版本的 Red Hat Enterprise Linux 7。
- 硬件布局相同。
- 机器的主机名和 undercloud 设置相同。
-
备份存档已复制到
根目录
。
流程
-
以
root
用户身份登录 undercloud。 使用 Content Delivery Network 注册您的系统,在提示时输入您的客户门户网站用户名和密码:
[root@director ~]# subscription-manager register
附加 Red Hat OpenStack Platform 权利:
[root@director ~]# subscription-manager attach --pool=Valid-Pool-Number-123456
禁用所有默认的软件仓库,然后启用所需的 Red Hat Enterprise Linux 软件仓库:
[root@director ~]# subscription-manager repos --disable=* [root@director ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-13-rpms
在系统上执行更新,确保您有最新的基本系统软件包:
[root@director ~]# yum update -y [root@director ~]# reboot
确保同步 undercloud 上的时间。例如:
[root@director ~]# yum install -y ntp [root@director ~]# systemctl start ntpd [root@director ~]# systemctl enable ntpd [root@director ~]# ntpdate pool.ntp.org [root@director ~]# systemctl restart ntpd
-
将 undercloud 备份存档复制到 undercloud
的根目录
。以下步骤使用undercloud-backup-$TIMESTAMP.tar
作为文件名,其中 $TIMESTAMP 是归档的时间戳的 Bash 变量。 安装数据库服务器和客户端工具:
[root@director ~]# yum install -y mariadb mariadb-server
启动数据库:
[root@director ~]# systemctl start mariadb [root@director ~]# systemctl enable mariadb
增加允许的数据包以适应数据库备份的大小:
[root@director ~]# mysql -uroot -e"set global max_allowed_packet = 1073741824;"
从存档中提取数据库和数据库配置:
[root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/my.cnf.d/*server*.cnf [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar root/undercloud-all-databases.sql
恢复数据库备份:
[root@director ~]# mysql -u root < /root/undercloud-all-databases.sql
提取 root 配置文件的临时版本:
[root@director ~]# tar -xvf undercloud-backup-$TIMESTAMP.tar root/.my.cnf
获取旧的 root 数据库密码:
[root@director ~]# OLDPASSWORD=$(sudo cat root/.my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'")
重置 root 数据库密码:
[root@director ~]# mysqladmin -u root password "$OLDPASSWORD"
将 root 配置文件从临时目录移动到
根目录
:[root@director ~]# mv ~/root/.my.cnf ~/. [root@director ~]# rmdir ~/root
获取旧用户权限列表:
[root@director ~]# mysql -e 'select host, user, password from mysql.user;'
删除列出的每个主机的旧用户权限。例如:
[root@director ~]# HOST="192.0.2.1" [root@director ~]# USERS=$(mysql -Nse "select user from mysql.user WHERE user != \"root\" and host = \"$HOST\";" | uniq | xargs) [root@director ~]# for USER in $USERS ; do mysql -e "drop user \"$USER\"@\"$HOST\"" || true ;done [root@director ~]# for USER in $USERS ; do mysql -e "drop user $USER" || true ;done [root@director ~]# mysql -e 'flush privileges'
对通过主机 IP 和任何主机("%")访问的所有用户执行此操作。
注意HOST 参数中的 IP 地址是 control plane 中的 undercloud IP 地址。
重启数据库:
[root@director ~]# systemctl restart mariadb
创建
stack
用户:[root@director ~]# useradd stack
为该用户设置密码:
[root@director ~]# passwd stack
进行以下操作,以使用户在使用
sudo
时无需输入密码:[root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack [root@director ~]# chmod 0440 /etc/sudoers.d/stack
恢复
stack
用户主目录:# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar home/stack
安装
policycoreutils-python
软件包:[root@director ~]# yum -y install policycoreutils-python
安装
openstack-glance
软件包并恢复其数据和文件权限:[root@director ~]# yum install -y openstack-glance [root@director ~]# tar --xattrs --xattrs-include='*.*' -xvC / -f undercloud-backup-$TIMESTAMP.tar var/lib/glance/images [root@director ~]# chown -R glance: /var/lib/glance/images [root@director ~]# restorecon -R /var/lib/glance/images
安装
openstack-swift
软件包并恢复其数据和文件权限:[root@director ~]# yum install -y openstack-swift [root@director ~]# tar --xattrs --xattrs-include='*.*' -xvC / -f undercloud-backup-$TIMESTAMP.tar srv/node [root@director ~]# chown -R swift: /srv/node [root@director ~]# restorecon -R /srv/node
安装
openstack-keystone
软件包并恢复其配置数据:[root@director ~]# yum -y install openstack-keystone [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/keystone [root@director ~]# restorecon -R /etc/keystone
安装
openstack-heat
和 restore 配置:[root@director ~]# yum install -y openstack-heat* [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/heat [root@director ~]# restorecon -R /etc/heat
安装 puppet 并恢复其配置数据:
[root@director ~]# yum install -y puppet hiera [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/puppet/hieradata/
如果在 undercloud 中使用 SSL,请刷新 CA 证书。根据 undercloud 配置,使用用户提供的证书的步骤或自动生成的证书的步骤:
如果 undercloud 配置了用户提供的证书,请完成以下步骤:
提取证书:
[root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/instack-certs/undercloud.pem [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/ca-trust/source/anchors/*
恢复 SELinux 上下文并管理文件系统标记:
[root@director ~]# restorecon -R /etc/pki [root@director ~]# semanage fcontext -a -t etc_t "/etc/pki/instack-certs(/.*)?" [root@director ~]# restorecon -R /etc/pki/instack-certs
更新证书:
[root@director ~]# update-ca-trust extract
如果您使用
certmonger
自动 undercloud 的证书,请完成以下步骤:提取证书、CA 证书和 certmonger 文件:
[root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar var/lib/certmonger/* [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/tls/* [root@director ~]# tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/pki/ca-trust/source/anchors/*
恢复 SELinux 上下文:
[root@director ~]# restorecon -R /etc/pki [root@director ~]# restorecon -R /var/lib/certmonger
删除
/var/lib/certmonger/lock
文件:[root@director ~]# rm -f /var/lib/certmonger/lock
切换到
stack
用户:[root@director ~]# su - stack [stack@director ~]$
安装
python-tripleoclient
软件包:$ sudo yum install -y python-tripleoclient
运行 undercloud 安装命令。确保在
stack
用户的主目录中运行它:[stack@director ~]$ openstack undercloud install
安装完成后,undercloud 会自动恢复与 overcloud 的连接。节点继续轮询 OpenStack Orchestration (heat)是否有待处理的任务。
切换到 root 用户:
$ sudo su -
将容器数据与备份内容同步:
[root@director ~]$ tar -xvC / -f undercloud-backup-$TIMESTAMP.tar var/lib/docker/ [root@director ~]$ tar -xvC / -f undercloud-backup-$TIMESTAMP.tar var/lib/registry/ [root@director ~]$ tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/docker/ [root@director ~]$ tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/docker-distribution/ [root@director ~]$ tar -xvC / -f undercloud-backup-$TIMESTAMP.tar etc/sysconfig/docker* [root@director ~]$ systemctl restart docker docker-distribution
第 3 章 为 overcloud 节点恢复镜像
director 需要最新的磁盘镜像用于置备新的 overcloud 节点。按照以下步骤恢复这些镜像。
流程
查找
stackrc
文件,以启用 director 的命令行工具:[stack@director ~]$ source ~/stackrc
安装
rhosp-director-images
和rhosp-director-images-ipa
软件包:(undercloud) [stack@director ~]$ sudo yum install rhosp-director-images rhosp-director-images-ipa
将镜像存档提取到
stack
用户主页 (/home/stack/images
) 中的images
目录中:(undercloud) [stack@director ~]$ cd ~/images (undercloud) [stack@director images]$ for i in /usr/share/rhosp-director-images/overcloud-full-latest-13.0.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-13.0.tar; do tar -xvf $i; done
把这些镜像导入到 director:
(undercloud) [stack@director images]$ cd ~/images (undercloud) [stack@director images]$ openstack overcloud image upload --image-path /home/stack/images/
配置环境中的节点以使用新镜像:
(undercloud) [stack@director images]$ for NODE in $(openstack baremetal node list -c UUID -f value) ; do openstack overcloud node configure $NODE ; done
第 4 章 验证完成的恢复
使用以下命令对新恢复的环境执行健康检查:
4.1. 检查 Identity Service (Keystone)操作
此步骤通过查询用户列表来验证 Identity Service 操作。
# source stackrc # openstack user list
从控制器运行时,此命令的输出应该包括环境中创建的用户列表。此操作演示了 keystone 正在运行并成功验证用户请求。例如:
# openstack user list +----------------------------------+------------+---------+----------------------+ | id | name | enabled | email | +----------------------------------+------------+---------+----------------------+ | 9e47bb53bb40453094e32eccce996828 | admin | True | root@localhost | | 9fe2466f88cc4fa0ba69e59b47898829 | ceilometer | True | ceilometer@localhost | | 7a40d944e55d422fa4e85daf47e47c42 | cinder | True | cinder@localhost | | 3d2ed97538064f258f67c98d1912132e | demo | True | | | 756e73a5115d4e9a947d8aadc6f5ac22 | glance | True | glance@localhost | | f0d1fcee8f9b4da39556b78b72fdafb1 | neutron | True | neutron@localhost | | e9025f3faeee4d6bb7a057523576ea19 | nova | True | nova@localhost | | 65c60b1278a0498980b2dc46c7dcf4b7 | swift | True | swift@localhost | +----------------------------------+------------+---------+----------------------+