Ceph 开发者月报 2019-04

ceph周报logo4月

本期看点:

librbd 新增 write-around,并作为默认缓存策略

introduce new default write-around cache policy #27229 (https://github.com/ceph/ceph/pull/27229)

 

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

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

 

对象存储

pubsub 机制提供兼容 S3 的 API

S3 compatible pubsub API #27091(https://github.com/ceph/ceph/pull/27091)

 

块存储

1.librbd 新增 write-around,并作为默认缓存策略

introduce new default write-around cache policy #27229 (https://github.com/ceph/ceph/pull/27229)

之前为默认为 write-back。

绕写模式的好处是绕过缓存,直接写后端数据,缓存失效后再刷新一遍,保证最终落盘的数据是正确的。这个可以让 librbd 在 OSD 请求过程中可以立即完成写 IO。后续的 flush 请求则会确保所有在处理过程中的写IO 都会在请求结束前完成。

新增选项 rbd_cache_policy,可以设置为 writethrought、writeback、writearound 任一种模式

 

2. 删除 parent image 时可以选择将其移入回收站,这样在与之相关的最后一个 clone image 被删除时,该 parent image 会被自动删除

librbd: optionally move parent image to trash on remove #27521 (https://github.com/ceph/ceph/pull/27521)

相关命令:

rbd rm {parent-image} --rbd-move-parent-to-trash-on-remove=true

 

3. 从 EC data pool 创建的 RBD 镜像支持稀疏化

librbd: support EC data pool images sparsify #27268 (https://github.com/ceph/ceph/pull/27268)

 

统一存储层

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

crimson/net: lossy connection for ProtocolV2 #26710 (https://github.com/ceph/ceph/pull/26710)

crimson: enable cephx for v2 msgr #27514 (https://github.com/ceph/ceph/pull/27514)

 

2. 新增两个 bluestore 的健康警告:  BLUESTORE_LEGACY_STATFS 和 BLUESTORE_DISK_SIZE_MISMATCH

os/bluestore: introduce legacy statfs and dev size mismatch alerts #27519 (https://github.com/ceph/ceph/pull/27519)

  • BLUESTORE_LEGACY_STATFS

Nautilus 版本的 bluestore 会以存储池为粒度跟踪内部使用统计。如果有 OSD 使用在 Nautilus 版本前创建的 bluestore 卷,可能导致 ceph df 统计不准确。

可以停掉这些OSD,repair 后重启,即可更新:

systemctl stop ceph-osd@123
ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-123
systemctl start ceph-osd@123

bluestore_warn_on_legacy_statfs 选项可以开启或关闭提醒检测到旧版 bluestore 统计的告警。

  • BLUESTORE_DISK_SIZE_MISMATCH

块设备大小和 free list manager 检测的大小不匹配会出现该警告。有问题的 OSD 需要重新部署,否则以后可能会挂掉。

 

集群管理

为 Ceph 集群添加默认的 Prometheus Alert 告警规则

monitoring: Prometheus default alerts #27596 (https://github.com/ceph/ceph/pull/27596)

 

基础工具集

1. 为 CRUSH node 设置 no{out,down,in,out} flags

mon,osd: add no{out,down,in,out} flags on CRUSH nodes #27563 (https://github.com/ceph/ceph/pull/27563)

之前只能为 OSD 设置 noout, nodown, noin, noout flag, 现在可以为 CRUSH node 设置了

rack-1

假如 host-foo flag 为 noout, nodown, rack-1 flag 为 noout, noin,则在 host-foo 上的 osd 会有 noout, nodown, noin 三个 flag

相关命令:

ceph osd add-noout host-foo
ceph osd rm-noout host-foo

 

2. 为 mon/mds 新增 ok-to-stop 等命令

mon: add mon, osd, mds ok-to-stop and related commands #27146 (https://github.com/ceph/ceph/pull/27146)

新增以下命令:

# 检查是否可以在不减少该 mon 即时可用性的情况下停掉该 mon
mon ok-to-stop {mon-id}
# 检查是否可以在不破坏 quorum 关系的情况下加入 mon
mon ok-to-add-offline {mon-id}
# 检查是否可以在不破坏 quorum 关系的情况下删除 mon
mon ok-to-rm {mon-id}
# 检查是否可以在不减少该 mon 即时可用性的情况下停掉该 osd
mds ok-to-stop {mds-id}

 

3. Ceph dedup 新增 Rabin-Karp Chunking 算法

src/common: add rabin chunking for dedup #26730 (https://github.com/ceph/ceph/pull/26730)

dedup 利用重复数据删除技术可以查找大块的重复数据,只存储一份数据,节省存储空间。

上面的 PR 为 Ceph dedup 工具新增 Rabin-Karp Chunking 算法,之前实现的是定长分块数据去重。

定长分块技术将数据流按固定的长度分块,但某处数据变化导致后面所有分块变化,因此去重效果还是比较差。

变长分块技术,不是简单地根据偏移来划分 chunk,而是根据特殊标记来对数据分片,弥补了定长分块技术的缺点。

特殊标记的确定一般使用基于内容的分片算法,使用滑动窗口技术。利用 rolling hash 计算滑动窗口的指纹, 如果计算的指纹满足预先设定的条件,就将该窗口作为切分点。

这里 Rabin-Karp Chunking 算法使用 Rabin Fingerprint 算法作为 rolling hash。

 

4. 添加 ceph osd stop 命令用于停掉 OSD

osd: add ‘ceph osd stop’ command #27595 (https://github.com/ceph/ceph/pull/27595)

 

基础库

1. Aio 和 AioThrottle 的重构工作

♪ Ai-o Ai-o Ai-o Ai-o… queue like an Egyptian ♪ #26461 (https://github.com/ceph/ceph/pull/26461)

 

2. 创建 pg 时跟踪 pg history 和 past_intervals

mon,osd: track history and past_intervals for creating pgs #27696 (https://github.com/ceph/ceph/pull/27696)

 

 

本月提交情况

 

 

发表评论

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