本节咱们讨论 volume 的 Backup 操做。python
Backup 是将 volume 备份到别的地方(备份设备),未来能够经过 restore 操做恢复。api
初看 backup 功能好像与 snapshot 很类似,均可以保存 volume 的当前状态,以备之后恢复。但两者在用途和实现上仍是有区别的,具体表如今:架构
Snapshot 依赖于源 volume,不能独立存在;而 backup 不依赖源 volume,即使源 volume 不存在了,也能够 restore。ide
Snapshot 与源 volume 一般存放在一块儿,都由同一个 volume provider 管理;而 backup 存放在独立的备份设备中,有本身的备份方案和实现,与 volume provider 没有关系。加密
上面两点决定了 backup 具备容灾功能;而 snapshot 则提供 volume provider 内便捷的回溯功能。spa
Cinder 的 backup 功能是由 cinder-backup 服务提供的,devstack 默认没有启用该服务,须要手工启用。与 cinder-volume 相似,cinder-backup 也经过 driver 架构支持多种备份 backend,包括 POSIX 文件系统、NFS、Ceph、GlusterFS、Swift 和 IBM TSM。支持的driver 源文件放在 /opt/stack/cinder/cinder/backup/drivers/rest
本节咱们将以 NFS 为 backend 来研究 backup 操做。日志
在实验环境中,存放 volume backup 的 NFS 远程目录为 192.168.104.11:/backup cinder-backup 服务节点上 mount point 为 /backup_mount。ci
须要在 /etc/cinder/cinder.conf 中做相应配置。rem
而后手工启动 cinder-backup 服务。
/usr/bin/python /usr/local/bin/cinder-backup --config-file /etc/cinder/cinder.conf
一切准备就绪,下面咱们来看 backup 操做的流程
向 cinder-api 发送 backup 请求
cinder-api 发送消息
cinder-backup 执行 backup 操做
下面咱们详细讨论每个步骤。
客户(能够是 OpenStack 最终用户,也能够是其余程序)向 cinder-api 发送请求:“请 backup 指定的 volume。
这里咱们将 backup volume “vol-1”,目前 backup 只能在 CLI 中执行。
这里由于 vol-1 已经 attach 到 instance,须要使用 --force 选项。
cinder-api 接收到 backup volume 的请求。日志文件在 /opt/stack/logs/c-api.log。
cinder-api 发送 backup 消息。cinder-api 没有打印发送消息的日志,只能经过源代码查看 /opt/stack/cinder/cinder/backup/api.py,方法为 create。
cinder-backup 收到消息后,经过以下步骤完成 backup 操做,日志为 /opt/stack/logs/c-vol.log。
启动 backup 操做,mount NFS。
建立 volume 的临时快照。
建立存放 backup 的 container 目录。
对临时快照数据进行压缩,并保存到 container 目录。
建立并保存 sha256(加密)文件和 metadata 文件。
删除临时快照。
Backup 完成后,咱们能够查看一下 container 目录的内容
里面有三个文件,根据前面的日志咱们能够知道:
backup-00001,压缩后的 backup 文件。
backup_metadata,metadata 文件。
backup_sha256file,加密文件。
能够经过 cinder backup-list 查看当前存在的 backup。
另外咱们能够查看一下 cinder backup-create 的用法。
这里有 --incremental 选项,表示能够执行增量备份。 若是以前作过普通(全量)备份,以后能够经过增量备份大大减小须要备份的数据量,是个很不错的功能。增量备份的操做和日志分析留给你们作练习。
以上就是 volume backup 的分析,下一节咱们讨论如何经过 restore 操做恢复备份的 volume。