搭建基於BlueStore的Ceph環境
Ceph Jewel版本的一個重大更新是開始支援使用bluestore作為objectstore,用於代替之前的filestore。與filestore最大的不同是,bluestore可以直接讀寫磁碟,即物件資料是直接存放在裸裝置上的,這樣解決了一直被抱怨的資料雙份寫的問題。需要說明的是,bluestore尚處於開發階段,Jewel雖然已經整合,但還是處於試驗階段,應該要到L版才能真正生產可用。
原理:
Bluestore直接使用一個原始分割槽來存放ceph物件資料,不再需要任何檔案系統,也就是說一個OSD對應一個裸分割槽;而OSD的元資料存放在一個名為RocksDB的鍵值對資料庫中。
預設的Bluestore資料存放模型:
一個OSD對應一個磁碟,磁碟的
第一個分割槽:預設只有100MB,XFS檔案系統,用於存放osd相關的 ceph_fsid、fsid、keyring等,並且其中包含一個名為block的軟連線,用於指向第二個分割槽,預設掛載到/var/lib/ceph/osd/ceph-X位置。
第二個分割槽:原始分割槽,第一個分割槽中的block軟連線指向的就是這個分割槽,這個分割槽是真正存放物件資料的分割槽。
RocksDB存放的資料型別:
物件的元資料
write-ahead日誌
ceph omap資料
allocator metadata(元資料分配器):決定資料存放位置
注:RocksDB的WAL和DB可以通過配置存在在不同的磁碟或者小分割槽中。
環境搭建
1、先搭建Mon,這個可以參考社群文件,這裡就不多介紹了。
2、建立Bluestore的OSD。
2.1 編輯ceph.conf,在osd這個section指明如下配置:
osd data = /var/lib/ceph/osd/$cluster-$id
cluster_network = 172.31.0.0/16
public_network = 172.31.0.0/16
osd mon heartbeat interval = 30
osd max scrubs = 1
osd scrub begin hour = 0
osd scrub end hour = 24
osd recovery op priority = 2
osd recovery max chunk = 1048576
osd recovery threads = 1
osd crush update on start = true
osd scrub sleep = 0.1
osd scrub chunk max = 5
osd deep scrub stride = 1048576
enable experimental unrecoverable data corrupting features = bluestore rocksdb
bluestore fsck on mount = true
bluestore block db size = 67108864
bluestore block wal size = 134217728
bluestore block size = 5368709120
osd objectstore = bluestore
bluestore = true
最重要的是紅色部分。
2.2 準備磁碟
ceph-disl list 可以列出該節點所有的磁碟,確定用於OSD的磁碟,刪除磁碟上的分割槽(ceph-disk或者parted都可以),下面以/dev/vdb為例說明。
2.3 ceph-disk prepare磁碟
ceph-disk prepare --bluestore /dev/vdb
幸運的話,執行完這條命令,新建的OSD已經up和in了,用ceph -s可以看到新建的osd,另外通過df -h可以看到新掛載的小分割槽。視磁碟大小,這條命令可能需要幾十秒到幾分鐘的時間。
2.4啟用磁碟
如果2.3 osd沒有up的話,可以通過這一步啟用磁碟.
ceph-disk activate /dev/vdb1
注意,這裡需要指明的是那個小分割槽。正常情況下,執行完這條命令osd應該已經up。
2.5 新增其他OSD
重複執行2.2-2.4新增其他OSD。
雖然Bluestoe尚沒有達到生產可用的狀態,但有必要對此做一些跟進和了解。另外,後續如果可以用物理環境測試一下其效能。