1.2. 备份和恢复工作方式

以下小节演示了备份和恢复的工作流。

1.2.1. 卷备份工作流

当块存储备份服务执行备份时,它会从 cinder API 接收请求来备份目标卷。备份服务完成请求,并将内容存储在后端。

下图演示了请求如何与 Block Storage (cinder)服务交互来执行备份。

OpenStack BlockStorage 备份
  1. 客户端通过调用 cinder API 来发出一个请求来备份块存储卷。
  2. Cinder API 服务从 HAProxy 接收请求并验证请求、用户凭据和其他信息。
  3. 在 SQL 数据库中创建备份记录。
  4. 通过 AMQP 对 cinder-backup 服务进行异步 RPC 调用,以备份卷。
  5. 将当前备份记录(带有 ID)返回到 API 调用器。
  6. RPC 创建消息到达其中一个备份服务。
  7. cinder-backup 服务对 get_backup_device 执行同步 RPC 调用。
  8. cinder-volume 服务确保正确的设备返回到调用者。通常,它是同一个卷,但如果卷正在使用,则服务会返回临时克隆的卷或临时快照,具体取决于配置。
  9. cinder-backup 服务向 cinder-volume 发出另一个同步 RPC 以公开源设备。
  10. cinder-volume 服务导出并映射源设备(卷或快照),并返回适当的连接信息。
  11. cinder-backup 服务使用连接信息附加源卷。
  12. cinder-backup 服务调用备份驱动程序,设备已经附加,后者开始向备份目的地传输数据传输。
  13. 卷从 Backup 主机分离。
  14. cinder-backup 服务向 cinder-volume 发出同步 RPC,以断开源设备的连接。
  15. cinder-volume 服务取消映射并删除设备的导出。
  16. 如果创建了临时卷或临时快照,cinder-backup 会调用 cinder-volume 来删除它。
  17. cinder-volume 服务移除临时卷。
  18. 备份完成后,备份记录会在数据库中更新。

1.2.2. 卷恢复工作流

下图演示了用户请求恢复块存储服务(cinder)备份时所执行的步骤。

OpenStack BlockStorage 恢复
  1. 客户端通过调用 CinderREST API 来发出恢复块存储备份的请求。
  2. Cinder API 从 HAProxy 接收请求并验证请求、用户凭据和其他信息。
  3. 如果请求不包含现有卷作为目的地,API 会发出异步 RPC 调用来创建新卷并轮询卷的状态,直到卷可用为止。
  4. cinder-scheduler 选择一个卷服务,并发出 RPC 调用来创建卷。
  5. 所选的 cinder-volume 服务创建卷。
  6. cinder-api 检测到卷可用时,会在数据库中创建备份记录。
  7. 通过 AMQP 对备份服务进行异步 RPC 调用,以恢复备份。
  8. 将当前卷 ID、备份 ID 和卷名称返回到 API 调用器。
  9. RPC 创建消息到达其中一个备份服务。
  10. cinder-backup 服务执行对 cinder-volume 的同步 RPC 调用,以公开目标卷。
  11. cinder-volume 服务导出并映射目标卷返回适当的连接信息。
  12. cinder-backup 服务使用连接信息附加源卷。
  13. cinder-backup 服务调用已附加设备的驱动程序,后者开始恢复卷目的地的数据。
  14. 卷从备份主机分离。
  15. cinder-backup 服务向 cinder-volume 发出同步 RPC,以断开源设备的连接。
  16. cinder-volume 服务取消映射并删除设备的导出。
  17. 备份完成后,会在数据库中更新备份记录。