本期看點:

1. librbd: 實現了在 ceph-immutable-object-cache 裏緩存 parent image librbd: shared read-only cache hook #27285 github.com/ceph/ceph/pu

2. 支持為存儲桶添加標籤,幫助用戶整理和分類存儲桶資源

rgw: bucket tagging #27993 github.com/ceph/ceph/pu

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

每篇將以對象存儲、塊存儲、文件存儲、統一存儲層、集羣管理、基礎庫等模塊組織,為大家一一介紹。 對象存儲 1. 支持為存儲桶添加標籤,幫助用戶整理和分類存儲桶資源 rgw: bucket tagging #27993 github.com/ceph/ceph/pu 2. 支持 S3 對象鎖定。可以用 write-once-read-many (WORM) 的模式存儲對象,並通過鎖定對象防止對象在一段時間內不被刪除或者修改 rgw: add S3 object lock feature to support object worm #26538 github.com/ceph/ceph/pu

object lock提供了以下兩種方式來管理對象保留:retention periods 和 legal hold

  • retention period: 指定對象可以保持鎖定狀態的固定時間段。在該時間段內,對象將受 WORM 保護,不能被覆蓋或刪除。
  • legal hold: 提供的保護與保留週期相同,但沒有到期日期。legal hold 將一直有效,直至用戶明確將其刪除。

legal hold 與 retention period 無關,對象可以同時使用 legal hold 與 retention period。

上面的 PR 實現了 6 個 API:
  • PUT/GET bucket object lock
  • PUT/GET object retention
  • PUT/GET object legal hold

3. 新增獲取所有 realms 的 Restful API rgw: add 『GET /admin/realm?list』 api to list realms #28156 github.com/ceph/ceph/pu

塊存儲 1. librbd: 實現了在 ceph-immutable-object-cache 裏緩存 parent image librbd: shared read-only cache hook #27285 github.com/ceph/ceph/pu 在 2019/03 月的 Ceph 開發者月報 裏提到過,Ceph 裏實現了一個可以為 RBD 和 RGW 提供一個共享的只讀的 cache daemon: ceph-immutable-object-cache,可以用於緩存集羣的對象。 上面的 PR 實現了在 ceph-immutable-object-cache 為 librbd 緩存 parent image。 眾所周知,塊存儲常用於虛擬桌面託管,在 VDI (虛擬桌面基礎架構) 解決方案裏,虛擬機從同一鏡像裏克隆出來,所有這些虛機區分只有主機名和 IP,從集羣裏重新讀取的 parent image 其實很大部分是重合的。如果本地有 parent image 的緩存,不僅可以加快讀取速度降低等待事件,還能減少主機到集羣的網路流量。

2. rbd-nbd map/unmap 新增 netlink 的支持 rbd-nbd: add netlink map/unmap support #27902 github.com/ceph/ceph/pu netlink 是一種在內核與用戶空間之間進行雙向數據傳輸的通信方式。和 sysfs 、ioctl 等方式相比,netlink 有以下好處:
  • netlink 直接通過 BSD 套接字和內核進行通信獲得設備,無需像 sysfs 文件系統要在設備空間裏查找空閑 nbd 設備
  • 所有 nbd 設置可以用一條 netlink 命令完成,而 ioctl 則可能需要多次調用輪詢獲得內核消息
  • netlink 使用非同步通信機制,但 ioctl 使用同步機制限制了數據量和性能

統一存儲層

1. pg recovery 新增參數 osd_recovery_max_active_hddosd_recovery_max_active_ssd

osd: add hdd and ssd variants for osd_recovery_max_active #28677 github.com/ceph/ceph/pu 為 OSD 在 HDD/SSD 上分別提供 pg recovery 的限流。osd_recovery_max_active_hdd 默認為 3,osd_recovery_max_active_ssd 默認為 10,而 osd_recovery_max_active 現在默認為 0。 2. 基於 seastar 重構 OSD 的工作推進 Integrate PeeringState into crimson, fix related bugs #28180 github.com/ceph/ceph/pu crimson/osd: add –mkkey support #28534 github.com/ceph/ceph/pu

crimson/osd: add osd to crush when it boots #28689 github.com/ceph/ceph/pu

Add structures for tracking in progress operations #28395 github.com/ceph/ceph/pu 集羣管理 1. 為 OSDs/CRUSH nodes 批量設置 flags osd: revamp {noup,nodown,noin,noout} related commands #27735 github.com/ceph/ceph/pu ceph osd set-group noup,noout osd.0 osd.1 ceph osd unset-group noup,noout osd.0 osd.1 ceph osd set-group noup,noout host-foo ceph osd unset-group noup,noout host-foo ceph osd set-group noup,noout class-hdd ceph osd unset-group noup,noout class-hdd

2. mgr/ansible 支持 TLS 雙向認證

mgr/ansible: TLS Mutual Authentication #27512 github.com/ceph/ceph/pu ansible 編排模塊使用 Ansible Runner Service 來執行 playbook。之前使用的是用戶名和密碼進行驗證,上面的 PR 棄用先前的方法轉而使用 TLS,需要通過配置 CA 證書和公鑰來進行雙向驗證。 $ ceph mgr module enable ansible $ ceph orchestrator set backend ansible $ ceph config set mgr mgr/ansible/server_location 192.168.121.1:5001 $ ceph ansible set-ssl-certificate -i /usr/share/certs/client.crt SSL certificate updated $ ceph ansible set-ssl-certificate-key -i /usr/share/certs/client.key SSL certificate key updated $ ceph orchestrator status Backend: ansible Available: True 基礎庫 1. 新增 sha256/sha512 哈希演算法用於計算 dedup 的數據指紋 common,osd: add hash algorithms for dedup fingerprint #28254 github.com/ceph/ceph/pu

2. journal 支持 aligned append,提升寫入性能 journal: add support for aligned appends #28351 github.com/ceph/ceph/pu 未對齊的 append 操作將 journal entries 附加到 journal 對象可能帶來多次的寫操作,通過 journal::append 可以基於當前 journal 大小自動重新對齊,提升寫性能。 3. 優化 OSD map 的創建 mon, osd: parallel clean_pg_upmaps #28373 github.com/ceph/ceph/pu 對於使用 upmap balancer 的集羣,隨著 pg maps 的增長,一些涉及到 OSD map 的創建的動作可能很耗時(如停掉 OSD,重平衡 OSD)。上面的 PR 實現了 clean_pg_upmaps,替換掉原先的 maybe_remove_pg_upmaps,通過並行將時延大約降低到原先的 1/8. 4. objecter 會緩存 PG mapping 信息,以節省 CPU 資源

osdc/Objecter: pg-mapping cache #28487 github.com/ceph/ceph/pu

本月提交情況

推薦閱讀:
相關文章