基于Ceph RBD的OpenStack Nova快照

本文由 Ceph中国社区-blueclub翻译,半天河 校稿。

英文出处:Sébastien Han 欢迎加入 翻译组

这篇“底层实现”文章解释了直接在Ceph上完成快速,高效的Nova实例快照的机制。

I. Rationale基本原理

在这里我先假定OpenStack Glance和OpenStack Nova都配置了Ceph。因此Glance在Ceph的RBD块上存储image,而Nova也从Ceph上引导root分区(在nava.conf`配置libvirt_image_type=rbd)。

目前在创建Nova实例的快照时,系统会通过几个步骤来上传image到Glance上。首先,虚拟机将变成暂停状态;接下来调用qemu-img将root分区拷贝到本地文件系统中。一旦完成拷贝,Nova就会恢复虚拟机状态。创建成功的快照在成功上传到Glance之前,通常会保存在$instances_path/snapshots目录下。

因此,image将从计算节点流式传输到Glance API端,然后上传到Ceph。

鉴于处处都在使用Ceph,这个传输过程非常漫长,非常低效。这也给运营OpenStack公众云带来了几个真的很棘手的问题。从根本上说,即使虚拟机实例运行在Ceph上,我们仍然需要在hypervisor上保留一些本地存储空间用于创建快照,并在上传到Glance之前保存快照。这些保留的存储空间并非一直会被使用,并且我们也无法预测它们的使用频率和时长,这对我们来说有点浪费。

开始隆重介绍Nova RBD快照。想法很简单,我们已经在Nova中使用了Ceph,并且RBD image也有快照的能力,为什么不用这个功能代替现有的怪异流程?

这正好是这个specpatch所做的。下一章我们将深入了解它的实现细节。

II. 底层实现

话说“一图抵千言”

希望图中的流程已经清楚得让你理解了所有的细节:)。实现工作包含克隆image和扁平化RBD image。提醒一下,如果你在Glance中的image是RAW格式,这在后面会克隆一份虚拟机实例的root分区为RBD image,这份克隆的父亲就是Glance image。

在你不使用RAW格式image或者不需要直接通过URL导出image的情况下,你将得到一个扁平化的RBD image。因此不管怎样,快照可以完美运行。

另一点需要注意的,如果RBD快照由于某些原因创建失败,则回退到默认的方式(第一章所解释的)。 所以为了预防万一,你可以分配一个小的分区(取决于你的环境的tmpfs的大小,因为很可能是它来做这个工作)。为此,你可以显式设置一个目录来保存Nova快照。

[libvirt]
snapshots_directory = /fail/safe/path

完毕!

我在文章中没有提到的是这个新的实现很可能登陆Mitaka,希望你跟我一样因为这个即将来临的特性而激动不已!

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注