參考:https://docs.ceph.com/en/latest/rados/configuration/bluestore-config-ref/
設備
BlueStore 管理一個、兩個或(在某些情況下)三個存儲設備。
在最簡單的情況下,BlueStore 使用單個(主)存儲設備。存儲設備通常是作為一個整體使用的,占用了BlueStore直接管理的整個設備。此主設備通常由block數據目錄中的符號鏈接標識。
數據目錄是一個tmpfs掛載(在啟動時或ceph-volume激活時),其中包含所有常見的 OSD 文件,這些文件包含有關 OSD 的信息,例如:它的標識符、它所屬的集群以及它的私鑰環。
也可以在一個或兩個附加設備上部署 BlueStore:
-
預寫日志 (WAL) 設備(block.wal在數據目錄中標識)可用於 BlueStore 的內部日志或預寫日志。僅當設備比主設備快時(例如,當它在 SSD 上且主設備是 HDD 時),使用 WAL 設備才有用。
-
數據庫設備(在數據目錄中標識)block.db可用於存儲 BlueStore 的內部元數據。BlueStore(或者更確切地說,嵌入式 RocksDB)會將盡可能多的元數據放在數據庫設備上以提高性能。如果數據庫設備已滿,元數據將溢出回主設備(否則會出現在主設備上)。同樣,只有當數據庫設備比主設備快時,它才會有幫助。
如果只有少量可用的快速存儲空間(例如,小於 1 GB),我們建議將其用作 WAL 設備。如果有更多,配置數據庫設備更有意義。BlueStore 日志將始終放置在可用的最快設備上,因此使用 DB 設備將提供與 WAL 設備相同的好處,同時還允許在其中存儲額外的元數據(如果合適的話)。這意味着,如果指定了 DB 設備但未指定顯式 WAL 設備,則 WAL 將隱式與更快設備上的 DB 共存。
block和block.db
如果您混合使用快速和慢速設備(SSD / NVMe 和旋轉),建議放置block.db在較快的設備上,而block (數據)放在較慢的(旋轉驅動器)上。
您必須手動創建這些卷組和邏輯卷,因為該ceph-volume工具目前無法自動執行此操作。
對於下面的示例,讓我們假設四個旋轉驅動器( sda、sdb、sdc和sdd)和一個(快速)固態驅動器(sdx)。首先創建卷組:
$ vgcreate ceph-block-0 /dev/sda
$ vgcreate ceph-block-1 /dev/sdb
$ vgcreate ceph-block-2 /dev/sdc
$ vgcreate ceph-block-3 /dev/sdd
現在創建block邏輯卷:
$ lvcreate -l 100%FREE -n block-0 ceph-block-0
$ lvcreate -l 100%FREE -n block-1 ceph-block-1
$ lvcreate -l 100%FREE -n block-2 ceph-block-2
$ lvcreate -l 100%FREE -n block-3 ceph-block-3
我們正在為四個慢速旋轉設備創建 4 個 OSD,因此假設 /dev/sdx 有 200GB SSD,我們將創建 4 個邏輯卷,每個 50GB:
$ vgcreate ceph-db-0 /dev/sdx
$ lvcreate -L 50GB -n db-0 ceph-db-0
$ lvcreate -L 50GB -n db-1 ceph-db-0
$ lvcreate -L 50GB -n db-2 ceph-db-0
$ lvcreate -L 50GB -n db-3 ceph-db-0
最后,使用 ceph-volume 創建 4 個 OSD :
$ ceph-volume lvm create --bluestore --data ceph-block-0/block-0 --block.db ceph-db-0/db-0
$ ceph-volume lvm create --bluestore --data ceph-block-1/block-1 --block.db ceph-db-0/db-1
$ ceph-volume lvm create --bluestore --data ceph-block-2/block-2 --block.db ceph-db-0/db-2
$ ceph-volume lvm create --bluestore --data ceph-block-3/block-3 --block.db ceph-db-0/db-3
這些操作最終會創建四個 OSD,block在速度較慢的旋轉驅動器上,每個 OSD 在固態驅動器上都有一個 50 GB 的邏輯卷 (DB)。
空間大小
當使用混合旋轉和固態驅動器設置時,為 BlueStore 創建足夠大的 block.db 邏輯卷非常重要。一般來說,block.db應該有盡可能大的邏輯卷。
一般建議是block.db大小在block大小的 1% 到 4% 之間。
- 對於 RGW 工作負載,建議block.db 大小不小於 4% block,因為 RGW 大量使用它來存儲元數據(omap 鍵)。例如,如果block大小為 1TB,則block.db不應小於 40GB。
- 對於 RBD 工作負載,block.db大小為1% 到 2% 的block大小通常就足夠了。
示例參考:
block(數據)大小 block.db(元數據)大小[block.wal(預寫日志)大小]
----------------------------------------------------------------------
1TB 10GB-40GB+
2TB 20GB-80GB+
4TB 40GB-160GB+
8TB 80GB-320GB+
... ...
在舊版本中,內部級別大小意味着數據庫只能充分利用與 L0、L0+L1、L1+L2 等大小之和相對應的特定分區/LV 大小,默認設置意味着大約 3 GB、30 GB , 300 GB 等等。大多數部署不會從適應 L3 和更高級別的大小中受益,盡管通過將這些數字加倍到 6GB、60GB 和 600GB 可以促進 DB 壓縮。
從 Nautilus 14.2.12 和 Octopus 15.2.6 開始的版本的改進可以更好地利用任意 DB 設備大小,而 Pacific 版本帶來了實驗性動態級別支持。因此,舊版本的用戶可能希望通過今天提供更大的數據庫設備來提前計划,以便在未來的升級中實現他們的好處。
當不混合使用快速和慢速設備時,不需要為block.db(或block.wal)創建單獨的邏輯卷。BlueStore 會自動將這些放在block。大小為 OSD 大小的 10% (DB) 和 1% (WAL)。
說明:DB 存儲 BlueStore 的內部元數據,WAL 是 BlueStore 的內部日志或 write-ahead 日志。建議使用快速 SSD 或 NVRAM 以獲得更好的性能。