来自峰会的总结:Ceph/OpenStack 集成
峰会令人兴奋,充满了美好的事物和公告。我们有很棒的 Cinder 会议和一次惊人的 Ceph/OpenStack 集成会议。我和 Josh Durgin (Inktank) 共同主持了 Ceph/OpenStack 集成会议。观众参与度很高。我特别感谢 Sage Weil、Haomai Wang 和 Edward Hope-Morley 的宝贵意见。本次会议的主要目的是收集改进 Ceph 与 Openstack 集成的想法。最终,我们制定了 Icehouse 的路线图草案。
对于那些没有参加会议但想了解未来几个月会发生什么的人,这篇文章就是为您准备的!
I. Havana 的最佳补充
让我们从当前集成状态的图景开始
在深入研究具体内容之前,我想通过简要概述 Havana 的最佳补充来突出当前集成的状态。
Cinder 驱动程序的完全重构:我们现在同时使用 librados 和 librbd。 以前,驱动程序“仅”由 Python 代码调用的 shell 命令组成。 这不是很优雅,也没有提供良好的错误处理。 这将使未来的开发更容易,因为我们依赖于这些库。
从快照创建的扁平化卷:立即扁平化从快照创建的卷(克隆),以消除克隆与快照之间的任何依赖关系。这是一个操作员的决定。 这由 rbd_flatten_volume_from_snapshot 标志控制。请记住,扁平化克隆会增加集群中使用的空间。
克隆深度:快照、克隆、父镜像和子镜像之间的链式关系过多可能会导致一些性能问题,并且可能在某个时候导致问题。一个新的 Cinder 选项允许我们控制克隆深度的行为。 在达到一定数量的克隆之后(由 rbd_max_clone_depth 标志中的值指定,默认值为 5),卷将被扁平化。
Cinder 使用 Ceph 后端进行备份:在 Havana 之前,cinder 备份仅支持 Swift 作为备份后端。 Havana 带来了 Ceph 的支持作为后端。基本上,驱动程序允许我们在同一个 Ceph 存储池内备份(不推荐,因为它位于同一存储区域),在不同的 Ceph 存储池之间备份(很好,因为这将是不同的区域),或在不同的集群之间备份(用于灾难恢复目的,从数据中心 1 备份到数据中心 2)。此后端的真正好处是它带来了一个在 Cinder 会议期间讨论的功能:对增量备份 API 的支持。是的,如果您从一个 Ceph 集群备份到另一个 Ceph 集群,您将获得 RBD 镜像之间的差异备份。这非常划算。备份驱动程序还支持 RBD 条带。
Nova libvirt_image_type:默认情况下,当您启动虚拟机时,其磁盘会作为超visor 文件系统上的文件出现(通常在 /var/lib/nova/instances/ 下)。在 Havana 之前,libvirt_image_type 标志只有两个后端:file 和 LVM。现在,可以指定 RBD,这意味着您启动的每个新虚拟机都将位于 Ceph 内部。这非常酷,因为它允许我们轻松地使用实时迁移过程执行维护操作。另一方面,如果您的超visor 崩溃,触发 nova evacuate 并几乎无缝地在其他地方运行虚拟机也非常方便。
Cinder 卷 QoS:这与 Ceph 没有直接关系,但由于 Ceph 目前不支持任何形式的 QoS,您可以在超visor 级别执行此操作。这非常好,因为您可以根据客户端(虚拟机)分配一定数量的 IOPS 或带宽。这对于限制整个平台的使用同时提供良好的服务水平非常有用。
II. Icehouse 的路线图
好的,现在让我们认真对待,我们有很多事情要做,我真的希望通过这篇文章,我们可以获得一些新的贡献者 :-)。
我将按组件展示路线图
II.1. 错误修复 ¶
不幸的是,我们从 Havana 周期开始时出现了一些错误。我们目前已经确定了 4 个错误,这些错误正在修复过程中。最紧迫的问题需要解决的是 libvirt_image_type 启动序列。使用 libvirt_image_type=rbd 启动虚拟机时的当前工作流程如下
- Glance 从 Ceph 将镜像流式传输到计算节点
- 然后,计算节点将镜像导入到 Ceph
- 最终,计算节点启动虚拟机
这效率低下,并且需要很长时间才能启动虚拟机。由于 Glance 和 Nova 的后端都是 Ceph,解决方案是在我们启动虚拟机时创建镜像的写时复制克隆。该操作直接在 Ceph 级别执行,透明且启动速度非常快。我们已经在 Cinder 中创建来自镜像的卷时执行此操作。修复方案 正在进行中。
对于剩余的错误以及那些渴望使用 libvirt_image_type 的人,Josh Durgin 创建了一个 包含所有修复的分支。
最后一个问题是在从镜像创建卷时,源镜像不会转换为 RAW 格式。为了执行从卷启动,镜像格式必须是 RAW 格式,因为 QCOW 不受支持。您可以查看 错误报告 以跟踪进度。
II.2. Nova ¶
工作领域
- 为 RBD 实现“bricks”:brick 是一项旨在将所有 OpenStack 组件中的所有存储相关部分移动到 Cinder 的举措。然后,Cinder 托管所有存储类,所有 OpenStack 组件都可以使用它们。
- 重新实现快照功能以使用 RBD 快照:当前,当您执行快照时,Nova 使用 QEMU 快照,这意味着您始终会获得基于完整块的快照。使用 Ceph 作为所有实例磁盘的后端,这效率低下,因为备份文件将位于超visor 上,然后流式传输到 Glance 并最终上传到 Ceph。从性能的角度来看,直接使用 Ceph RBD 快照会更容易,速度更快。
- RBD 在 Nova 裸机上:由于 RBD 提供了一个用于映射虚拟块设备的内核模块,因此很容易在 nova 裸机中实现此功能。提醒一下,nova 裸机允许您启动实际上是物理裸机主机的虚拟机。有了这个,我们可以轻松地创建一个 RBD 镜像,启用内核模块并将其映射到主机。
- 附加设备时的缓存方法:在某个时候,并且取决于使用块设备的应用,您希望能够指定无缓存、写通、写回缓存选项。这在 OpenStack 中是可能的,但是这将影响所有附加的卷,无法为特定卷指定该选项。最终,用户将能够决定哪种缓存方法最适合其设备。
- 来宾协助快照:这在卷使用中提供文件系统一致的快照。如果使用自定义 qemu 来宾代理,这可能在应用级别也是一致的。许多人都在要求一致的快照,这可能是一个初步的答案。
- Nova 启动到 Ceph 的实例的调整大小:在使用 RBD 的 libvirt_image_type 时,我们需要添加在调用 nova resize 时调整实例根磁盘大小的功能。
II.3. Cinder ¶
工作领域
- 卷迁移支持:支持从一个租户到另一个租户以及从一个后端到另一个后端的卷迁移。
- RBD 条带支持:支持云管理员和云用户使用的 RBD 条带。基本上,云操作员可以设置一个默认值,该值可以被云用户覆盖。有关 RBD 条带的更多信息,请访问 Ceph 文档。
- 其他超visor 的 iSCSI RBD:Emperor 之后,iSCSI/tgt 实现变得更加稳定,所有支持都已上游。 ceph.com 提供最新的软件包,而 Ubuntu 14.04 应该很快就会获得这些软件包。Red Hat 还没有准备好,但是没有限制。诸如 VMware 之类的超visor 需要 iSCSI 设备作为其虚拟机磁盘。有了这个,我们可以轻松地使用 VMware 启动虚拟机,甚至附加块设备。
- 其他协议上的增量备份:当前实现使用 ceph-common 包。'rbd' CLI 被封装到 Python 代码中。根据基础设施,安全策略可能需要更安全的事务。例如,使用 SSH 可能是个不错的选择。
II.4. Glance ¶
工作领域
- 将快照和镜像存储到不同的位置:主要目标是将镜像和快照存储到不同的存储池中,因为它们不需要相同的可用性级别。虽然镜像只是扁平化的操作系统(好吧,这并不完全正确,因为您可以拍摄快照然后将其作为镜像导入),但快照可能托管客户数据。像 Windows RAW 镜像这样的某些镜像很容易占用 40GB,为镜像和快照强制使用 3 个副本副本是不划算的。通常,作为云工程师,您希望为镜像使用 2 个副本,为快照使用 3 个副本。
III. 展望未来,“J”路线图
OpenStack 中的新参与者(项目)。
- Manila 支持:Manila 是一个分布式文件系统即服务项目。我们可以实现 CephFS 支持,我已经注册了 launchpad 上的蓝图。
- Swift 多后端:Swift 最近带来了对几个新的对象存储后端(Kinetic)和新的复制算法(ssync)的支持。我们的目标是在这里实现一个 RADOS 驱动程序,该驱动程序可以被 Swift 使用。理想情况下,我们希望 Swift 与 RADOS 通信。客户端不会受到干扰,因为 API 不会更改,操作员将很高兴拥有一个统一的存储平台。有了这个,循环将完成,Ceph 将支持每个 OpenStack 组件。
最后,这就是集成在未来可能的样子
对于 Icehouse 来说,我们还有很多工作要做,这很明显。再次欢迎各位贡献者。所以如果你想将未来存储集成到 OpenStack 中,请不要犹豫,与我联系,以便我们讨论和协调我们的努力。在 eNovance,我们已经开始为 RADOS 开发 Swift 多后端驱动程序,因为我们相信这是 Ceph 集成到 OpenStack 的一个重要步骤。另外,请不要忘记 Ceph 开发峰会即将来临,我非常乐意让大家讨论这个主题。这将通过 IRC 和 Google Hangouts 进行的在线活动。您可以随时查看 官方公告,并且不要忘记 注册蓝图。我期待与大家交流!
除此之外,以下是上次 OpenStack 峰会期间的我的演讲:Ceph:OpenStack 事实上的存储后端
以及幻灯片

