背景:
为了保障虚拟机用户的数据安全,需要提供虚拟机备份的功能,该功能是针对用户的整台虚拟机包括系统盘与所有的数据盘,提供的备份服务,可以帮助用户方便的将数据恢复到任意备份点,以此来保障用户的数据安全。需要完成虚拟机的多个磁盘在同一时间点的备份即一致性的备份
系统架构
上图主要涉及如下交互:
- 用户通过REST api访问cinder-api(单盘备份)及nova-api(整机备份)。
- cinder组件之间以及nova组件之间通过AMQP(rabbitmq通信)。
- 整机备份过程中nova-api会通过cinderclient包(REST api)访问cinder-api。
- 整机备份过程中,cinder-api/cinder-volume/cinder-backup会通过novaclient包(REST api)访问nova-api,以此将整机备份创建进度同步至nova。
- cinder-volume通过librbd及rbd cli控制ceph集群,对ceph rbd的image(卷)进行制作snapshot等操作。
- cinder-backup通过swift api访问ceph rgw对象存储。
- cinder-backup需要访问ceph rbd的数据面来读取数据,并将数据上传到ceph rgw对象存储。
云主机备份流程图
主要流程如下:
- Nova-api收到创建云主机备份的API请求,先进行参数,云主机状态等检查;
- 之后由nova-api通过rpc-cast调用nova-compute完成虚机的sync和quiesce动作;
- Nova-compute接着通过cinderclient调用cinder-api,发送创建云主机备份请求;
- Cinder-api收到请求后,先进行参数,云盘状态等检查;
- Cinder-api通过rpc-call调用cinder-volume先完成云主机下所有云盘的快照创建;
- Cinder-volume所有快照创建完成后,cinder-api通过cinderclient通知nova-api快照创建完成;
- 接着cinder-api通过rpc-cast,调用cinder-backup创建每个云盘备份;
- Cinder-backup会先通过rpc-call获取磁盘的信息;
- 接着cinder-backup连接磁盘,并从磁盘中分段读取磁盘数据;每段数据通过swift接口上传到对象存储中;
- 完成所有云盘数据的备份动作后,cinder-backup断开磁盘的连接;会先通过novaclient通知nova某个卷备份创建完成;
总结:
天翼云实现了云盘/云主机的磁盘数据备份功能,支持将数据备份到对象存储中,同时云管界面还支持客户定时备份策略,保留最近备份的个数等灵活设置,为客户随时恢复任何时间的备份提供数据高可靠服务保障。