Ceph 开发者月报 2019-09

本期看点:

RGW 新增存储桶事件通知机制

rgw/pubsub: add S3 compliant API to master zone #28971

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

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

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

 

对象存储

RGW 新增存储桶事件通知机制

rgw/pubsub: add S3 compliant API to master zone #28971

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

上面的 PR 实现了存储桶事件通知机制。当存储桶上发生某些事件时(例如对象的创建和删除),可以将消息发送到 radosgw 外的 endpoint 通知用户。当前只支持推送通知到 HTTP 和 AMQP0.9.1 endpoint。

在 PubSub sync module 里,事件需要作为 RGW 对象被存储在存储桶里。而存储桶事件通知机制里,事件只需要被推送到 endpoint,无需存储在 Ceph 里。

在 S3 规范之外,Ceph 做了一些扩展。当存储桶存在多个通知时,要获取特定通知的信息时 S3 里只能提取存储桶上的所有通知。Ceph 里实现除了根据对象键的前缀/后缀进行过滤之外,还支持基于正则表达式匹配进行过滤和根据附加到对象的元数据属性进行过滤来筛选事件。并且,同一事件可以作为不同的通知发送。

 

块存储

1. 简化 rbd-mirror 配置 peer

rbd-mirror: simplify peer bootstrapping #30411

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

当前配置 rbd-mirror 简化为如下步骤,集群 site-a 生成一个 token:

# rbd mirror pool enable <image-pool>
# rbd mirror pool peer bootstrap create --cluster sita-a --site-name site-a <image-pool>
eyJtb25faG9zdCI6IFsiMS4yLjMuNCIsICIyLjMuNC41Il0sICJuYW1lIjogImNsaWVudC5yYmQtbWlycm9yLmJvb3RzdHJhcCIsICJrZXkiOiAiQVFDQWRXNWR6aHRlS3hBQWNrYUlKOWF6VFNCWmFHYUJqMHBoSHc9PSJ9

该 token 其实是这样一个 JSON 对象经过 base64 编码生成:

{"mon_host": ["1.2.3.4", "2.3.4.5"], "name": "client.rbd-mirror.bootstrap", "key": "AQCAdW5dzhteKxAAckaIJ9azTSBZaGaBj0phHw=="}

集群 site-b 拿到这个字符串,就可以导入 token 并通过解码来直接配置 rbd-mirror peer 了:

# cat <<EOF > peer-bootstrap
eyJtb25faG9zdCI6IFsiMS4yLjMuNCIsICIyLjMuNC41Il0sICJuYW1lIjogImNsaWVudC5yYmQtbWlycm9yLmJvb3RzdHJhcCIsICJrZXkiOiAiQVFDQWRXNWR6aHRlS3hBQWNrYUlKOWF6VFNCWmFHYUJqMHBoSHc9PSJ9
EOF
# rbd mirror pool peer bootstrap import <image-pool> peer-bootstrap --cluster site-b --site-name site-b

 

2. rbd-mirror 加入名称空间的支持

rbd-mirror: add namespace support #28939

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

rbd-mirror 新增名称空间的支持,rbd-mirror daemon 可以指定某个名称空间下的 RBD 镜像需要被同步。

在存储池上开启 rbd mirror:

rbd namespace create ${POOL}/ns1
rbd namespace create ${POOL}/ns2

rbd mirror pool enable ${POOL}/ns1 pool
rbd mirror pool enable ${POOL}/ns2 image

 

 

统一存储层

 

实现了 pg 级别的租约来避免 stale read 问题

osd: implement per-pg leases to avoid stale reads #29236

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

分布式系统的读操作需要遵循线性一致性,即读到的结果在读取开始后的某个时间反映系统的状态,每次读必须至少返回最新提交的写入的结果,否则可能发生 stale read。

上面的 PR 实现了 pg 级别的 read lease 来避免这种问题。

 

集群管理

 

1. mgr/dashboard 开始集成 orchestrator 的功能

mgr/dashboard: orchestrator integration initial works #29127

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

当前完成 hosts, inventory, and services 的显示和 hosts 的添加/删除

2. 新增 k8sevents module,集成 K8S events API

