nova backup 剖析

作者:姚夏冰

环境

系统: 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 公众号

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王二麻子IT技术交流园地

十二、VueJs 填坑日记之项目打包发布

通过上一篇博文的学习,我们其实已经完成了我们设想的项目的开发。但是,我们做好的这套东西,是基于 nodejs 开发的。而我们最终希望,我们开发的项目,生成好一堆...

2115
来自专栏小狼的世界

利用Apache ab以及GNUPlot来进行Web测试

最近写了几个测试脚本,希望要观察使用PUT方式上传文件和使用POST方式上传文件,两者效率的差别。

1022
来自专栏cloudskyme

vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化)

环境准备 软件:vmware workstation 9.0      ubuntu-12.04.2-server-amd64(官方下载) 硬件:确认CPU支持...

3305
来自专栏韩伟的专栏

集群开源软件赏:ZooKeeper

本篇是开源软件最后一篇,接下来的一周将推送语言相关或项目管理相关内容。敬请期待。以下正文: 所谓集群系统,是指由多个进程和服务器合作组成完成一定功能的系统。之所...

4257
来自专栏idba

supervisor 工具介绍

supervisor 是一款基于Python的进程管理工具,可以很方便的管理服务器上部署的应用程序。supervisor的功能如下:

891
来自专栏GreenLeaves

Oracle 事务操作

在看本文之前,请确保你已经了解了Oracle事务和锁的概念即其作用,不过不了解,请参考数据库事务的一致性和原子性浅析和Oracle TM锁和TX锁 1、提交事务...

2596
来自专栏WindCoder

CentOS安装LNMPA

网上这类教程太多了,此处仅作为一个常用命令的记录,详细教程会在参考资料中给出地址,有兴趣的可以去看一下。

1631
来自专栏草根专栏

Git -- 分支与合并 (命令行+可视化工具p4merge)

把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面.

6408
来自专栏开源优测

性能测试必备监控技能linux篇14

前言 如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢? 对于日常性能测试来讲,在linux下或是类Uni...

3786
来自专栏Ken的杂谈

单点登录(SSO)的设计与实现

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。https://baike....

4273

扫码关注云+社区

领取腾讯云代金券