前言

关于bluestore的db应该预留多少空间,网上有很多资料

如果采用默认的

write_buffer_size=268435456

大小的话

那么几个rocksdb的数据等级是

  1. L0: in memory
  2. L1: 256MB
  3. L2: 2.56 GB
  4. L3: 25.6 GB
  5. L4: 256 GB

设置L4那么大的ssd可以给一个osd使用有点不划算,那么空间一般计算就是L1+L2+L3将近30GB

这个可以参考下面的文章

https://blog.csdn.net/NewTyun/article/details/103379694

关于block.db大小调整,只需为所有Bluestore OSD保留30 GB

那么这个大小对不对,如果你直接参考30GB这个,并且按照常规的去分区来说,就会带来问题了,我们看下具体什么问题

实际测试验证

  1. parted -s /dev/sdb mkpart primaru 1 31G

上面的命令已经放大了1GB了,但是实际上还是不行

  1. [root@lab102 ~]# ceph daemon osd.0 perf dump|grep bluefs -A 10
  2. "bluefs": {
  3. "gift_bytes": 0,
  4. "reclaim_bytes": 0,
  5. "db_total_bytes": 30999044096,
  6. "db_used_bytes": 3258966016,
  7. "wal_total_bytes": 1999630336,
  8. "wal_used_bytes": 501215232,
  9. "slow_total_bytes": 160000114688,
  10. "slow_used_bytes": 7837319168,
  11. "num_files": 194,
  12. "log_bytes": 10485760,

上面是我测试环境记录的值,db只使用了3.2G实际上已经开始使用slow 了,所以这个大小实际上不满足的我的预设的,这个跟parted命令分区的GB转换也存在的一定的关系

看下parted的问题

  1. [root@lab102 ~]# parted -s /dev/sdf mkpart primary 1 1GB
  2. [root@lab102 ~]# parted -s /dev/sdf print
  3. Model: Intel RMS25CB080 (scsi)
  4. Disk /dev/sdf: 4000GB
  5. Sector size (logical/physical): 512B/4096B
  6. Partition Table: gpt
  7. Disk Flags:
  8. Number Start End Size File system Name Flags
  9. 1 1049kB 1000MB 999MB primary

可以看到上面创建1GB的时候实际上只创建了999MB,加上我指定的从1MB开始,实际上这个地方设置是按1000进制处理容量的,而对容量的需求的是真正的1024的去算的,这个地方就存在误差了

那么我们简单点处理,就是直接放大到35GB即可

  1. parted -s /dev/sdf mkpart primary 1 35GB

按这个容量设置的,能够保证上面的L3没有先满的时候不会提前溢出了

红帽的官方的建议是留1T 40GB左右,而suse是建议db大小为64GB

https://documentation.suse.com/zh-tw/ses/6/single-html/ses-deployment/index.html#:~:text=如需BlueStore 的詳細,使用單獨的分割區。

https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html/administration_guide/osd-bluestore

如果没有调整write_buffer_size的情况下,建议是35GB,40GB或者64GB,这个都存在一些放大设置,如果磁盘空间足够的情况下,多分一点也没什么关系的,尽量避免转换不正确带来的未知的降速

WAL大小,suse建议是4GB的

测试模型构建

准备一个4TB的sata盘,准备一个db分区,准备一个wal分区(测试环境为2GB)

db分区设置为你需要的大小,上面的环境当中,我测试了db 30GB和35GB两组大小的情况

设置35GB写入600万文件的时候osd的db情况如下:

  1. ceph daemon osd.0 perf dump|grep bluefs -A 10
  2. "bluefs": {
  3. "gift_bytes": 0,
  4. "reclaim_bytes": 0,
  5. "db_total_bytes": 34999361536,
  6. "db_used_bytes": 10392428544,
  7. "wal_total_bytes": 1999630336,
  8. "wal_used_bytes": 492826624,
  9. "slow_total_bytes": 160000114688,
  10. "slow_used_bytes": 0,
  11. "num_files": 177,
  12. "log_bytes": 3944448,

创建osd的命令

  1. ceph-deploy osd create --data /dev/sdc1 --block-db /dev/sdb1 --block-wal /dev/sdb2 lab102

创建一个rgw网关

然后用cosbench往网关打数据

200个worker,64KB的文件,写入600万文件

测试一轮的时间大概为2小时就可以复现上面的情况,测试过程还带出了另外的一个问题

  1. rgw_dynamic_resharding = true

这个动态分片过程中会有一定的概率阻塞住请求的,通过cosbench里面的压测图形也可以看到分片后的性能比没分片是好很多的,所以如果抢时间的话

最好是关闭动态分片,设置好需要的分片数目

测试完需要改db的时候,直接删存储池,然后重新创建即可,推掉的操作也很快的

总结

网上的文章都是用来参考的,实际是一定需要去复测验证的,一般分享的文章也不会细化到一个parted的命令也记录,只会从原理上面出发去分析,并且环境调整了什么参数,都是不同的结果的,比如上面的

write_buffer_size如果调整到512MB,那么预留的空间差不多需要翻一倍的

所以参数的调整,一定要实测

ceph bluestore的db分区应该预留多大的空间的更多相关文章

  1. ceph扩展bluestore的db分区

    前言 在ceph 14版本里面才加入了bluefs-bdev-migrate,分区迁移相关的命令,那么在12版本里面其实也是可以扩展分区的 测试的版本 [root@lab102 ceph-0]# ce ...

  2. [ ceph ] BlueStore 存储引擎介绍

    为什么需要 BlueStore 首先,Ceph原本的FileStore需要兼容Linux下的各种文件系统,如EXT4.BtrFS.XFS.理论上每种文件系统都实现了POSIX协议,但事实上,每个文件系 ...

  3. 开源实践分享:Ceph bluestore部署实践

    https://blog.51cto.com/99cloud/2119884 Ceph bluestore部署 首先为大家分享Ceph bluestore具体该如何部署,使用环境如下• 单节点• Ce ...

  4. Ceph BlueStore与FileStore:利用Micron NVMe SSD进行性能比较

    https://www.micron.com/about/blog/2018/may/ceph-bluestore-vs-filestoreblock-performance-comparison-w ...

  5. Ceph BlueStore 解析:Object IO到磁盘的映射

    作者:吴香伟 发表于 2017/02/19 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 简单回顾下Ceph OSD后端存储引擎的历史. 为解决事务原子性问题, ...

  6. ceph存储 ceph Bluestore的架构

    ceph 目前是开源社区比较流行的分布式块存储系统,其以良好的架构,稳定性和完善的数据服务功能,获得的了广泛的部署和应用. 目前ceph 最大的问题是其性能相对较差,特别是无法发挥SSD等高速设备的硬 ...

  7. ceph bluestore与 filestore 数据存放的区别

    一. filestore 对象所在的PG以文件方式放在xfs文件中 1 查看所有的osd硬盘,跟其他linux其他硬盘一样,被挂载一个目录中. [root@hz-storage1 ~]# df -h ...

  8. Ceph Bluestore首测

    Bluestore 作为 Ceph Jewel 版本推出的一个重大的更新,提供了一种之前没有的存储形式,一直以来ceph的存储方式一直是以filestore的方式存储的,也就是对象是以文件方式存储在o ...

  9. Oracle DB 分区特性概述 Overview of Partitions

    概述:在Oracle数据库中,分区(partitioning)可以使非常大的表(table)或索引(index)分解为小的易管理的块(pieces),这些块被称作分区(partitions).每个分区 ...

随机推荐

  1. centos8上安装ImageMagick6.9.10并压缩图片生成webp缩略图

    一,ImageMagick的作用: ImageMagick 是一个用来创建.编辑.合成图片的软件. 它可以读取.转换.写入多种格式的图片. 功能包括:图片切割.颜色替换.各种效果的应用, 图片的旋转. ...

  2. Centos定时备份 MySQL数据库

    一.编写数据库备份脚本 backupmysql.sh #!/bin/bash # Name:bakmysql.sh # This is a ShellScript For Auto DB Backup ...

  3. python web自动化上传文件工具

    工具下载地址:链接:https://pan.baidu.com/s/1cHdNHW 密码:56bp说明:1.WinSpy-1.0.2.7z解压即可.2.pywin32的exe程序,根据自己安装的pyt ...

  4. Linux标准重定向-输入-输出-错误-多重

    一切皆文件,都是文件的操作 三种I/O设备 标准的输入输出 程序:指令+数据 读入数据:Input 输出数据:Output 系统中打开一个文件系统自动分配文件描述符,除了0,1,2是固定的,其他的都是 ...

  5. Unity控制角色移动

    Copy代码前的准备工作 整体结构 建立个空对象命名随意,主要是为了:角色掉出地图时,可以回到空对象的位置 在建立个空对象命名为Player,放到PlayResurrectionPoints子级下,并 ...

  6. ubuntu JDK&SDK 环境变量配置

    ubuntu JDK&SDK 环境变量配置 一.下载JDK 1. 先卸载Ubuntu 带的openJDK: sudo apt-get purge openjdk* 2.到http://www. ...

  7. git学习(一) 入门级命令

    git 本地操作 调出Git的帮助文档 git --help 查看某个具体命令的帮助文档 git +命令 --help 查看git的版本 git --version 生成空的本地仓库 git init ...

  8. conda回滚

    1. 查看历史版本: conda list --revision 2. 安装上次版本: conda install revision 13 13是历史序号.从上面看出,最近的历史序号是14,因此上一个 ...

  9. 常用的实现Javaweb页面跳转的方式

    我们有两大种方式来实现页面跳转:1.JS(javascript):2.jsp跳转 先说jsp(金j三s胖p):1.转发:request.getRequestDispatcher("1.jsp ...

  10. uniapp swiper高度自适应问题

    这里的话是想做一个比较常见的左右滑动更改tab的效果,引用了uview-ui中的u-tabs-swiper组件,需要结合swiper组件来使用 先来讲下主体思路:每个tab页(swiper-item) ...