mgr/k8sevents: Add mgr module for kubernetes event integration #29520

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

该 module 将事件发送到 K8S,并捕获/跟踪 rook-ceph 名称空间里的所有事件,从而可以在 Ceph 集群里监测到 K8S 的活动,例如 pod 重新启动,imagepulls 等。
和 K8S events API 进行交互,需要授予 mgr 服务访问权限,例如:

kubectl -n rook-ceph edit clusterrole rook-ceph-mgr-cluster-rules

新增:

- apiGroups:
 - ""
 resources:
 - events
 verbs:
 - create
 - patch
 - list
 - get
 - watch

3. mgr/dashboard 支持存储桶多版本管理的开关

mgr/dashboard: enable/disable versioning on RGW bucket #29460

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

bucket-versioning-3

 

4. mgr/dashboard 支持对 iSCSI target 级的 CHAP 身份验证

mgr/dashboard: Support iSCSI target-level CHAP auth #30011

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

现在可以在 target 级定义 CHAP/MUTUAL_CHAP 身份验证,对所有 TPG 都会应用相同的 credential

 

5. mgr/dashboard 支持通过 UI 管理 CephFS 的 quota 和快照

mgr/dashboard: CephFS snapshots/quota REST API #30256

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

 

6. mgr/dashboard 为 OSD 所在设备新增 SMART 信息

mgr/dashboard: Add smartctl data as an details tab of an OSD #30324

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

screen

 

7. 对平均心跳时间超过阈值的 OSD 会有健康告警

feature: Health warnings on long network ping times, add “dump_osd_network” to get a report #28755

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

mon_warn_on_slow_ping_ratio 指定 osd_heartbeat_grace 的比例来确定阈值,设为 0 则禁用告警。

OSD 心跳时间超过 mon_warn_on_slow_ping_time (默认 1000 毫秒) 时会告警:

[WRN] OSD_SLOW_PING_TIME_BACK: Long heartbeat ping times on back interface seen, longest is 1118.001 msec

 Slow heartbeat ping on back interface from osd.0 to osd.1 1118.001 msec

 Slow heartbeat ping on back interface from osd.0 to osd.2 1030.123 msec

 Slow heartbeat ping on back interface from osd.2 to osd.1 1015.321 msec

 Slow heartbeat ping on back interface from osd.1 to osd.0 1010.456 msec

新增 CLI:

ceph daemon osd.# dump_osd_network [threshold] 列出该 OSD 心跳时长大于 threshold 的连接统计

ceph daemon mgr.# dump_osd_network [threshold] 列出所有心跳时长大于 threshold 的连接统计

$ ceph daemon /var/run/ceph/ceph-mgr.x.asok dump_osd_network 0
{
    "threshold"0,
    "entries": [
        {
            "last update""Wed Sep  4 17:04:49 2019",
            "stale"false,
            "from osd"2,
            "to osd"0,
            "interface""front",
            "average": {
                "1min"1.023,
                "5min"0.860,
                "15min"0.883
            },
            "min": {
                "1min"0.818,
                "5min"0.607,
                "15min"0.607
            },
            "max": {
                "1min"1.164,
                "5min"1.173,
                "15min"1.544
            },
            "last"0.924
        },
...

 

8. mgr/dashboard 支持 rbd_support module 异步任务的过程展示

mgr/dashboard: progress: support rbd_support module async tasks #29424

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

 

9. 当 pg_num 不是 2 的幂会进行告警

osd/OSDMap: health alert for non-power-of-two pg_num #30525

https://github.com/ceph/ceph/pull/30525/files

可以配置如下参数关掉这个告警:

ceph config global mon_warn_on_pool_pg_num_not_power_of_twofalse

 

基础库

Messenger 支持客户端的匿名连接

msg: add some anonymous connection infrastructure #30223

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

允许同一客户端打开与同一 target 的多个连接,多次调用会获得单独的不同连接,连接都是一次性的。

一个好处是 MonClient 可以通过独立的连接来发送 tell 消息 (ceph tell mon.a),消息不会和复杂的连接管理交互和干扰。通过多个并行的连接,保证客户端始终能连接到 mon。

 

本月提交情况

发表评论

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