块存储备份指南
在 OpenStack 中了解、使用和管理块存储备份服务
OpenStack Documentation Team
rhos-docs@redhat.com摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 Submit。
第 1 章 Red Hat OpenStack Platform Block Storage 备份服务概述
Red Hat OpenStack Platform (RHOSP)提供了在 Red Hat Enterprise Linux 上构建私有或公共基础架构即服务(IaaS)云的基础。它是用于开发支持云工作负载的可扩展容错平台。
您可以使用 RHOSP 仪表板或命令行客户端方法管理备份服务的大部分功能,但您必须使用命令行来执行一些高级步骤。
有关 Red Hat OpenStack Platform 文档的完整套件,请参阅 Red Hat OpenStack Platform 文档。
Block Storage 服务(cinder)包括水平可扩展的备份服务,可用于将 cinder 卷备份到不同的存储后端。您可以使用块存储备份服务来创建和恢复完整备份或增量备份。服务独立于 volume-array。
Red Hat OpenStack Platform (RHOSP) director 是一个安装和管理完整的 RHOSP 环境的工具组,称为 overcloud。有关 director 的更多信息,请参阅 Director 安装和使用 指南。overcloud 包含为最终用户提供服务的组件,包括块存储。Block Storage 备份服务是您部署到 Controller 节点上的可选服务。
1.1. 备份和快照
卷备份是卷内容的持久副本。卷备份通常作为对象存储创建,默认情况下通过 OpenStack 对象存储服务(swift)进行管理。您可以使用 Red Hat Ceph 和 NFS 作为备份的替代后端。
在创建卷备份时,所有备份元数据都存储在块存储服务数据库中。当从备份中恢复卷时,cinder-backup 服务使用此元数据。这意味着,当您从灾难性数据库丢失执行恢复时,您必须首先恢复块存储服务数据库,然后再恢复任何卷备份,只要块存储服务数据库的原始卷备份元数据是完整的。如果只想配置卷备份的子集以保留灾难性数据库丢失,您也可以导出备份元数据。然后,您可以使用 REST API 或 cinder 客户端将元数据重新导入到块存储数据库,并正常恢复卷备份。
卷备份与快照不同。备份保留卷中包含的数据,快照会在特定时间点保留卷的状态。如果卷有现有快照,则无法删除它。卷备份可防止数据丢失,而快照则有助于克隆。因此,快照后端通常与卷后端共存,以便尽可能在克隆期间的延迟。相反,备份存储库通常独立于后端,它们在不同节点或不同的物理存储上。这会防止备份存储库不受卷后端可能出现的破坏。
有关卷快照的更多信息,请参阅 存储指南中的 创建、使用或删除卷快照。
1.2. 备份和恢复工作方式
以下小节演示了备份和恢复的工作流。
1.2.1. 卷备份工作流
当块存储备份服务执行备份时,它会接收来自 cinder API 的请求来备份目标卷。备份服务完成请求,并将内容保存到后端。
下图演示了请求如何与 Block Storage (cinder)服务交互来执行备份。

- 客户端通过调用 cinder API 来发出请求来备份块存储卷。
- cinder API 服务接收来自 HAProxy 的请求,并验证请求、用户凭据和其他信息。
- 在 SQL 数据库中创建备份记录。
-
通过 AMQP 对
cinder-backup服务进行异步 RPC 调用来备份卷。 - 将当前的备份记录返回 ID 到 API 调用者。
- RPC 创建消息到达其中一个备份服务。
-
cinder-backup服务执行同步的 RPC 调用来get_backup_device。 -
cinder-volume服务确保正确的设备返回到调用者。通常,它是一个同一个卷,但如果卷正在使用,服务会返回临时克隆的卷或临时快照,具体取决于配置。 -
cinder-backup服务向cinder-volume发出另一个同步的 RPC 来公开源设备。 -
cinder-volume服务导出并映射源设备(卷或快照),并返回适当的连接信息。 -
cinder-backup服务使用连接信息附加源卷。 -
cinder-backup服务调用备份驱动程序,其设备已经附加,这将开始将数据传送到备份目的地。 - 卷从备份主机分离。
-
cinder-backup服务向cinder-volume发出同步的 RPC 来断开源设备。 -
cinder-volume服务取消映射并删除该设备的导出。 -
如果创建了临时卷或临时快照,
cinder-backup调用cinder-volume将其删除。 -
cinder-volume服务会删除临时卷。 - 备份完成后,会在数据库中更新备份记录。
1.2.2. 卷恢复工作流
下图显示了当用户请求恢复块存储服务(cinder)备份时会发生什么步骤。

