Ceph and OpenStack - Best Practices Part I

Ceph and OpenStack 现在已经是 IaaS 中成双成对的一个组合。根据 2017 年 6-12 月的 OpenStack User Survey,在所有 OpenStack Deployment 中,有 57% 的部署使用的 Cinder backend 为 Ceph RBD。当然在使用 Ceph 作为 OpenStack Glance, Cinder 的 backend 会有一些能够在设定上调整的最佳实践。本篇文章将会介绍这些如何调整以及为什麽要进行这些设定。

在 Glance 中使用 show_image_direct_url

使用 Ceph RBD 时,预设会开启 RBD Layering 这个功能,可以把它想像成一个可以读写 snapshot。这会建立一个原本 image 的 clone,而 Ceph 就只会建立跟原本 image 不同部分的 RADOS Objects。这代表了两件事:

  1. 省空间 — 因为只会建立相对原本 image 有更改过的 RADOS Objects,当有多个 instance 的 volume 是基於这个 image 时,就能节省很多空间
  2. 在没有被更改的部分,也就是原本的 image,会从最一开始的 volume 被读取。这代表不管是从哪一个 clone,在读取时都是读取到同样的 RADOS Objects,也就是同样的 OSD。因刺这些 Objects 有很大的机会会是从 OSD 的 page cache 中读取,也就是说从 RAM 读取。RAM 比现今所有持久性储存装置都还快,也就是从 clone 提供资料会比从一个完整的副本 Volume 来得快。

Cinder 跟 Nova 预设都会利用 RBD Layering 的功能,但是会需要在 Glance 中的 glance-api.conf 设定 show_image_direct_url=true 并且使用 Glance v2 API。

更新

由於安全性问题,目前 Ceph community 建议把 show_image_direct_url 设为 false

在 Compute Node 上使用 RBD Cache

librbd,也就是 qemu/kvm 跟 RBD 储存装置沟通的 driver,可以利用主机的 RAM 作为 RBD 的 disk cache 使用

使用这种 cache 是安全的,virtio-blk 跟 Qemu RBD storage driver 会确保资料被正确的 flush。当 VM 中的应用程序告知说「我要这个档案在 disk 上」时,Qemu 跟 Ceph 会在完成下列事项中才回报资料已经被写入:

  • 写入至主要的 OSD
  • 复制到其他的 OSD
  • 被告知已经被放置 OSD 的 persistant journal

Ceph 本身也有内建的防呆机制,就算 cache 被设成 write-back mode,Ceph 在收到 user 的第一个 flush request 之前都会以 write-through mode 运作。这个机制相对应的设定是 rbd cache writethrough until flush,预设是设为 true,永远永远不要尝试关闭它。

要启用 Ceph 的 cache 必须在 nova-compute 的 nova.conf 中设定

[libvirt]
...
images_type = rbd
disk_cachemodes="network=writeback"

让 Cinder, Glance, Nova 使用不同的 Pool

让三个不同的 service 使用不同的 Ceph pool 有几个原因:

  • 使用不同的 pool 代表可以对这些 pool 做不同的权限设定。这代表在如果很不幸的,你的 nova-compute 节点被入侵而入侵者可以破坏或删除你的 nova disk。虽然听起来很糟,但是如果他同时也能破坏你的 Glance image 的话,情况就会变得更糟了。
  • 使用不同的 pool 也代表可以对这些 pool 做不同的设定,例如 size 或是 pg_num 等设定。
  • 最重要的是,可以对 pool 套用不同的 crush_ruleset,例如可以让 Cinder 使用高速的 SSD,Nova 使用 HDD,Glance 使用 Erasure Coded Pool。

有些能可能担心在分开 pool 後 RBD layering 会无法作用,但是不用担心,这些 clone 是可以跨 pool 做使用的。

所以在 OpenStack 部署中看到 3 个不同的 Ceph Pool 是一件非常常见是事情,一个给 Cinder,一个给 Glance,一个给 Nova。

使用 All-Flash OSD Pool

使用 SSD WAL 跟 DB 不会增加读取速度。要利用 SSD 快速的读取速度,就把它们独立成 OSD 并且利用 crush_ruleset 设定 All-flash OSD Pool。在 Luminous 版本之後,Ceph 会自动侦测 device class,所以要创建 All-flash 的 crush rule 非常容易。

例如要创建一个 All-flash pool (faliure domain: host) 叫做 flash,用 command ceph osd crush rule create-replicated <rule-name> <root> <failure-domain-type> <device-class>

ceph osd crush rule create-replicated fast default host ssd

安装 OpenStack and Ceph

要安装 OpenStack 跟 Ceph 的教学可以参考之前写过的文章:

续读 Part II

Reference

The Dos and Don'ts for Ceph for OpenStack


<<:  语法糖小测验: Scope functions & Extension function

>>:  【领域展开 12 式】 安装 Soledad 主题插件,成功汇入漂亮模板到网站罗

[教学] 如何架设狗狗币全节点 (更新 1.14.4 系统)

此时新版本为 1.14.5, 所以在2021/11/9时 有更新文章部分内容。 为什麽要架设狗狗币全...

Python & SQLALchemy 学习笔记_查询

由於查询部分的篇幅相较於前几者较多,因此将查询的部分独立出来写 另外这边写的只有一些基础的操作,像是...

【Day23】隐写技术 ─ 工具实作篇(二)

哈罗~ 今天要再来介绍另一个隐写工具... 我真的常常都不知道开头要打什麽ಥ︿ಥ 那就..直接开始吧...

蚂蚁集团始终走在某国传统借贷业者前

资料来源: 暗批中国金融 马云一夕失宠财富腰斩 「蚂蚁」快被踩死 估值蒸发近2兆 高管忙找工作 地...

[Day 22] 计算属性computed趴搭搭

嗨各位!!!又是我,那个小可爱又来了,今天要来讲的是—计算属性,如果你的模板需要加入很多逻辑运算,可...