本期看點:

在 async recovery 之後,本期合併的 partial recovery 標誌著 Ceph的故障恢復對正常 IO 影響將進一步減少,再期待一下 recovery QoS,最終會解決recovery一直受人詬病的問題。

osd: partial recovery strategy based on PGLog #21722 (github.com/ceph/ceph/pu)

本篇為 2019 年度《Ceph 開發者月報》專欄的第五篇,在《Ceph 開發者月報》中,我們 UMCloud 存儲團隊將以月度為單位,為大家分享當月 Ceph 社區的有趣的提交和重要的變更,方便大家即刻掌握一手 Ceph 社區開發資料。

每篇將以對象存儲、塊存儲、文件存儲、統一存儲層、集群管理、基礎庫等模塊組織,為大家一一介紹。

對象存儲

radosgw-admin 新增兩條命令列出和刪除舊的逾期對象

rgw: object expirer fixes #27870 (github.com/ceph/ceph/pu)

關於 RGW 的一個 bug fix 和 workround.

之前 bucket 的分片會導致 Swift 對象逾期刪除功能失效,對象在磁碟上不會被自動刪除,上面 PR 修復了這個問題,並且加入兩個 radosgw-admin 的命令,可以管理在之前版本的 RGW 中 自動分片後可能留下的舊的逾期對象。

命令如下:

# 列出之前版本RGW中自動分片後留下的舊的逾期對象
radosgw-admin objects expire-stale list --bucket {bucketname}
# 刪除之前版本RGW中自動分片後留下的舊的逾期對象
radosgw-admin objects expire-stale rm --bucket {bucketname}

塊存儲

1、優化 librbd 提升 IOPS 和提升 CPU 使用效率

librbd: tweaks to increase IOPS and reduce CPU usage #28044 (github.com/ceph/ceph/pu)

主要通過以下方法提升:

  • 對於 hot IO 路徑上簡單的 small requests 使用新增的輕量級 object striper 來避免堆分配
  • librbd 是以 object buffer extent 為單位進行緩存的,對於單個 object buffer extent 的讀寫,不會分配新的 bufferlist

用零拷貝提升 CPU 效率:

librbd: support zero-copy writes via the C API #27895 (github.com/ceph/ceph/pu)

2、librbd 複製稀疏鏡像時,可以保持新鏡像的稀疏性

意味著,新鏡像佔用的空間是實際使用的空間,而非整個鏡像的大小。

librbd: clone copy-on-write operations should preserve sparseness #27999 (github.com/ceph/ceph/pu)

文件存儲

1、cephfs-shell 添加 quota 命令,可以無需掛載就可以直接設置目錄的配額屬性

cephfs-shell: add quota management #27483 (github.com/ceph/ceph/pu)

使用如下:

cephfs-shell quota get dir
cephfs-shell quota set {--max_files MAX_FILES} {--max_bytes MAX_BYTES} dir

2、cephfs-shell 添加 stat 命令顯示文件或文件系統狀態

cephfs-shell: Add stat command #27753 (github.com/ceph/ceph/pu)

使用如下:

cephfs-shell stat <file_name>

3、新增 cephfs subvolume 模塊用於管理 CephFS subvolumes

pybind/mgr: add cephfs subvolumes module #27594 (github.com/ceph/ceph/pu)

subvolume 可以看做是一個 cephfs volume 的子目錄,可以設定配額限制、單獨的 RADOS 名稱空間(存儲池內對象的邏輯分組,用戶對存儲池的讀寫可以僅在命名空間內進行)、唯一的 cephx 用戶。

上面的 PR 在 mgr 里新加了一個管理 subvolume 的模塊。新增命令:

# 可以在創建 subvolume 時指定創建在一個 subvolume group 里 (subvolume 的父目錄)
ceph fs subvolume create <myvol> <mysubvol> <size> <group>
ceph fs subvolume rm <myvol> <mysubvol> <group>

ceph fs subvolumegroup create
ceph fs subvolumegroup rm

# 獲得 subvolume 路徑: {prefix}/{group_id}/{subvolume_id}
ceph fs subvolume getpath

# subvolume group snapshots 的創建和刪除
ceph fs subvolumegroup snapshot create
ceph fs subvolumegroup snapshot rm

# subvolume snapshots 的創建和刪除
ceph fs subvolume snapshot create
ceph fs subvolume snapshot rm

統一存儲層

1、支持部分對象的增量恢復以提升 recovery 的速度

osd: partial recovery strategy based on PGLog #21722 (github.com/ceph/ceph/pu)

pg 的每個操作都記錄在 pg log 里,因此可以用 pg log 來計算 missing set 來恢複數據。

如果 pg log 有對象被修改的記錄,無論被修改多少,會讓整個對象從一個 OSD 恢復到另一個 OSD。例如一個 4M 對象,修改了 4k 的內容,也會恢復整個 4M 對象而不是修改後的 4k 內容,造成了極大的帶寬和磁碟性能的浪費和損耗,嚴重影響了恢復的效率。

在上面的 PR 中,為了解決這些問題,社區引入了 partial recovery 機制,會根據對象被修改的位置和 object_map 來支持對象的部分恢復,以提升恢復的速度。

2、基於 seastar 重構 OSD 的工作推進

More PeeringState and related cleanups to ease use in crimson #28048 (github.com/ceph/ceph/pu)

crimson: add support for basic write path #27873 (github.com/ceph/ceph/pu)

crimson: support pgnls and delete op #28079 (github.com/ceph/ceph/pu)

集群管理

1、mgr/zabbix 可以周期性搜集存儲池和 OSD 相關監控數據

mgr/zabbix Added pools discovery and per-pool statistics #26152 (github.com/ceph/ceph/pu)

可以收集特定存儲池和 OSD 的監控數據,例如存儲池使用情況、存儲池讀寫帶寬、OSD 狀態等信息。

也可以手動用命令給 zabbix 發送這些監控數據:

ceph zabbix discovery

2、在 dashboard 新增配置 scrub 相關的配置

mgr/dashboard: PG scrub configuration #27072 (github.com/ceph/ceph/pu)

3、支持在 dashboard 上調低存儲池的 pg_num

mgr/dashboard: Allow the decrease of pg』s of an existing pool #27785 (github.com/ceph/ceph/pu)

4、mgr/restful 新增獲取 perf counter 的 API

restful: Expose perf counters #27885 (github.com/ceph/ceph/pu)

基礎工具集

ceph -s 可以看到存儲池的 no[deep]-scrub flag 了

mon: show no[deep-]scrub flags per pool in the status #26488 (github.com/ceph/ceph/pu)

$> ./bin/ceph -s
cluster:
id: e8f8a0a9-75d9-4097-a9db-9b56044d1d14
health: HEALTH_OK

services:
mon: 1 daemons, quorum a (age 26s)
mgr: x(active, since 13m)
osd: 3 osds: 3 up (since 12m), 3 in (since 12m)

data:
pools: 2 pools, 140 pgs
objects: 0 objects, 0 B
usage: 3.2 GiB used, 27 GiB / 30 GiB avail
pgs: 140 active+clean

notes:
pool rbd has noscrub flag
pool rbd has nodeep-scrub flag
pool mypool has nodeep-scrub flag

本月提交情況


推薦閱讀:
相关文章