BlueStore
对象可以直接存放在裸盘上,不需要任何文件系统接口。
原理
BlueStore 直接使用一个原始分区,ceph对象将直接写在块设备上,不再需要任何的文件系统;和osd一起进来的元数据将存储在 一个 名为 RocksDB 的键值对 数据库;
各层意义:
RocksDB :存储 WAL 日志和元数据(omap)
BlueRocksEnv: 与RocksDB 交互的接口
BlueFS : 一个类似文件系统的 mini C++,使 rocksdb 生效,ENv 接口(存储 RocksDB 日志和 sst 文件);
因为rocksdb 一般跑在一个文件系统的上层,所以创建了 BlueFS。
这是一个后端层,RocksDB的数据存储在 BlueStore用于存放自己数据的块设备上。
RocksDB 存放的数据类型:
对象的元数据
write-ahead 日志
ceph omap 数据
allocator metadata(元数据分配器):决定数据存放位置;此功能可插拔
默认BlueStore模型:
第一个小分区(XFS或者ext4),包括ceph files
(init system descriptor,status,id,fsid,keyring 等)
和RocksDB 文件
第二个分区是一个原始分区
优点:
每一部分都可以存放在不同的磁盘中,RocksDB WAL 和 DB 可以存放在不同的磁盘或者小分区中
Jewel版ceph安装
在 /etc/apt/sources.list.d/ceph.list 里面添加 ceph jewel 版的ceph源,
apt-get update
## 更新
手动安装jewel 版ceph:
apt-get install -y librbd1 librados2 ceph ceph-common ceph-mds Python-ceph libcephfs1
安装ceph最新版配置工具:ceph-deploy
下载ceph-deploy源码: Git clone https://github.com/ceph/ceph-deploy.git
进入 ceph-deploy 文件夹,更改setup.py 权限:
chmod +x setup.py
安装ceph-deploy:
`cd ceph-deploy`
`python setup.py install`
确认 已安装的ceph-deploy 是否可以配置 BlueStore 类型的osd:
1、查看 /usr/local/lib/python2.7/dist-packages/ceph_deploy-1.5.31-py2.7.egg/ceph_deploy/osd.py
文件的第192行是否为: storetype):
2、第318-320行是否分别为:
storetype = None
if args.bluestore:
storetype = 'bluestore'
ceph.conf 配置模板(BlueStore类型):
[global]
fsid = 879d6590-2c71-4b31-a54c-8d9752559f13
mon_initial_members = node1
mon_host = 10.1.35.230
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
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
[osd]
bluestore = true
N:推送到其他节点的/etc/ceph 文件夹里面
前面新建配置mon 和 mds过程和命令不变,
配置 BlueStore 类型osd 的ceph-deploy 命令:
ceph-deploy --overwrite-conf osd prepare --bluestore node1:/dev/sdb
目前,BlueStore类型的osd,直接用rbd新建的块设备是不能挂载的(挂载出错,内核不支持;如有不当之处请告知。)
本人采用的是rbd-nbd 来新建块设备:
$ sudo apt-get install -y rbd-nbd
$ sudo rbd create leseb -s 10G
$ sudo rbd-nbd map rbd/leseb
/dev/nbd0
$ sudo rbd-nbd list-mapped
/dev/nbd0