搭建基于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尚没有达到生产可用的状态,但有必要对此做一些跟进和了解。另外,后续如果可以用物理环境测试一下其性能。

你可能感兴趣的:(ceph,storage)