OpenStack & Ceph Kilo 版解析
自从 OpenStack H 版开始,为 Nova 写了第一个 Ceph RBD 驱动至今已有两年,在上个月结束的 OpenStack Summit 上 Sébastien Han 和 Josh Durgin 这两个老搭档又总结了一次 J 版 OpenStack 与 Ceph 的进展,Sébastien Han 是个活跃的 Ceph 生态系统开发者,提供了诸如 Ceph-Docker , Ceph-Ansible 这些项目,同时本身也是 OpenStack 运维开发。而 Josh Durgin 是 Ceph 负责 RBD 的 CTL,也是 Cinder/Ceph RBD 的开发者。本文也会主要依据他们的 Topic 并且结合本人对 OpenStack & Ceph 的理解阐述。
Kilo 进展
其实 OpenStack 跟 Ceph 的大部分现在做了的和至今没完成的工作都在 13 年的 blog 中提到了,如 OpenStack H版与 Ceph 整合的现状 ,14 年又老生常谈的话题 OpenStack I 版与 Ceph 的现状 。那么我们这次 Kilo Release 到底哪些事:
- 用 RBD Snapshot 取代 QEMU Snapshot 成为 Nova Root Image 快照的实现方式
- Devstack 现在支持 Ceph Backend了,也就是现在装 Ceph & OpenStack 在单机上非常容易了
- OpenStack & Ceph CI 完成,也就是 OpenStack 上所有 Ceph 相关代码开始有整合测试了
- Ceilometer 现在能支持对 RadosGW 的监控数据收集了
- Ceilometer integration for RG
总而言之,看上去实际上就推动了 RBD Snapshot 和 Ceilometer 对 RadosGW 的支持,至于之前文章提到的:
- Volume Migration 的 RBD 支持
- 支持对于 RBD 已存在 Volume/Snapshot 的导入导出
- Multi-attach for RBD
- Ceph Backup 增强等等
仍然会成为 Liberty 的 Blueprint 的一部分。
另外还有一些 RBD 能够收益的来自 OpenStack 通用的进展,比如 fsfreeze 特性。使得在打 Snapshot 时通过 QemuGuestAgent 发出 fsfreeze 指令冻结 VM 的操作,获得一个一致安全的快照。这对于云平台来说帮助很大,解决热快照的实用性问题。
从 OpenStack 看 Ceph 进展
虽然这个站点也会写一些 Ceph 开发和特性的进展和解析,但是大多数 OpenStack 用户并不关心 Ceph 本身,或者不太了解 Ceph 这些进展哪些能被 OpenStacker 用起来,下面就讨论一下在 OpenStack Kilo 期间 Ceph 特别是 Hammer 版本对于 OpenStack 用户会有哪些增益。
首先是三个性能相关的特性:
- Readahead: Hammer 支持 RBD 卷级预读,通过配置 RBD 选项可以控制预读效果。对于在 Boot 阶段的 VM 会有更好的性能收益
- Copy-on-Read: 默认 RBD 支持 Copy-on-Write 的方式去实现 Clone,Ubuntu kylin 实现了 Copy-on-Read 的方式去使得 Clone 卷能够在读时就去完成 copy 操作
- ObjectMap: 这是一个我们在 H 版 CDS 提的 librbd: shared flag, object map ,在完成 Draft 以后由 Jason 完善。它主要使得一个卷可以被设为单客户端模式,使得 Librbd 能进行相应特化使得性能提高,比如如果使用 ObjectMap 的卷,在克隆发生后几乎不会有任何性能损耗。在相对于之前没有 ObjectMap 特性,每次克隆如果不做 Copy-on-Write,每次读操作会随着克隆链增加性能几何级下降
另外是几个有利于云提供商的特性:
- Per-image option: 这个是本人在 Ceph I 版实现的特性 Add Metadata Mechanism To LibRBD ,这个特性使得区别于之前使用 ceph.conf 控制 RBD 卷选项的方式,你能够通过 rbd metadata 的方式去设置每个卷的选项,如 cache 大小,预读大小等等。非常类似于 OpenStack Glance/Cinder 对于 Metadata 的设置和使用
- Fast Diff: 通过 ObjectMap 可以完成粗粒度(对象级)的实际空间占用,也使得云提供商了解每个卷真实数据占用量变得可能
OpenStack 配置最佳实践
Ceph.conf :
[client] rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 20 admin socket = /var/run/ceph/$cluster-$type.$id.$pid.$cctid.asok log file = {{ rbd_client_log_file }}
GLANCE
Disable local cache: s/flavor = keystone+cachemanagement/flavor = keystone/ Expose images URL: show_image_direct_url = T w_scsi_model=virtio-scsi # for discard and perf hw_disk_bus=scsi
Nova:
hw_disk_discard = unmap # enable discard support (be careful of perf) inject_password = false # disable password injection inject_key = false # disable key injection inject_partition = -2 # disable partition injection disk_cachemodes = "network=writeback" # make QEMU aware so caching works live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"
Cinder:
glance_api_version = 2