1. 程式人生 > >搭建基於BlueStore的Ceph環境

搭建基於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尚沒有達到生產可用的狀態,但有必要對此做一些跟進和了解。另外,後續如果可以用物理環境測試一下其效能。