Ceph 存儲空間使用率統計數據解讀

Luminous Ceph 的存儲空間使用統計

Luminous 時每個pool 的USED 是用戶數據大小(未經過壓縮前的,per-pool 的RAW USED也是未經壓縮的考慮了副本數的數據大小),而GLOBAL 的RAW USED 是實際分配的硬盤空間大小(壓縮後的)。
Sage: "The per-pool USED is the logical user data written (before compression). The RAW USED space is the actual on-disk space consumed (after compression). That's why they vary."
https://tracker.ceph.com/issues/20870

  • Luminous Ceph:

(3206+311)3=10551M < 22032M (GLOBAL RAW USED)
一般的,每個三副本pool USED
3 = RAW USED
USED = sum.num_bytes
RGW USED = sum.num_bytes * raw_used_rate * curr_object_copies_rate,curr_object_copies_rate 是未降級副本率(<=1),raw_used_rate 相當於副本數。
一句話,luminous 的pool USED 結果是不合適的,USED 不應當作爲用戶對象數據的邏輯大小總和。USED 應當是從硬盤實際佔有考慮,N 版後per-pool 用戶數據大小使用STORED 表示,USED 是實際空間分配的大小。
N版之後是通過store_stats 計算的,N版之前的pool USED 都是通過stats 計算的,
store_stats 的統計是BlueStore 做的,和OSD 的USED 統計是一致的。一致以來GLOBAL USED 的計算是跟OSD 一致的,都是通過ObjectStore 層獲取的。因此GLOBAL USED 和OSDs USED 是可以對上的,但是和L 版的pool USED 是對不上的(通過stats 計算獲取)。

object_stat_sum_t 是對象統計的彙總。

N 版後的改進

pr https://github.com/ceph/ceph/pull/19454 後,ceph df 給出的集羣和存儲池空間統計出現重大變化,但是未backport 至L 版和M 版:

  1. 【GLOBAL section】: USED 是所有block 設備上保存的對象數據之和(所有OSDs 之和),RAW USED 是包含USED 和在block 上的Ceph 軟件系統自身的數據佔用(如BlueFS )。
  2. 【POOLS section】:RAW USED 被刪除了;USED 包含當前pool 在所有OSDs上空間分配使用大小,包含了副本、分配粒度、糾刪碼擦除、數據壓縮和小對象數據空洞,但不包含在block 上的Ceph 軟件系統自身的數據佔用(如BlueFS )。STORED 是Ceph用戶視角在pool 上存的數據大小,類似之前的USED,但是計算更精確了(包含了文件空洞,OMAP 佔用 )。
uint64_t get_used() const
{ return total - available - internally_reserved; }

// this accumulates both actually used and statfs's internally_reserved
uint64_t get_used_raw() const
{ return total - available; }

由上面的計算公式可知:used 肯定是不大於raw 的

BlueStore 的壓縮:https://docs.ceph.com/en/latest/rados/configuration/bluestore-config-ref/#inline-compression

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章