Ceph 开发者月报 2018-11

image2018-11-29 16_47_52

 

 

本期看点:

librgw 支持符号链接,使得在 NFS-Ganesha + librgw 实现 NFS 的场景下,能够支持多个文件名指向同一个对象,让对象存储更加地”文件系统“化。

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

 

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

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

 

对象存储

重构 RGW 的 RGWRados 相关处理代码

rgw: initial RGWRados refactoring work ( https://github.com/ceph/ceph/pull/24014 )

熟悉 RGW 代码结构的同学应该知道,作为 RGW 与后端 RADOS 统一存储的接口适配层,RGWRados 类的相关处理实现代码量很大,且各相关类之间的引用关系也比较混乱,所有的相关实现代码基本都集中在 rgw_rados.h/cc 文件中。

在上面的提交中,社区开始对 RGW 的 RGWRados 相关代码进行重构。主要的重构思想就是将 RGWRados 中的不同处理功能以服务模块的形式独立抽象出来,将相关代码放到独立的文件中进行实现。因此,如果大家更新到社区最新的 master 分支,就能够发现,RGW 部分的代码结构和实现较之前有了较大的变化。

社区最初的构想是想引入服务注册机制,即若要使用相关功能服务模块,需要先对相关服务进行注册。但从当前的代码实现及实际需求考虑,社区暂时放弃了这一想法。因此,在当前的实现中,处理方式是先对服务进行实例化,然后在服务实例中进行相关处理。

 

librgw 支持符号链接

librgw: support symbolic link ( https://github.com/ceph/ceph/pull/19684 )

librgw 的出现让对象存储封装成 NFS 接口成为可能,目前在 NFS-Ganesha 中已经有成熟的支持。但是作为文件系统,支持符号链接是比较基本的需求,可以使得多个文件名指向同一个对象。该 PR 可以使得对象存储更加地”文件系统“化。

 

radosgw-admin 新增 reshard 脏数据处理相关命令

rgw: reshard stale instance cleanup ( https://github.com/ceph/ceph/pull/24662 )

在上面的提交中,社区为 radosgw-admin 新增了

reshard stale-instances list   --  list stale-instances from bucket resharding
reshard stale-instances rm     --  cleanup stale-instances from bucket resharding

两个命令,分别用于列出和清理 bucket reshard 处理过程中产生的脏数据。

 

块存储

rbd 支持 image 镜像在不同的存储池命名空间之间进行迁移

rbd: support namespaces for image migration ( https://github.com/ceph/ceph/pull/24836 )

 

rbd mirror image status 命令支持显示具体 rbd-mirror 守护进程实例

rbd: show info about mirror daemon instance in image mirror status output ( https://github.com/ceph/ceph/pull/24717 )

在上面的提交中,社区对

$ rbd mirror image status

命令进行了完善,支持在该命令的输出信息中显示对指定 image 执行镜像同步的具体 rbd-mirror 守护进程实例。这对于同时启用了多个 rbd-mirror 守护进程实例的应用场景是非常有用的。

完善后的 rbd mirror image status 命令的输出信息如

$ rbd --cluster cluster1 mirror image status mirror/test 
  test:
    global_id: 8175f34e-94ff-4992-bd54-7a6c6073e3a6
    state: up+replaying [client.4268 192.168.1.248:44468/2978164156]
    description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
    last_update: 2018-10-23 16:54:04
 
 $ rbd --cluster cluster1 mirror image status mirror/test --format json --pretty-format
   {
     "name": "test",
     "global_id": "8175f34e-94ff-4992-bd54-7a6c6073e3a6",
     "state": "up+replaying",
     "mirror_instance": "client.4268 192.168.1.248:44468/2978164156",
     "description": "replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0",
     "last_update": "2018-10-23 16:54:34"
   }

 

rbd 新增 pool stats 命令

rbd: expose pool stats summary tool ( https://github.com/ceph/ceph/pull/24830 )

在上面的提交中,社区为 rbd 新增了 pool stats 命令,用于获取指定块存储池的相关统计信息。具体用法如:

usage: rbd pool stats [--pool <pool>] [--namespace <namespace>] 
                      [--format <format>] [--pretty-format] 
                      <pool-name> 
 
 Display pool statistics.
 
 Positional arguments
   <pool-name> pool name
 
 Optional arguments
   -p [ --pool ] arg pool name
   --namespace arg namespace name
   --format arg output format (plain, json, or xml) [default: plain]
   --pretty-format pretty formatting (json and xml)
 
 Note: legacy v1 images are not included in stats

输出信息将包含如下内容:

– image_count
– image_provisioned_bytes
– image_max_provisioned_bytes
– image_snap_count
– trash_count
– trash_provisioned_bytes
– trash_max_provisioned_bytes
– trash_snap_count

同时,也为 librbd 新增了相关 API 接口。

 

统一存储层

osd 支持对 delete object 操作的窗口期进行控制

Add support for osd_delete_sleep configuration value ( https://github.com/ceph/ceph/pull/24749 )

在上面的提交中,社区为 osd 新增了

– osd_delete_sleep
– osd_delete_sleep_hdd
– osd_delete_sleep_ssd
– osd_delete_sleep_hybrid

几个配置项,用于对 osd 的 delete object 操作的窗口期进行控制。这在 PG 迁移的场景下尤为适用,通过上述配置项,可以对迁移过程中 osd 的 delete object 操作的窗口期进行控制,从而达到对 delete object 操作进行 “节流” 的效果,减少系统资源的占用,从而降低对客户端访问性能的影响。

 

集群管理

dashboard 支持 JWT ( Json Web Token ) token 认证

mgr/dashboard: JWT authentication ( https://github.com/ceph/ceph/pull/22833 )

dashboard 支持 JWT (Json Web Token) token 认证,主要用于解决之前 dashboard 重载等场景下用户无需登录直接就可以访问的安全漏洞问题。

 

dashboard 新增 RESTful API 调用审计功能

mgr/dashboard: Audit REST API calls ( https://github.com/ceph/ceph/pull/24475 )

在上面的提交中,社区为 dashboard 新增了 RESTful API 调用审计功能。若启用了该审计功能,则 dashboard 发送的每个 RESTful API 调用请求都会在 Ceph 的审计日志中对应一条日志记录,日志记录内容如

2018-10-22 15:27:01.302514 mgr.x [INF] [DASHBOARD] from='https://[::ffff:127.0.0.1]:37022' 
path='/api/rgw/user/klaus' method='PUT' user='admin' params='{"max_buckets": "1000", 
"display_name": "Klaus Mustermann", "uid": "klaus", "suspended": "0", "email": "klaus.mustermann@ceph.com"}'

 

dashboard 新增 CRUSH map 视图

mgr/dashboard: CRUSH map viewer ( https://github.com/ceph/ceph/pull/24766 )

 

dashboard 新增对 SSO (Single Sign On) 单点登录的支持

mgr/dashboard: SSO – SAML 2.0 support ( https://github.com/ceph/ceph/pull/24489 )

基于 SAML2.0 协议,dashboard 新增了对 SSO (Single Sign On) 单点登录的支持。

 

dashboard 新增对 i18n 包的支持

mgr/dashboard: Add i18n support ( https://github.com/ceph/ceph/pull/24803 )

 

mgr/orchestrator 组件新增 orchestrator service ls 命令

mgr/orchestrator: Add support for “ceph orchestrator service ls” ( https://github.com/ceph/ceph/pull/24863 )

在上面的提交中,社区为 mgr/orchestrator 组件新增了

$ orchestrator service ls [--host=host] [--type=type]

命令,用于列出当前已知的服务列表。可以通过指定 –host 和 –type 选项来获取指定 host 以及指定类型的服务列表。

 

dashboard 支持存储池重命名

mgr/dashboard: Allow renaming an existing Pool ( https://github.com/ceph/ceph/pull/25107 )

 

mgr 新增 volumes 模块

mgr: add volumes module ( https://github.com/ceph/ceph/pull/25272 )

 

基础工具集

新增 ceph-menv 工具

ceph-menv: mrun shell environment ( https://github.com/ceph/ceph/pull/22132 )

在上面的提交中,社区新增了 ceph-menv 工具。当我们本地有多集群测试场景时,可以通过 mstart.sh 在本地环境中启动多个测试集群,当要针对某个特定集群执行相关的操作命令时,必须通过 mrun 命令并指定相应的集群名来执行命令,如

 $ mrun c1 ceph -s

每次执行命令都要使用 mrun 并指定集群名称无疑是非常冗余和繁琐的,ceph-menv 正是用于解决这一问题的。通过使用 ceph-menv 提供的 mset 命令来将当前命令执行的上下文环境设置为指定的集群,就可以直接执行相关的 ceph 操作命令来对指定集群进行操作访问了。如

$ mstart.sh c1 -n
$ mset c1
[ c1 ] ceph -w

 

crushtool 新增 –reclassify 选项

crushtool: add –reclassify operation to convert legacy crush maps to use device classes ( https://github.com/ceph/ceph/pull/24502 )

在上面的提交中,社区为 crushtool 新增了 –reclassify 选项,以支持在不触发数据迁移的前提下,将遗留的旧的 crush map 转换为新的 device class 规则。

 

本月提交情况

image2018-11-29 23_53_46

发表评论

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