本期看點:

librbd 新增 write-around,並作為默認緩存策略

introduce new default write-around cache policy #27229

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

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

對象存儲

pubsub 機制提供兼容 S3 的 API

S3 compatible pubsub API #27091(github.com/ceph/ceph/pu)

塊存儲

1.librbd 新增 write-around,並作為默認緩存策略

introduce new default write-around cache policy #27229(github.com/ceph/ceph/pu)

之前為默認為 write-back。

繞寫模式的好處是繞過緩存,直接寫後端數據,緩存失效後再刷新一遍,保證最終落盤的數據是正確的。這個可以讓 librbd 在 OSD 請求過程中可以立即完成寫 IO。後續的 flush 請求則會確保所有在處理過程中的寫IO 都會在請求結束前完成。

新增選項 rbd_cache_policy,可以設置為 writethrought、writeback、writearound 任一種模式

2. 刪除 parent image 時可以選擇將其移入回收站,這樣在與之相關的最後一個 clone image 被刪除時,該 parent image 會被自動刪除

librbd: optionally move parent image to trash on remove #27521(github.com/ceph/ceph/pu)

相關命令:

rbd rm {parent-image} --rbd-move-parent-to-trash-on-remove=true

3. 從 EC data pool 創建的 RBD 鏡像支持稀疏化

librbd: support EC data pool images sparsify #27268(github.com/ceph/ceph/pu)

統一存儲層

1. 基於 seastar 重構 OSD 的工作推進

crimson/net: lossy connection for ProtocolV2 #26710(github.com/ceph/ceph/pu)

crimson: enable cephx for v2 msgr #27514 (github.com/ceph/ceph/pu)

2. 新增兩個 bluestore 的健康警告: BLUESTORE_LEGACY_STATFS 和BLUESTORE_DISK_SIZE_MISMATCH

os/bluestore: introduce legacy statfs and dev size mismatch alerts #27519(github.com/ceph/ceph/pu)

  • BLUESTORE_LEGACY_STATFS

Nautilus 版本的 bluestore 會以存儲池為粒度跟蹤內部使用統計。如果有 OSD 使用在 Nautilus 版本前創建的 bluestore 卷,可能導致 ceph df 統計不準確。

可以停掉這些OSD,repair 後重啟,即可更新:

systemctl stop ceph-osd@123
ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-123
systemctl start ceph-osd@123

bluestore_warn_on_legacy_statfs 選項可以開啟或關閉提醒檢測到舊版 bluestore 統計的告警。

  • BLUESTORE_DISK_SIZE_MISMATCH

塊設備大小和 free list manager 檢測的大小不匹配會出現該警告。有問題的 OSD 需要重新部署,否則以後可能會掛掉。

集羣管理

為 Ceph 集羣添加默認的 Prometheus Alert 告警規則

monitoring: Prometheus default alerts #27596 (github.com/ceph/ceph/pu)

基礎工具集

1. 為 CRUSH node 設置 no{out,down,in,out} flags

mon,osd: add no{out,down,in,out} flags on CRUSH nodes #27563(github.com/ceph/ceph/pu)

之前只能為 OSD 設置 noout, nodown, noin, noout flag, 現在可以為 CRUSH node 設置了

假如 host-foo flag 為 noout, nodown, rack-1 flag 為 noout, noin,則在 host-foo 上的 osd 會有 noout, nodown, noin 三個 flag

相關命令:

ceph osd add-noout host-foo
ceph osd rm-noout host-foo

2. 為 mon/mds 新增 ok-to-stop 等命令

mon: add mon, osd, mds ok-to-stop and related commands #27146(github.com/ceph/ceph/pu)

新增以下命令:

# 檢查是否可以在不減少該 mon 即時可用性的情況下停掉該 mon
mon ok-to-stop {mon-id}
# 檢查是否可以在不破壞 quorum 關係的情況下加入 mon
mon ok-to-add-offline {mon-id}
# 檢查是否可以在不破壞 quorum 關係的情況下刪除 mon
mon ok-to-rm {mon-id}
# 檢查是否可以在不減少該 mon 即時可用性的情況下停掉該 osd
mds ok-to-stop {mds-id}

3. Ceph dedup 新增 Rabin-Karp Chunking 演算法

src/common: add rabin chunking for dedup #26730(github.com/ceph/ceph/pu)

dedup 利用重複數據刪除技術可以查找大塊的重複數據,只存儲一份數據,節省存儲空間。

上面的 PR 為 Ceph dedup 工具新增 Rabin-Karp Chunking 演算法,之前實現的是定長分塊數據去重。

定長分塊技術將數據流按固定的長度分塊,但某處數據變化導致後面所有分塊變化,因此去重效果還是比較差。

變長分塊技術,不是簡單地根據偏移來劃分 chunk,而是根據特殊標記來對數據分片,彌補了定長分塊技術的缺點。

特殊標記的確定一般使用基於內容的分片演算法,使用滑動窗口技術。利用 rolling hash 計算滑動窗口的指紋, 如果計算的指紋滿足預先設定的條件,就將該窗口作為切分點。

這裡 Rabin-Karp Chunking 演算法使用 Rabin Fingerprint 演算法作為 rolling hash。

4. 添加 ceph osd stop 命令用於停掉 OSD

osd: add 『ceph osd stop』 command #27595 (github.com/ceph/ceph/pu)

基礎庫

1. Aio 和 AioThrottle 的重構工作

? Ai-o Ai-o Ai-o Ai-o… queue like an Egyptian ? #26461(github.com/ceph/ceph/pu)

2. 創建 pg 時跟蹤 pg history 和 past_intervals

mon,osd: track history and past_intervals for creating pgs #27696(github.com/ceph/ceph/pu)

本月提交情況


推薦閱讀:
相關文章