- 客户端通过调用 CinderREST API 来发出请求来恢复块存储备份。
- cinder API 接收来自 HAProxy 的请求,并验证请求、用户凭据和其他信息。
- 如果请求不包含现有卷作为目标,API 会发出异步 RPC 调用来创建新卷并轮询卷的状态,直到卷可用为止。
-
cinder-scheduler选择一个卷服务,并发出 RPC 调用来创建卷。 -
所选
cinder-volume服务创建卷。 -
当
cinder-api检测到卷可用时,会在数据库中创建备份记录。 - 通过 AMQP 对备份服务进行异步 RPC 调用来恢复备份。
- 将当前的卷 ID、备份 ID 和卷名称返回到 API 调用者。
- RPC 创建消息到达其中一个备份服务。
-
cinder-backup服务对cinder-volume执行同步 RPC 调用以公开目标卷。 -
cinder-volume服务导出并映射目标卷返回适当的连接信息。 -
cinder-backup服务使用连接信息连接源卷。 -
cinder-backup服务调用附加了设备的驱动程序,这将开始恢复到卷目的地的数据。 - 卷从备份主机分离。
-
cinder-backup服务向cinder-volume发出同步的 RPC 来断开源设备。 -
cinder-volume服务取消映射并删除该设备的导出。 - 备份完成后,会在数据库中更新备份记录。
1.3. 云存储与本地存储的比较
Google Cloud Storage 驱动程序是块存储备份服务支持的唯一云驱动程序。默认情况下,Google Cloud Storage 驱动程序将最昂贵的存储解决方案(Nearline)用于这种备份。
配置备份服务以优化性能。例如,如果您从欧洲创建备份,请将备份区域更改为欧洲。如果您没有从默认值更改备份区域,则由于两个区域之间的地理距离,性能可能会较慢。
Google Cloud Storage 需要特殊配置,具体如 附录 A, Google Cloud Storage 配置 部分所述。
下表根据情况列出云存储和本地存储的益处和局限性。
| 情况 | 云存储 | 本地存储 |
|---|---|---|
| 现场备份 | 云存储位于另一个公司的数据中心,因此会自动非现场。您可以从多个位置访问数据。远程副本可用于灾难恢复。 | 需要其他规划和费用。 |
| 硬件控制 | 依赖于其他服务的可用性和专业知识。 | 您可以完全控制存储硬件。需要管理和专业知识。 |
| 成本注意事项 | 根据供应商所使用的服务,不同的定价策略或层。 | 根据需要添加额外的硬件是已知的成本。 |
| 网络速度和数据访问 | 整个数据访问速度较慢,需要访问互联网。速度和延迟取决于多个因素。 | 对数据的访问是快速而迅速的。不需要互联网访问。 |
第 2 章 块存储备份服务部署
块存储备份服务是可选的。默认情况下不安装它,因此您必须将其添加到 overcloud 部署中
前提条件
- 现有 Red Hat OpenStack Platform (RHOSP)安装。
- 具有兼容备份驱动程序的可用存储源: Object Storage (swift、默认)、Ceph、NFS 或 Google Cloud 存储。
Google Cloud Storage 需要额外的配置。更多信息请参阅 附录 A, Google Cloud Storage 配置。
2.1. 为备份服务配置后端存储选项
要启用备份服务,请完成以下步骤。
流程
创建
cinder-backup.yaml文件的副本,该文件位于/usr/share/openstack-tripleo-heat-templates/environments/目录中,并将它存储在与其他自定义模板相同的位置。cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-backup.yaml /home/stack/templates/cinder-backup-settings.yaml
cinder-backup.yaml文件的副本包含默认设置,该设置使用 Pacemaker 为块存储备份服务配置 OpenStack Object Storage (swift)后端。如果这是您要用于备份的后端,则不需要更改此文件。如果您使用其他后端,请根据备份后端配置parameter_defaults:如果使用 Red Hat Ceph Storage,请使用以下方法之一配置
parameter_defaults:-
CinderBackupBackend: (Required)ceph -
CinderBackupRbdPoolName: (可选)设置为自定义 RBD 池名称。默认:备份
-
如果使用 NFS,请使用以下方法之一配置
parameter_defaults:-
CinderBackupBackend: (必需)nfs -
CinderBackupNfsShare: (必需)设置为您要挂载的 NFS 共享。默认值为空。 -
CinderBackupNfsMountOptions:(可选)设置为您的所需挂载选项。
-
- 保存对文件的更改。
要启用备份服务并应用此配置,请将您的备份设置环境文件添加到带有其他环境文件的堆栈中,并部署 overcloud:
(undercloud) [stack@undercloud ~]$ openstack overcloud deploy --templates \ -e [your environment files] -e /home/stack/templates/cinder-backup-settings.yaml
如需更多信息和其他配置选项,请参阅 附录 A, Google Cloud Storage 配置。
2.2. 使用 Google Cloud 配置部署 overcloud
在 '/home/stack/templates/ 中创建环境文件后,部署 overcloud,然后重新启动 cinder-backup 服务。
流程
-
以
stack用户身份登录。 部署配置:
$ openstack overcloud deploy --templates \ -e /home/stack/templates/cinder-backup-settings.yaml
重要如果您在创建 overcloud 时传递任何额外的环境文件,请使用
-e选项再次传递它们,以避免对 overcloud 进行不必要的更改。-
部署完成后,重启
cinder-backup服务。
如需更多信息,请参阅 Director 安装和使用指南中的在一个 overcloud 部署中包括的环境文件,以及 高级 Overcloud 自定义指南中的环境文件。
第 3 章 使用块存储备份服务
您可以使用块存储备份服务执行完整或增量备份,并将备份恢复到卷。
3.1. 完整备份
3.1.1. 创建完整卷备份
要备份卷,请使用 cinder backup-create 命令。默认情况下,这个命令会创建卷的完整备份。如果卷具有现有的备份,您可以选择改为创建增量备份。更多信息请参阅 第 3.2.2 节 “执行增量备份”。
在 Red Hat OpenStack Platform (RHOSP)版本 16 之前,cinder backup-create 命令在第一个完整 Ceph 卷备份到 Ceph Storage 后端后创建了增量备份。在 RHOSP 16 及更新的版本中,您必须使用 --incremental 选项来创建增量卷备份。如果没有在 cinder backup-create 命令中使用 --incremental 选项,则默认设置会创建完整备份。更多信息请参阅 第 3.2.2 节 “执行增量备份”。
您可以创建您可以访问的卷备份。这意味着,无论所有者如何,具有管理特权的用户都可以备份任何卷。更多信息请参阅 第 3.1.2 节 “作为管理员创建卷备份”。
流程
查看您要备份的卷的 ID 或 Display Name:
# cinder list
备份卷:
# cinder backup-create _VOLUME_
使用您要备份的卷的
ID或Display Name替换 VOLUME。例如:+-----------+--------------------------------------+ | Property | Value | +-----------+--------------------------------------+ | id | e9d15fc7-eeae-4ca4-aa72-d52536dc551d | | name | None | | volume_id | 5f75430a-abff-4cc7-b74e-f808234fa6c5 | +-----------+--------------------------------------+
生成的备份的
volume_id与源卷的 ID 相同。验证卷备份创建是否完成:
# cinder backup-list
-
当备份条目的
Status可用时,卷备份创建已完成。
3.1.2. 作为管理员创建卷备份
具有管理特权的用户可以备份由 Red Hat OpenStack Platform 管理的任何卷。当 admin 用户备份由非管理员用户拥有的卷时,默认会在卷所有者中隐藏备份。
流程
作为管理员用户,您可以使用以下命令备份卷,并将备份可供特定租户使用:
# cinder --os-auth-url <KEYSTONEURL> --os-tenant-name <TENANTNAME> --os-username <USERNAME> --os-password <PASSWD> backup-create <VOLUME>
根据您的环境要求替换以下变量:
- <TENANTNAME> 是您要提供备份的租户的名称。
- <USERNAME> 和 <PASSWD> 是 <TENANTNAME> 中用户的用户名和密码凭证。
- <VOLUME> 是您要备份的卷的名称或 ID。
-
<KEYSTONEURL> 是身份服务的 URL 端点,通常是 http://IP:5000/v2,其中 IP 是身份服务主机的 IP 地址。执行此操作时,生成的备份的大小会根据
TENANTNAME的配额计数,而不是租户 admin 的配额。
3.1.3. 导出卷备份的元数据
您可以导出和存储卷备份的元数据,以便在块存储数据库出现灾难性损失时也可以恢复卷备份。
流程
运行以下命令:
# cinder backup-export _BACKUPID_
将 <BACKUPID> 替换为卷备份的 ID 或名称:
+----------------+------------------------------------------+ | Property | Value | +----------------+------------------------------------------+ | backup_service | cinder.backup.drivers.swift | | backup_url | eyJzdGF0dXMiOiAiYXZhaWxhYmxlIiwgIm9iam...| | | ...4NS02ZmY4MzBhZWYwNWUiLCAic2l6ZSI6IDF9 | +----------------+------------------------------------------+
卷备份元数据由 backup_service 和 backup_url 值组成。
3.1.4. 备份使用中的卷
当支持 Block Storage 后端快照时,您可以使用 --force 选项创建使用卷的备份。
要使用 --force 选项,必须支持 Block Storage 后端快照。您可以通过检查您正在使用的后端文档来验证快照支持。
通过使用 --force 选项,您确认您没有在执行备份前静止驱动器。使用此方法可创建崩溃一致性,而不是应用程序一致的备份。这意味着备份不知道执行备份时正在运行的应用程序。但是,数据是完好。
流程
要创建使用卷的备份,请运行:
# cinder backup-create _VOLUME_ --incremental --force
3.1.5. 备份快照
您可以使用与快照关联的卷 ID,从快照创建完整备份。
流程
使用
cinder 快照列表查找要备份的快照ID。# cinder snapshot-list --volume-id _VOLUME_ID_
如果快照命名为,您可以使用以下示例查找
ID:# cinder snapshot-show _SNAPSHOT_NAME_
创建快照的备份:
# cinder backup-create _VOLUME_ --snapshot-id=_SNAPSHOT_ID_
注意当使用
--snapshot-id选项时,基于快照的 NFS 卷备份会失败。这是个已知问题。
3.1.6. 在边缘站点间备份和恢复
您可以在边缘站点和可用区中的分布式计算节点(DCN)架构中备份和恢复块存储服务(cinder)卷。cinder-backup 服务在中央可用区(AZ)中运行,并且备份存储在中央 AZ 中。块存储服务不将备份存储在 DCN 站点。
前提条件
-
中央站点使用位于
/usr/share/openstack-tripleo-heat-templates/environments中的cinder-backup.yaml环境文件来部署。如需更多信息,请参阅块存储备份服务部署。 - Block Storage 服务(cinder) CLI 可用。
-
所有站点都必须使用通用
openstackcephx 客户端名称。如需更多信息,请参阅 为外部访问创建 Ceph 密钥。
流程
在第一个 DCN 站点中创建卷的备份:
$ cinder --os-volume-api-version 3.51 backup-create --name <volume_backup> --availability-zone <az_central> <edge_volume>
-
将
<volume_backup> 替换为卷备份的名称。 -
将
<az_central> 替换为托管cinder-backup服务的中央可用区的名称。 将 <
edge_volume> 替换为您要备份的卷的名称。注意如果您在 Ceph 密钥环时遇到问题,您可能需要重启
cinder-backup容器,以便密钥环从主机复制到容器。
-
将
将备份恢复到第二个 DCN 站点中的新卷:
$ cinder --os-volume-api-version 3.51 create --availability-zone <az_2> --name <new_volume> --backup-id <volume_backup> <volume_size>
-
将 <
;az_2> 替换为您要恢复备份的可用区的名称。 -
将
<new_volume> 替换为新卷的名称。 -
将 <
;volume_backup> 替换为您在上一步中创建的卷备份的名称。 -
将 <
;volume_size> 替换为等于或大于原始卷的大小的值。
-
将 <
3.2. 增量备份
使用块存储备份服务,您可以执行增量备份。
3.2.1. 性能考虑
增量和数据压缩等一些备份功能可能会影响性能。增量备份会对性能产生影响,因为必须完全读取和校验和卷中的所有数据。
您可以将数据压缩用于非 Ceph 后端。启用数据压缩需要额外的 CPU 电源,但整体的网络带宽和存储空间更少。
多路径配置也会影响性能。如果您在没有启用多路径的情况下附加多个卷,您可能无法连接或具有完整的网络功能,这会影响性能。
您可以使用高级配置选项启用或禁用压缩,定义进程数量,以及添加额外的 CPU 资源。更多信息请参阅 附录 B, 高级块存储备份配置选项。
3.2.1.1. 从快照备份的影响
某些后端支持从快照创建备份。支持此功能的驱动程序可以直接附加快照,该快照比将快照克隆到卷中可附加到它的速度要快。通常,这个功能可能会影响性能,因为从快照创建卷的额外步骤。
3.2.2. 执行增量备份
默认情况下,cinder backup-create 命令会创建卷的完整备份。但是,如果卷具有现有的备份,您可以创建增量备份。
NFS、Object Storage (swift) 和 Red Hat Ceph Storage 备份软件仓库完全支持增量备份。
增量备份捕获自上次完整或增量备份以来对卷的任何更改。对卷执行大量、常规的完全备份可能会变得非常密集型,因为随着时间而增加卷的大小。通过增量备份,您可以捕获对卷的定期更改并最小化资源使用量。
流程
要创建增量卷备份,使用以下命令使用
--incremental选项:# cinder backup-create _VOLUME_ --incremental
使用您要备份的卷的
ID或Display Name替换 VOLUME。
如果已有增量备份,则您无法删除完全备份。如果完整备份有多个增量备份,则只能删除最新的备份。
3.3. 取消备份
要取消备份,管理员必须在备份时请求强制删除。
如果使用 Ceph 或 RBD 后端,则不支持此操作。
流程
运行以下命令:
# openstack volume backup delete --force <backup>
在完成取消操作且备份列表中不再出现在备份列表中后,备份会有一个略微的延迟,才能成功取消备份。要验证备份是否已成功取消,源资源中的备份状态将停止。
在 Red Hat OpenStack 版本 12 之前,备份 状态存储在卷中,即使备份快照也是如此。因此,当备份快照时,如果快照仍映射了快照,则带有取消的快照的任何删除操作都可能会导致错误。在 Red Hat OpenStack Platform 版本 13 及更高版本中,可在任何支持的备份驱动程序中取消持续恢复操作。
3.4. 查看和修改租户备份配额
通常,您可以使用仪表板修改租户存储配额,例如,租户可以拥有的卷、卷存储、快照或其他操作限值。但是,使用控制面板修改备份配额的功能尚不可用。
您必须使用命令行界面修改备份配额。
流程
要查看特定租户(TENANT_ID)的存储配额,请运行以下命令:
# cinder quota-show TENANT_ID
要更新可在特定租户中创建的最大备份数量(MAXNUM),请运行以下命令:
# cinder quota-update --backups MAXNUM TENANT_ID
要更新特定租户中所有备份的最大备份总量(MAXGB),请运行以下命令:
# cinder quota-update --backup-gigabytes MAXGB TENANT_ID
要查看特定租户的存储配额使用量,请运行以下命令:
# cinder quota-usage TENANT_ID
3.5. 从备份中恢复
在导致数据丢失的数据库故障或其他类型的事件后,使用您创建的备份来恢复数据。
如果您将 cinder-backup 服务配置为使用 Ceph RBD 驱动程序,则只能将备份卷恢复到基于 RBD 的块存储(cinder)后端。
3.5.1. 从备份中恢复卷
要从备份创建新卷,请完成以下步骤。
流程
查找您要使用的卷备份 ID:
# cinder backup-list
确保卷 ID 与您要恢复的卷 ID 匹配。
恢复卷备份:
# cinder backup-restore _BACKUP_ID_
将 BACKUP_ID 替换为您要使用的卷备份 ID。
如果不再需要备份,请删除它:
# cinder backup-delete _BACKUP_ID_
如果您需要将备份的卷恢复到特定类型的卷,请使用
--volume选项将备份恢复到特定卷:# cinder backup-restore _BACKUP_ID --volume VOLUME_ID_
注意如果从加密备份中恢复卷,则目标卷类型还必须被加密。
3.5.2. 在块存储数据库丢失后恢复卷
当发生块存储数据库丢失时,您无法恢复卷备份,因为数据库包含卷备份服务所需的元数据。但是,在创建卷备份后,您可以导出和存储元数据,该元数据由 backup_service 和 backup_url 值组成,以便在出现数据库丢失时,您可以恢复卷备份。更多信息请参阅 第 3.1.1 节 “创建完整卷备份”。
如果您导出并存储了这个元数据,您可以将它导入到一个新的块存储数据库,这样就可以恢复卷备份。
对于增量备份,您必须导入所有导出的数据,然后才能恢复其中一个增量备份。
流程
以具有管理特权的用户身份,运行以下命令:
# cinder backup-import _backup_service_ _backup_url_
使用您导出的元数据替换
backup_service和backup_url。例如,使用从 第 3.1.1 节 “创建完整卷备份” 导出的元数据:# cinder backup-import cinder.backup.drivers.swift eyJzdGF0dXMi...c2l6ZSI6IDF9 +----------+--------------------------------------+ | Property | Value | +----------+--------------------------------------+ | id | 77951e2f-4aff-4365-8c64-f833802eaa43 | | name | None | +----------+--------------------------------------+
- 将元数据导入到块存储服务数据库中后,您可以正常恢复该卷,请参阅 第 3.5.1 节 “从备份中恢复卷”。
3.5.3. 取消备份恢复
要取消备份恢复操作,请将备份的状态更改为除 恢复 之外的任何内容。您可以使用 错误状态 来最小化恢复是否成功的混乱。或者,您可以将值更改为 available。
$ openstack volume backup set --state error BACKUP_ID
备份取消是一种异步操作,因为备份驱动程序必须在取消备份前检测状态更改。当目标卷中的状态更改为 available 时,取消已完成。
此功能目前在 RBD 备份上不可用。
如果恢复操作在启动后取消,则目的地卷会无用,因为无法知道数据量(若有)实际恢复了多少数据。
3.6. 故障排除
有两个常见的情况导致备份服务会出现许多问题:
-
当
cinder-backup服务启动时,它会连接到其配置的后端,并使用它作为备份的目标。此连接出现问题可能会导致服务失败。 - 请求备份时,备份服务连接到卷服务并附加请求的卷。只有备份期间,此连接存在问题才是明显的。
在这两种情况下,日志都包含描述错误的消息。
有关日志文件和服务的更多信息,请参阅日志记录、监控和故障排除指南中的 OpenStack 服务日志文件。
有关日志位置和故障排除建议的常规信息,请参阅日志记录、监控和故障排除指南中的 块存储(cinder)日志文件。
3.6.1. 验证服务
您可以通过验证服务是否可用以及检查日志文件以查找错误消息来诊断很多问题。有关关键服务及其交互的详情请参考 第 1.2 节 “备份和恢复工作方式”。
验证服务的状态后,检查 cinder-backup.log 文件。Block Storage Backup 服务日志位于 /var/log/containers/cinder]/cinder-backup.log 中。
流程
在卷中运行
cinder show命令,以查看它是否由主机存储:# cinder show
运行
cinder service-list命令查看正在运行的服务:# cinder service-list +------------------+--------------------+------+---------+-------+----------------------------+-----------------+ | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +------------------+--------------------+------+---------+-------+----------------------------+-----------------+ | cinder-backup | hostgroup | nova | enabled | up | 2017-05-15T02:42:25.000000 | - | | cinder-scheduler | hostgroup | nova | enabled | up | 2017-05-15T02:42:25.000000 | - | | cinder-volume | hostgroup@sas-pool | nova | enabled | down | 2017-05-14T03:04:01.000000 | - | | cinder-volume | hostgroup@ssd-pool | nova | enabled | down | 2017-05-14T03:04:01.000000 | - | +------------------+--------------------+------+---------+-------+----------------------------+-----------------+
- 验证预期的服务是否可用。
3.6.2. 故障排除窍门
备份是异步的。块存储备份服务在收到 API 请求时执行少量的静态检查,如检查无效的卷引用(缺失)或正在 实例使用 或附加到实例的卷。in-use case 要求您使用 --force 选项。
使用 --force 选项意味着 I/O 不被静止,生成的卷镜像可能会损坏。
如果 API 接受请求,在后台进行备份。通常,即使备份失败或者为失败,CLI 也会立即返回。您可以使用 cinder 备份 API 查询备份状态。如果发生错误,请查看日志来发现原因。
3.6.3. pacemaker
默认情况下,Pacemaker 部署块存储备份服务。Pacemaker 将虚拟 IP 地址、容器、服务和其他功能配置为集群中的资源,以确保定义的一组 OpenStack 集群资源正在运行并可用。当集群中的服务或整个节点失败时,Pacemaker 可以重启该资源,从集群中移除该节点,或者重新引导节点。对大部分服务的请求通过 HAProxy
有关如何使用 Pacemaker 进行故障排除的详情,请参考 高可用性部署和使用指南中的使用 Pacemaker 管理高可用性服务。
附录 A. Google Cloud Storage 配置
要将块存储服务(cinder)配置为使用 Google Cloud Storage 作为备份后端,请完成以下步骤:
创建并下载 Google 帐户的服务帐户凭证:
创建环境文件来映射您需要的块存储设置:
使用您创建的环境文件重新部署 overcloud:
前提条件
-
您有具有升级权限的帐户的用户名和密码。您可以使用为部署 overcloud 而创建的
stack用户帐户。如需更多信息,请参阅 Director 安装和使用 指南。 - 有访问 Google Cloud Platform 的 Google 帐户。块存储服务使用此帐户访问并使用 Google Cloud 来存储备份。
A.1. 创建 GCS 凭据文件
Block Storage 服务(cinder)需要您的 Google 凭证来访问并使用 Google Cloud 进行备份。您可以通过创建服务帐户密钥为块存储服务提供这些凭证。
流程
- 使用您的 Google 帐户登录到 Google 开发人员控制台(http://console.developers.google.com)。
点 Credentials 选项卡,从 Create credentials 下拉菜单中选择 Service account key。
在 Create service account key 屏幕中,从 Service account 下拉菜单中选择您要使用块存储服务的服务帐户:
在同一个屏幕中,从 Key 类型部分选择 JSON,然后点击 Create。浏览器会将密钥下载到其默认下载位置:
打开该文件并记录
project_id参数的值:{ "type": "service_account", "project_id": "*cloud-backup-1370*", ...将 GCS JSON 凭证的副本保存到
/home/stack/templates/Cloud-Backup.json- 重要的
-
将文件命名为
Cloud-Backup.json,且不更改文件名。此 JSON 文件必须位于与您在 第 A.2 节 “创建cinder-backup-gcs.yaml” 中流程中创建的cinder-backup-gcs.yaml文件相同的目录位置。
A.2. 创建 cinder-backup-gcs.yaml
使用提供的示例文件,创建 cinder-backup-gcs.yaml 文件。
本例中使用的空格和格式(及您的文件中)至关重要。如果更改了空格,则文件可能无法按预期工作。
流程
复制以下文本,并粘贴到新文件中。不要对文件内容进行任何修改。
heat_template_version: rocky description: > Post-deployment for configuration cinder-backup to GCS parameters: servers: type: json DeployIdentifier: type: string resources: CinderBackupGcsExtraConfig: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/bash GCS_FILE=/var/lib/config-data/puppet-generated/cinder/etc/cinder/Cloud-Backup.json HOSTNAME=$(hostname -s) for NODE in $(hiera -c /etc/puppet/hiera.yaml cinder_backup_short_node_names | tr -d '[]",'); do if [ $NODE == $HOSTNAME ]; then cat <<EOF > $GCS_FILE GCS_JSON_DATA EOF chmod 0640 $GCS_FILE chown root:42407 $GCS_FILE fi done params: GCS_JSON_DATA: {get_file: Cloud-Backup.json} CinderBackupGcsDeployment: type: OS::Heat::SoftwareDeploymentGroup properties: servers: {get_param: servers} config: {get_resource: CinderBackupGcsExtraConfig} actions: ['CREATE','UPDATE'] input_values: deploy_identifier: {get_param: DeployIdentifier}-
将文件保存为
/home/stack/templates/cinder-backup-gcs.yaml。
A.3. 使用 Google Cloud 设置创建环境文件
创建环境文件,使其包含您要应用到块存储服务(cinder)的设置。在这种情况下,环境文件配置块存储服务以将卷备份存储到 Google Cloud。有关环境文件的更多信息,请参阅 Director 安装和使用 指南。
使用以下示例环境文件,并使用 Cloud-Backup.json 文件中列出的项目 ID 更新 backup_gcs_project_id。您还可以将 backup_gcs_bucket_location 位置从美国更改为更接近的位置。
有关 Google Cloud Backup Storage 备份后端的配置选项列表,请参考 表 A.1 “Google Cloud Storage 备份后端配置选项”。
流程
- 复制 环境文件示例。保留空格使用量。
-
将内容粘贴到新文件:
/home/stack/templates/cinder-backup-settings.yaml -
将
backup_gcs_project_id的值从cloud-backup-1370更改为Cloud-Backup.json文件中列出的项目 ID。 - 保存该文件。
环境文件示例
在环境文件中定义各个设置。使用 表 A.1 “Google Cloud Storage 备份后端配置选项” 选择可用的配置选项。
resource_registry:
OS::TripleO::Services::CinderBackup: /usr/share/openstack-tripleo-heat-templates/deployment/cinder/cinder-backup-pacemaker-puppet.yaml
# For non-pcmk managed implementation
# OS::TripleO::Services::CinderBackup: /usr/share/openstack-tripleo-heat-templates/deployment/cinder/cinder-backup-container-puppet.yaml
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/cinder-backup-gcs.yaml
parameter_defaults:
CinderBackupBackend: swift
ExtraConfig:
cinder::backup::swift::backup_driver: cinder.backup.drivers.gcs.GoogleBackupDriver
cinder::config::cinder_config:
DEFAULT/backup_gcs_credential_file:
value: /etc/cinder/Cloud-Backup.json
DEFAULT/backup_gcs_project_id:
value: cloud-backup-1370
DEFAULT/backup_gcs_bucket:
value: cinder-backup-gcs
DEFAULT/backup_gcs_bucket_location:
value: us表 A.1. Google Cloud Storage 备份后端配置选项
| PARAM | 默认 | CONFIG Description |
|---|---|---|
|
|
必需。您使用的服务帐户的项目 ID,并包含在 第 A.1 节 “创建 GCS 凭据文件” 中服务帐户密钥的 | |
|
| 您在 第 A.1 节 “创建 GCS 凭据文件” 中创建的服务帐户密钥文件的绝对路径。 | |
|
| 您要使用的 GCS 存储桶或对象存储存储库,可能不存在。如果您指定了不存在的存储桶,Google Cloud Storage 备份驱动程序会创建一个,并为它分配您指定的名称。如需更多信息,请参阅 Buckets 和 Bucket name 要求。 | |
|
|
|
GCS 存储桶的位置。只有在 |
|
|
| GCS 备份对象的大小(以字节为单位)。 |
|
|
|
为增量备份跟踪更改的大小,以字节为单位。这个值必须是 |
|
|
| GCS API 的 HTTP user-agent 字符串。 |
|
|
| GCS 对象以这个大小的块中下载,以字节为单位。 |
|
|
| GCS 对象以这个大小的区块(以字节为单位)上传。若要以单个块形式上传文件,请使用 -1 值。 |
|
|
| 尝试的重试次数。 |
|
|
|
GCS 存储桶的存储类。只有在 |
|
|
| GCS 错误代码列表。 |
|
|
| 启用或禁用计时器,以在卷备份期间将定期进度通知发送到遥测服务(ceilometer)。默认情况下启用(True)。 |
当您创建新存储桶时,Google Cloud Storage 会根据您选择的存储类进行收费(backup_gcs_storage_class)。默认的 NEARLINE 类适合备份服务。
您不能在创建存储桶后编辑存储桶的位置或类。如需更多信息 ,请参阅管理存储桶的存储类或位置。
A.4. 部署 overcloud
在 /home/stack/templates/ 中创建环境文件时,部署 overcloud,然后重新启动 cinder-backup 服务:
流程
-
以
stack用户身份登录。 部署配置:
$ openstack overcloud deploy --templates \ -e /home/stack/templates/cinder-backup-settings.yaml
重要如果您在创建 overcloud 时传递任何额外的环境文件,请使用 -e 选项再次传递它们,以避免对 overcloud 进行不必要的更改。
- 部署完成后,重启 cinder-backup 服务。
如需更多信息,请参阅 Director 安装和使用指南中的Overcloud 创建中包括的环境文件,以及高级 Overcloud 自定义指南中的环境文件部分。
附录 B. 高级块存储备份配置选项
在部署 director 安装前,cinder.conf 文件配置了块存储服务和备份服务。当 cinder.conf 的值没有等同于编配(heat)模板时,您可以使用自定义环境文件将值传递给 director。将这些值添加到自定义环境文件的 parameter_defaults 部分中的 ExtraConfig 部分,例如 cinder-backup-settings.yaml 文件。
通过 ExtraConfig,您可以添加额外的 hiera 配置来在所有节点上注入集群。这些设置包含在专用备份节点上。但是,如果您使用 ControllerExtraConfig 而不是 ExtraConfig,则设置会在 Controller 节点上安装,而不是安装在专用备份节点上。
您可以为来自 cinder.conf 文件的 DEFAULT 部分的设置替换 DEFAULT/[cinder.conf setting]` 。以下示例显示 ExtraConfig 条目如何在 YAML 文件中显示:
parameter_defaults:
ExtraConfig:
cinder::config::cinder_config:
DEFAULT/backup_compression_algorithm:
value: Nonetable B.1 列出与备份相关的示例选项。
表 B.1. 块存储备份服务配置选项
| Option | 类型 | 默认值 | Description |
|---|---|---|---|
| backup_service_inithost_offload | 选填 | True | 在备份服务启动过程中卸载待处理的备份删除。若为 false,则备份服务将保持关闭,直到所有待处理的备份都已删除。 |
| use_multipath_for_image_xfer | 选填 | False | 在备份和恢复过程中,使用多路径附加卷。这会影响所有 cinder 连接操作,如从镜像、通用冷迁移和其他操作创建卷。 |
| num_volume_device_scan_tries | 选填 | 3 | 重新扫描目标在附加过程中查找卷的次数上限。 |
| backup_workers | 选填 | 1 | 要运行的备份进程数。使用压缩运行多个并发备份或恢复操作会导致性能显著增加。 |
| backup_native_threads_pool_size | 选填 | 60 | 备份的原生线程池的大小。大多数备份驱动程序都很重要。您可以减少不依赖于此选项的特定驱动程序的值。 |
| backup_share | 必需 | 设置为 HOST:_EXPORT_PATH_。 | |
| backup_container | 选填 | None | (字符串)用于备份的自定义目录。 |
| backup_enable_progress_timer | 选填 | True | 启用(true)或禁用(false)计时器,以便在将卷备份到后端存储时将定期进度通知发送到遥测服务(ceilometer)。 |
| backup_mount_options | 选填 | 当您挂载 backup_share 中指定的 NFS 导出时,可以以逗号分隔的选项列表。 | |
| backup_mount_point_base | 选填 | $state_path/backup_mount | (字符串)包含 NFS 共享的挂载点的基础目录。 |
| backup_compression_algorithm | 选填 | zlib | 将备份数据发送到存储库时使用的压缩算法。有效值为 zlib、bz2 和 None。 |
| backup_file_size | 选填 | 1999994880 | 大于这个值的 cinder 卷中的数据作为备份存储库中的多个文件保存。这个选项必须是 backup_sha_block_size_bytes 的倍数。 |
| backup_sha_block_size_bytes | 选填 | 32768 | 数字签名计算的 cinder 卷块的大小 |