Ceph 开发者月报 2019-07

微信截图_20190819115716

本期看点

Sage 在今年巴塞罗那峰会上谈 Octopus 开发的五个重点中的第一点就是改进易用性,7月份合并的两个 mgr 模块进行易用性的改进:

1、progress module 可以显示耗时较长的任务的完成进度,比如大家最关心的 recovery 的进度;

2、rbd_support module 支持后天管理耗时较长的块存储操作,比如卷的删除,迁移等等。

本篇为 2019 年度《Ceph 开发者月报》专栏的第七篇。

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

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

块存储

rbd-nbd: 支持 netlink 接口的 resize

rbd-nbd: add nl resize #29036
ceph/ceph#29036(github.com/ceph/ceph/pu

统一存储层

1、新增 tier-flush,将 chucked object 刷到 chunk pool

src/osd: add tier-flush op #28778

ceph/ceph#28778(github.com/ceph/ceph/pu

Ceph 数据去重复用了 cache tier 架构,将 cache/data pool 作为 base/chunk pool,称为 extensible tier。base pool 存放去重相关元数据(chunk map)以及缓存的 chunks,chunk pool 包含已去重的 chunks 和引用计数。

base pool 处理写请求时,数据会划分为 chunks 作为 metadata object 存入,在相应的 chunk map 里标记 dirty,说明需要对该 chunk 进行去重处理。如果 base pool 所有 chunks 都是 dirty,达到驱逐上限,就会阻塞写请求,将 dirty object flush 到 chunk pool,变成 chunk object 并更新 chunk map 和引用计数,完成去重。

微信图片_20190819112959

上面的提交实现了手动对分块的数据对象进行 flush:

rados -p base_pool tier-flush <obj-name>

2、支持 recovery 过程中进行显式地进行 osd repair

osd:support osd_repair_during_recovery #28839

ceph/ceph#28839(github.com/ceph/ceph/pu

通过设置 osd_repair_during_recovery=true 允许显示地进行 osd repair。

集群管理

1.mgr/ansible 支持配置和管理 multisite RGW

mgr/ansible: RGW service #28468
ceph/ceph#28468(github.com/ceph/ceph/pu

当前 Ceph orchestrators 只支持 RGW 的管理,如 zone groups/zones 的增删改查。

上面的提交实现了:

  • 配置 hosts 运行 RGW
  • 删除一个 zone 下面的 RGW
  • 支持使用配置文件来配置multisite/multizone

使用示例:

# cat rgw_config.json
{
    "hosts":[
        "mds0",
        "mds1",
        "rgw0"
    ],
    "rgw_multisite":true,
    "rgw_zone":"earth",
    "rgw_zonemaster":true,
    "rgw_zonesecondary":false,
    "rgw_multisite_proto":"http",
    "rgw_frontend_port":8080,
    "rgw_zonegroup":"solarsystem",
    "rgw_zone_user":"zone.user",
    "rgw_realm":"milkyway",
    "system_access_key":"KpXPz2MpVKTzp1QnKzD9",
    "system_secret_key":"bDt42Di6vtuh2HFwzwK7P2rtBxWkFLWWVhuiH3fD"
}

# ceph orchestrator rgw add -i rgw_config.json
# ceph orchestrator rgw rm earth

2、mgr/volumes 新增 subvolume 删除队列,支持 subvolume 异步删除

mgr/volumes: background purge queue for subvolumes #28003
ceph/ceph#28003(github.com/ceph/ceph/pu

3、mgr/rbd_support 支持管理耗时较长的 RBD 操作

mgr/rbd_support: support scheduling long-running background operations #29054
ceph/ceph#29054(github.com/ceph/ceph/pu

一些 RBD 操作可能需要等待很长时间,通过 mgr/rbd_support module 可以后台异步进行。通过 ceph rbd task 命令来管理:

ceph rbd task add flatten <image-spec>
ceph rbd task add remove <image-spec>
ceph rbd task add trash remove <image-id-spec>
ceph rbd task add migration execute <image-spec>
ceph rbd task add migration commit <image-spec>
ceph rbd task add migration abort <image-spec>
ceph rbd task cancel <task-id>
ceph rbd task list

4、新增 ceph osd info 命令获取特定 OSD 或所有 OSD 信息

mon: add ceph osd info to obtain info on osds rather than parsing osd dump #26724
ceph/ceph#26724(github.com/ceph/ceph/pu

无需再解析 ceph osd dump 的返回结果,使用命令即可:

# 等同于 ceph osd dump --format=json | jq -cM '.osds

ceph osd info --format=json
# 等同于 ceph osd dump --format=json | jq -cM '.osds[] | select(.osd == 0)'
ceph osd info 0 --format=json

5、支持在 dashboard 里驱逐 CephFS client

mgr/dashboard: Evict a CephFS client #28898

ceph/ceph#28898(github.com/ceph/ceph/pu

通过驱逐客户端,强制终止其对 CephFS 的访问,阻止它与 MDS/OSD daemon 进一步通信。如果客户端正在对文件系统进行带缓冲的 IO,则任何未 flush 的数据都将丢失。

适用于各种类型的客户端,包括 FUSE 挂载,内核挂载,nfs-ganesha 网关以及使用libcephfs的任何进程。

6、dashboard 支持设置存储池 quota

mgr/dashboard: Allow viewing and setting pool quotas #27945
ceph/ceph#27945(github.com/ceph/ceph/pu

7、mgr/telemetry 拆分不同的消息类型,可以启用或禁用某类消息的发送

mgr/telemetry: channels #28847

ceph/ceph#28847(github.com/ceph/ceph/pu

telemetry 以匿名的方式将本地 Ceph 集群的一些统计信息发送给 Ceph 官方,以便于社区更好的了解用户使用 Ceph 的行为方式。上面的提交将其拆分为不同的 channels,让根据用户选择发送哪些统计信息:

  • basic: 集群基础信息,例如容量、版本、规模、存储池数量等信息。
  • crash: Ceph daemon crash 信息。
  • ident: 用户的身份信息,集群描述、联系邮箱。
  • device: SMART 信息,当前未实现

可以通过配置来开关某类信息的发出:

ceph config set mgr mgr/telemetry/channel_basic false
ceph config set mgr mgr/telemetry/channel_crash false

ceph config set mgr mgr/telemetry/channel_ident true
ceph config set mgr mgr/telemetry/contact 'John Doe <john.doe@example.com>'
ceph config set mgr mgr/telemetry/description 'My first Ceph cluster'

ceph telemetry show

8、mgr/crash 支持展示最近的 crash 信息

mgr/crash: raise warning about recent crashes and other improvements #29034
ceph/ceph#29034(github.com/ceph/ceph/pu

支持展示最近某段时间的 Ceph daemon crash 报告,时间范围可以通过 mgr/crash/warn_recent_interval 进行设置,默认为两周。可以设置 mgr/crash/retain_interval 保留 crash 信息的时间长短,默认为 1 年。

# 列出最近 warn_recent_interval 时间内的 crash 报告

ceph crash ls-new

# 归档特定 crash 报告,crash ls-new 不会再显示,但可以通过 crash ls 看到

ceph crash archive <crashid>

# 归档所有 warn_recent_interval 时间内的 crash 报告

ceph crash archive-all

9、dashboard 集成 mgr/progress module,可以显示耗时较长的任务的完成进度

mgr/dashboard: integrate progress mgr module events into dashboard tasks list #29048
ceph/ceph#29048(github.com/ceph/ceph/pu

本月提交情况

微信图片_20190819115456

发表评论

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