作者:姚夏冰
环境
系统: CentOS 7.2
OpenStack版本:Ocata
部署方式可以采用rdo方式部署,当然你也可以用devstack方式部署,现在官方文档内容详实,采用手动部署也没问题。
nova backup简介
nova backup是什么? 顾名思义就是针对虚拟机的备份,它可以指定虚拟机备份类型,备份保留的数目;这个功能在OpenStack E版的时候就有了。那nova backup到底是怎么做到备份虚拟机的?下面为大家拨开层层迷雾。
nova backup功能介绍
首先,我们手动来体验下novabackup的功能。
1、使用cirros小镜像启动一台test1的测试虚拟机。
2、查看nova backup命令行参数,可以看到支持daily/weekly的备份类型,也支持保留备份数目。
3、对虚拟机test1进行backup,备份类型采用daily备份,备份保留份数2;结果看到虚拟机在处于image_uploading状态,这正是虚拟机做快照的状态,而且通过nova image-list可以看到备份,那么可以得出一个结论:nova backup底层是调用nova snapshot来实现备份。(backup_type指定为daily/weekly之外的,会发生什么呢?)
备份类型指定为t123,照样能创建成功。
4、通过image-show查看test-backup具体信息,image类型是backup,image_location是快照。
5、再对虚拟机test1进行备份类型为daily的两次backup,因为备份保留份数为2,所以最老的备份将被删除,可以看到老的备份被删除了。
通过以上实验说明,nova backup近似快照,备份类型可以随便指定(不局限于daily/weekly),至于备份恢复也跟快照恢复一样,用这个备份去重新启动一台新的虚拟机。
nova backup代码分析
上面介绍了nova backup的功能,接下来我们从代码层面深入理解。
1、使用--debug参数,可以打印出api调用过程,有助于我们理解nova backup的调用逻辑;debug信息的前面几步一般都是获取token,检测资源是否存在,最后一步才是我们关注的。
2、上面红框中的createBackup, api入口在这里,对POST请求body的解析,还有校验api version,然后继续调用compute_api.backup
/usr/lib/python2.7/site-packages/nova/api/openstack/compute/create_backup.py。
3、进入self.compute_api.backup
/usr/lib/python2.7/site-packages/nova/compute/api.py。
4、进入self._create_image
/usr/lib/python2.7/site-packages/nova/compute/api.py。
5、进入self.image_api.create,最终创建了image数据库记录
/usr/lib/python2.7/site-packages/nova/image/api.py。
6、进入self.compute_rpcapi.backup_instance。
计算节点上的backup_instance,真正做快照备份是在这里。
/usr/lib/python2.7/site-packages/nova/compute/manager.py
7、self._rotate_backups备份保留处理逻辑,backup_type实际只是一个标识而已,指定为daily或weekly,并不是周期备份。
大致流程如下:
总结
1、nova backup实质是调用nova snapshot来实现备份。
2、nova backup backup_type只是个标识而已,不同的backup_tytpe对应不同的rotation。
3、nova backup rotation,如果超过rotation,会按照image create_at时间,删除较老的image。
参考文献
https://raymii.org/s/tutorials/OpenStack_Quick_and_automatic_instance_snapshot_backups.html
本文来自: TStack 公众号