Ceph 开发者月报 2018-12

ceph_201812
  • 对象存储
  • 块存储
  • 统一存储层
  • 集群管理
  • 基础工具集
  • 本月提交情况

 

号外!

中兴CLove团队谢型果、严军新书《Ceph之RADOS设计原理与实现》一书已经发售,这本书作为介绍RADOS核心机制的书,无论是时效性还是权威性都属上乘,推荐给所有对Ceph底层原理感兴趣的兄dei。

 

本期看点:

RGW 同步模块为对象存储修改事件引入 publish-subscribe 机制,提供多对多的异步消息传递。

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

 

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

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

 

对象存储

RGW 同步模块为对象存储修改事件引入 publish-subscribe 机制,提供多对多的异步消息传递。

rgw: pub-sub (https://github.com/ceph/ceph/pull/23298)

事件会被发布到已定义的主题中,并可以通过订阅主题来拉取事件。事件需要被激活,也会在一段时间后过期(默认为 7 天)。

用户可以创建不同的主题并进行管理,并订阅其拥有的 bucket 所发布的事件。为了发布特定 bucket 的事件,需要指定一个 bucket 创建通知。通知可以在所有事件或者部分事件上创建,任何主题都可以有多个通知。

任何主题都可以有多个订阅。Ceph 提供新的 REST API 来为 pubsub 机制提供配置和控制接口。

事件作为 RGW 对象存储在特定用户的特定 bucket 内,用户无法直接访问事件,需要使用 Ceph REST API 从所选端点 (endpoint) 拉取 (pull) 和确认 (ack) 事件。事件被用户确认后会将从相应订阅的事件队列里删除。

创建和查看主题:

# radosgw-admin pubsub topic create --uid=admin --topic my-topic
# radosgw-admin pubsub topic get --uid=admin --topic my-topic
{
    "topic": {
        "user": "admin",
         "name": "my-topic"
    },
     "subs": []
}

 

创建订阅和查看订阅:

# radosgw-admin pubsub sub create  --uid=admin --sub-name=my-sub  --topic=my-topic
# radosgw-admin pubsub sub get --uid=admin --sub-name=my-sub  --topic=my-topic
{
    "user": "admin",
    "name": "my-sub",
    "topic": "my-topic",
    "dest": {
        "bucket_name": "pubsub-admin-my-topic",
        "oid_prefix": "",
        "push_endpoint": ""
    }
}

 

块存储

rbd-fuse/rbd-ggate/rbd-nbd 名称空间支持

rbd-fuse: namespace support (https://github.com/ceph/ceph/pull/25265)

rbd-ggate: support namespaces  (https://github.com/ceph/ceph/pull/25266)

rbd-nbd: support namespaces (https://github.com/ceph/ceph/pull/25260)

 

统一存储层

1. 基于存储池的 OSD 统计信息收集

osd: per-pool osd stats collection (https://github.com/ceph/ceph/pull/19454)

  • 收集和暴露一致的存储空间使用统计
  • 扩展了 ObjectStore 接口,以从对象存储取得每个存储池的统计信息

cepf df [detail] 现在可以看到基于存储池的信息:

  • 存储池名、ID、配额、对象数
  • USED:在所有 OSD 上已分配给一个池子的空间
  • STORED:实际存储在池子里的数据量,和 USED 类似,但是更精确
  • USED COMPR:通过压缩传递的数据量(在所有副本上求和),并且足以以压缩形式存储

例如:

POOLS:
NAME ID QUOTA OBJECTS QUOTA BYTES USED %USED MAX AVAIL OBJECTS DIRTY READ WRITE STORED USED COMPR UNDER COMPR
cephfs_data_a 1 N/A N/A 0 0 8.90G 0 0 0 0 0 0 0
cephfs_metadata_a 2 N/A N/A 1.50M 0 8.90G 21 21 0 42 2.19K 0 0
foo_replicated 4 N/A N/A 768K 0 8.90G 1 1 0 1 250K 0 0
2. bluestore 可以自动调整可配置的缓存大小
mimic: core: os/bluestore: cache autotuning and memory limit(https://github.com/ceph/ceph/pull/25283

bluestore 会将 OSD 堆内存使用量保持在指定的大小之下,通过配置选项 osd_memory_target 来控制,默认为 4G

  • tc_malloc 需要配置为内存分配器
  • bluestore_cache_autotune: enabled

 

集群管理

1. 通过配置 pg_autoscale,集群可以基于已使用的存储空间和 PG 数量,尝试自动调整存储池内的 PG 数量

mgr/pg_autoscale: autoscale pgs (https://github.com/ceph/ceph/pull/25360)

每个存储池有一个 pg_autoscale_mode 属性,可以设置为:

  • off:关闭 autoscale
  • on:打开自动调整
  • warn:当 pg 数应该被调整时给出一个警告

为存储池开启 pg_autoscale_mode:

ceph osd pool set foo pg_autoscale_mode on

为以后创建的所有存储池都设置 autoscale:

ceph config set global osd_pool_default_autoscale_mode <mode>

查看每个存储池的使用状态和对 PG 数变更的建议:

# ceph osd pool autoscale-status
POOL SIZE TARGET SIZE RATE RAW CAPACITY RATIO TARGET RATIO PG_NUM NEW PG_NUM AUTOSCALE
a 12900M 3.0 82431M 0.4695 8 128 warn
c 0 3.0 82431M 0.0000 0.2000 1 64 warn
b 0 953.6M 3.0 82431M 0.0347 8 warn

例如:PG_NUM 是当前存储池的 PG 数量,NEW PG_NUM 是系统希望在 autoscale 后调整的 PG 数量

 

2. 添加 ansible 编排模块。编排模块用于安装除了初始的 mon 和 mgr 之外的所有 ceph 服务。

mgr/ansible: Ansible orchestrator module (https://github.com/ceph/ceph/pull/24445)

开启 ansible 模块:

ceph mgr module enable ansible
ceph mgr module enable orchestrator_cli

配置 CLI (orchestrator_cli):

ceph orchestrator set backend ansible

其它配置:

ceph config set mgr mgr/ansible/server_addr <ip_address/server_name>
ceph config set mgr mgr/ansible/server_port <port>
ceph config set mgr mgr/ansible/username <username>
ceph config set mgr mgr/ansible/password <password>
ceph config set mgr mgr/ansible/verify_server <verify_server_value>

当前实现的 playbook 很少,只支持查看集群节点的存储设备列表:

# ceph orchestrator device ls
192.168.121.160:
 vda (hdd, 44023414784b)
 sda (hdd, 53687091200b)
 sdb (hdd, 53687091200b)
 sdc (hdd, 53687091200b)
192.168.121.36:
 vda (hdd, 44023414784b)
192.168.121.201:
 vda (hdd, 44023414784b)
192.168.121.70:
 vda (hdd, 44023414784b)
 sda (hdd, 53687091200b)
 sdb (hdd, 53687091200b)
 sdc (hdd, 53687091200b)

 

3. dashboard 添加配置服务。该功能允许检查是否配置了某个选项,如果配置了将会触发回调。

mgr/dashboard: Settings service (https://github.com/ceph/ceph/pull/25327)

 

4. prometheus 监控添加 RBD 统计

mgr/prometheus: provide RBD stats via osd dynamic perf counters (https://github.com/ceph/ceph/pull/25358)

# HELP ceph_rbd_read_bytes_sum RBD image bytes read Total
# TYPE ceph_rbd_read_bytes_sum counter
ceph_rbd_read_bytes_sum{pool="rbd",image="test"} 0.0

 

基础工具集

1. ceph-volume 可以根据 osd id 或 osd fsid 来擦除设备

ceph-volume zap devices associated with an OSD ID and/or OSD FSID (https://github.com/ceph/ceph/pull/25429)

 

2. 对 bufferlist 的重构,改善性能。BufferList.BenchAlloc 测试 4KB 的分配,比重构前节省了 40% 的时间

common: hypercombined bufferlist (https://github.com/ceph/ceph/pull/24882)

 

本月提交情况

image2018-12-28 17_15_46

 

发表评论

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