Ceph 开发者月报 2019-06

ceph周报logo6月

 

本期看点:

1. librbd: 实现了在 ceph-immutable-object-cache 里缓存 parent image

librbd: shared read-only cache hook #27285 https://github.com/ceph/ceph/pull/27285

2. 支持为存储桶添加标签,帮助用户整理和分类存储桶资源

rgw: bucket tagging #27993 https://github.com/ceph/ceph/pull/27993

 

本篇为 2019 年度《Ceph 开发者月报》专栏的第六篇,在《Ceph 开发者月报》中,我们 UMCloud 存储团队将以月度为单位,为大家分享当月 Ceph 社区的有趣的提交和重要的变更,方便大家即刻掌握一手 Ceph 社区开发资料。

每篇将以对象存储、块存储、文件存储、统一存储层、集群管理、基础库等模块组织,为大家一一介绍。

 

对象存储

1. 支持为存储桶添加标签,帮助用户整理和分类存储桶资源

rgw: bucket tagging #27993 https://github.com/ceph/ceph/pull/27993

 

2. 支持 S3 对象锁定。可以用 write-once-read-many (WORM) 的模式存储对象,并通过锁定对象防止对象在一段时间内不被删除或者修改

rgw: add S3 object lock feature to support object worm #26538 https://github.com/ceph/ceph/pull/26538

object lock提供了以下两种方式来管理对象保留:retention periods 和 legal hold

  • retention period: 指定对象可以保持锁定状态的固定时间段。在该时间段内,对象将受 WORM 保护,不能被覆盖或删除。
  • legal hold: 提供的保护与保留周期相同,但没有到期日期。legal hold 将一直有效,直至用户明确将其删除。

legal hold 与 retention period 无关,对象可以同时使用 legal hold 与 retention period。

上面的 PR 实现了 6 个 API:

  • PUT/GET bucket object lock
  • PUT/GET object retention
  • PUT/GET object legal hold

 

3. 新增获取所有 realms 的 Restful API

rgw: add ‘GET /admin/realm?list’ api to list realms #28156 https://github.com/ceph/ceph/pull/28156

 

 

块存储

1. librbd: 实现了在 ceph-immutable-object-cache 里缓存 parent image

librbd: shared read-only cache hook #27285 https://github.com/ceph/ceph/pull/27285

在 2019/03 月的 Ceph 开发者月报 里提到过,Ceph 里实现了一个可以为 RBD 和 RGW 提供一个共享的只读的 cache daemon: ceph-immutable-object-cache,可以用于缓存集群的对象。

上面的 PR 实现了在 ceph-immutable-object-cache 为 librbd 缓存 parent image。

众所周知,块存储常用于虚拟桌面托管,在 VDI (虚拟桌面基础架构) 解决方案里,虚拟机从同一镜像里克隆出来,所有这些虚机区分只有主机名和 IP,从集群里重新读取的 parent image 其实很大部分是重合的。如果本地有 parent image 的缓存,不仅可以加快读取速度降低等待事件,还能减少主机到集群的网络流量。

 

2. rbd-nbd map/unmap 新增 netlink 的支持

rbd-nbd: add netlink map/unmap support #27902

https://github.com/ceph/ceph/pull/27902

netlink 是一种在内核与用户空间之间进行双向数据传输的通信方式。和 sysfs 、ioctl 等方式相比,netlink 有以下好处:

  • netlink 直接通过 BSD 套接字和内核进行通信获得设备,无需像 sysfs 文件系统要在设备空间里查找空闲 nbd 设备
  • 所有 nbd 设置可以用一条 netlink 命令完成,而 ioctl 则可能需要多次调用轮询获得内核消息
  • netlink 使用异步通信机制,但 ioctl 使用同步机制限制了数据量和性能

 

统一存储层

1. pg recovery 新增参数 osd_recovery_max_active_hdd 和 osd_recovery_max_active_ssd

osd: add hdd and ssd variants for osd_recovery_max_active #28677 https://github.com/ceph/ceph/pull/28677

为 OSD 在 HDD/SSD 上分别提供 pg recovery 的限流。osd_recovery_max_active_hdd 默认为 3,osd_recovery_max_active_ssd 默认为 10,而 osd_recovery_max_active 现在默认为 0。

 

2. 基于 seastar 重构 OSD 的工作推进

Integrate PeeringState into crimson, fix related bugs #28180 https://github.com/ceph/ceph/pull/28180

crimson/osd: add –mkkey support #28534 https://github.com/ceph/ceph/pull/28534

crimson/osd: add osd to crush when it boots #28689 https://github.com/ceph/ceph/pull/28689

Add structures for tracking in progress operations #28395 https://github.com/ceph/ceph/pull/28395

 

集群管理

1. 为 OSDs/CRUSH nodes 批量设置 flags

osd: revamp {noup,nodown,noin,noout} related commands #27735 https://github.com/ceph/ceph/pull/27735

  ceph osd set-group noup,noout osd.0 osd.1
  ceph osd unset-group noup,noout osd.0 osd.1
  ceph osd set-group noup,noout host-foo
  ceph osd unset-group noup,noout host-foo
  ceph osd set-group noup,noout class-hdd
  ceph osd unset-group noup,noout class-hdd

 

2. mgr/ansible 支持 TLS 双向认证

mgr/ansible: TLS Mutual Authentication #27512 https://github.com/ceph/ceph/pull/27512

ansible 编排模块使用 Ansible Runner Service 来执行 playbook。之前使用的是用户名和密码进行验证,上面的 PR 弃用先前的方法转而使用 TLS,需要通过配置 CA 证书和公钥来进行双向验证。

$ ceph mgr module enable ansible
$ ceph orchestrator set backend ansible
$ ceph config set mgr mgr/ansible/server_location 192.168.121.1:5001
$ ceph ansible set-ssl-certificate -i /usr/share/certs/client.crt
SSL certificate updated
$ ceph ansible set-ssl-certificate-key -i /usr/share/certs/client.key
SSL certificate key updated
$ ceph orchestrator status
Backend: ansible
Available: True

 

基础库

1. 新增 sha256/sha512 哈希算法用于计算 dedup 的数据指纹

common,osd: add hash algorithms for dedup fingerprint #28254 https://github.com/ceph/ceph/pull/28254

 

2. journal 支持 aligned append,提升写入性能

journal: add support for aligned appends #28351 https://github.com/ceph/ceph/pull/28351

未对齐的 append 操作将 journal  entries 附加到 journal 对象可能带来多次的写操作,通过 journal::append 可以基于当前 journal 大小自动重新对齐,提升写性能。

 

3. 优化 OSD map 的创建

mon, osd: parallel clean_pg_upmaps #28373 https://github.com/ceph/ceph/pull/28373

对于使用 upmap balancer 的集群,随着 pg maps 的增长,一些涉及到 OSD map 的创建的动作可能很耗时(如停掉 OSD,重平衡 OSD)。上面的 PR 实现了 clean_pg_upmaps,替换掉原先的 maybe_remove_pg_upmaps,通过并行将时延大约降低到原先的 1/8.

 

4. objecter 会缓存 PG mapping 信息,以节省 CPU 资源

osdc/Objecter: pg-mapping cache #28487 https://github.com/ceph/ceph/pull/28487

 

本月提交情况

发表评论

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