前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ceph-luminous-bluestore

ceph-luminous-bluestore

作者头像
院长技术
发布2020-06-11 22:22:59
2.4K1
发布2020-06-11 22:22:59
举报
文章被收录于专栏:院长运维开发院长运维开发

对比

代码语言:javascript
复制
ceph后端支持多种存储引擎,以插件化的形式来进行管理使用,目前支持filestore,kvstore,memstore以及bluestore

1)Firestore存在的问题是:
在写数据前需要先写journal,会有一倍的写放大;
若是另外配备SSD盘给journal使用又增加额外的成本;
filestore一开始只是对于SATA/SAS这一类机械盘进行设计的,没有专门针对SSD这一类的Flash介质盘做考虑。

2)而Bluestore的优势在于:
减少写放大;
针对FLASH介质盘做优化;
直接管理裸盘,进一步减少文件系统部分的开销。

Bluestore原理说明

代码语言:javascript
复制
对象可以直接存放在裸盘上,不需要任何文件系统接口。
BlueStore 直接使用一个原始分区,ceph对象将直接写在块设备上,不再需要任何的文件系统;
和osd一起进来的元数据将存储在 一个 名为 RocksDB 的键值对 数据库;

各层意义

代码语言:javascript
复制
RocksDB :存储 WAL 日志和元数据(omap)
BlueRocksEnv: 与RocksDB 交互的接口
BlueFS: 一个类似文件系统的 mini C++,使 rocksdb 生效,ENv 接口(存储 RocksDB 日志和 sst 文件);
因为rocksdb 一般跑在一个文件系统的上层,所以创建了 BlueFS。
**RocksDB 存放的数据类型**
对象的元数据
write-ahead 日志
ceph omap  数据
allocator metadata(元数据分配器):决定数据存放位置;此功能可插拔

默认BlueStore模型

代码语言:javascript
复制
第一个小分区(XFS或者ext4),包括ceph files 
(init system descriptor,status,id,fsid,keyring 等)和RocksDB 文件
第二个分区是一个原始分区

优点

代码语言:javascript
复制
每一部分都可以存放在不同的磁盘中,RocksDB WAL 和 DB 可以存放在不同的磁盘或者小分区中

添加osd 案例1 由于Luminous里默认使用Bluestore,可以直接操作裸盘,data和block-db会使用lv。综合成本及性能,我们把block.db使用ssd的分区,osd仍然使用sas,block.wal不指定. 这里vdb作为osd盘,vdc作为block-db盘

代码语言:javascript
复制
首先ssh到各个存储节点,block.db使用的ssd分区,这里node1举例:
# ssh node1
# pvcreate /dev/vdb  # 创建pv, 这里使用的整块磁盘(与后面的分区对比),  pvs 查看pv列表
Physical volume "/dev/vdb" successfully created.
# vgcreate data_vg1 /dev/vdb  # 创建vg,  vgs查看vg列表
Volume group "data_vg1" successfully created
# lvcreate -n data_lv1 -L 1020.00m data_vg1 #创建lv,lvs查看lv列表, -n指定lv名称, -L指定lv的大小,需要小于或者等于vg的VSize
Logical volume "data_lv1" created.

---------------------------------------------
生产环境一块ssd磁盘会对应多块osd,所以这里也需要把ssd多个分区
# parted /dev/vdc 
(parted) mklabel gpt                                                      
(parted) mkpart primary 0% 25%   #因为测试,这里只做了一个占据磁盘25%容量的分区,实际情况根据osd数目划分相应的分区数
(parted) quit
# pvcreate /dev/vdc1  # 创建pv, 这里使用的是磁盘分区, pvs 查看pv列表
Physical volume "/dev/vdc1" successfully created.
# vgcreate block_db_vg1 /dev/vdc1  # 创建vg,  vgs查看vg列表
Volume group "block_db_vg1" successfully created
# lvcreate -n block_db_lv1 -L 1020.00m block_db_vg1  # 创建lv, lvs查看lv列表, -L指定lv的大小,需要小于或者等于 vg的VSize
Logical volume "block_db_lv1" created.

---------------------------------------------
# 不需要加--bluestore 参数,默认就是使用bluestore方式,data_vg1/data_lv1 是数据盘,block_db_vg1/block_db_lv1是block-db
管理节点执行:
ceph-deploy --overwrite-conf osd create node1 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1
ceph-deploy --overwrite-conf osd create node2 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1

案例2 创建具有3个逻辑卷的OSD(模拟不同类型的存储介质)

代码语言:javascript
复制
#pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
#vgcreate  ceph-pool /dev/sdb
  Volume group "ceph-pool" successfully created
#lvcreate -n osd0.wal -L 1G ceph-pool
  Logical volume "osd0.wal" created.
# lvcreate -n osd0.db -L 1G ceph-pool
  Logical volume "osd0.db" created.
# lvcreate -n osd0 -l 100%FREE ceph-pool
  Logical volume "osd0" created.

完成逻辑卷的创建后我们就可以创建 OSD 了。

代码语言:javascript
复制
ceph-deploy osd create \
    --data ceph-pool/osd0 \
    --block-db ceph-pool/osd0.db \
    --block-wal ceph-pool/osd0.wal \
    --bluestore node1

wal& db 的大小问题

1、在 ceph bluestore 的情况下,wal 是 RocksDB 的write-ahead log, 相当于之前的 journal 数据,db 是 RocksDB 的metadata 信息。在磁盘选择原则是 block.wal > block.db > block。当然所有的数据也可以放到同一块盘上。 2、默认情况下, wal 和 db 的大小分别是 512 MB 和 1GB,现在没有一个好的理论值,好像和 ceph 本身承载的数据类型有关系。/3、值得注意的是,如果所有的数据都在单块盘上,那是没有必要指定 wal &db 的大小的。如果 wal & db 是在不同的盘上,由于 wal/db 一般都会分的比较小,是有满的可能性的。如果满了,这些数据会迁移到下一个快的盘上(wal - db - main)。所以最少不会因为数据满了,而造成无法写入。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档