前言

本篇主要是分析ceph的版本之间参数的变化,参数变化意味着功能的变化,通过参数来分析增加,删除,修改了哪些功能,以及版本之间的变化,本篇主要通过导出参数,然后通过脚本去比对不同的版本的参数变化

14版本之前安装一个ceph-common,然后touch一个空配置文件就可以通过ceph --show-config拿到版本的配置文件

14版本之后需要安装好mon,并且这个命令取消了,通过下面的命令获取

ceph config show-with-defaults mon.lab204|awk '{print $1,"=",$2}'

处理过程

选取了6个版本的配置文件做分析

[root@lab204 cephconf]# ll
total 304
-rw-r--r-- 1 root root 35475 Sep 14 15:30 ceph.conf.10.2.11
-rw-r--r-- 1 root root 47857 Sep 14 15:32 ceph.conf.12.2.13
-rw-r--r-- 1 root root 51393 Sep 14 17:28 ceph.conf.14.1.0
-rw-r--r-- 1 root root 51535 Sep 14 16:12 ceph.conf.14.2.0
-rw-r--r-- 1 root root 53575 Sep 14 17:42 ceph.conf.14.2.11
-rw-r--r-- 1 root root 55400 Sep 14 16:25 ceph.conf.15.2.4
-rwxrwxrwx 1 root root 986 Sep 14 17:40 compare-conf.sh

通过执行脚本输出比对结果

sh ./compare-conf.sh  ceph.conf.10.2.11 ceph.conf.12.2.13  > /tmp/compare.log

比对结果如下

原始版本 比对版本 删除配置 改动配置 增加配置
ceph.conf.10.2.11 ceph.conf.12.2.13 78 182 394
ceph.conf.12.2.13 ceph.conf.14.1.0 75 143 170
ceph.conf.14.1.0 ceph.conf.14.2.0 5 7 8
ceph.conf.14.2.0 ceph.conf.14.2.11 5 24 61
ceph.conf.14.2.11 ceph.conf.15.2.4 55 14 105

得到版本的参数变化值以后,再挑选出来进行具体的分析即可,通过上面的版本可以看到从10的最后一个版本到现在差不多增加了600多个参数,也删除了200个参数左右,从整体上来说我们需要重点关注下新增的参数和变动的参数

ceph.conf.10.2.11到ceph.conf.12.2.13主要变化

  • mon_pg_stuck_threshold 从300秒调整为60秒,判断pg为stuck状态的
  • mon_stat_smooth_intervals 统计pgmap从最近的2个调整为最近的6个
  • mon_osd_cache_size mon保留的osdmap从10调整为500
  • mon_osd_down_out_interval 从down到out的时间从300秒调整为600秒
  • mon_keyvaluedb 从leveldb换成了rocksdb
  • mds_cache_size 从100000调整为0也就是不限制
  • mds_log_max_segments 从30调整为128 控制Behind on trimming的
  • osd_backfill_retry_interval backfill的重试间隔从10调整为30
  • osd_map_max_advance pg检查OSDMap增量版本时每次检查的最大版本数量从150调整为40
  • osd_map_cache_size 从200调整为50
  • osd_map_message_max 从100调整为40 这个在老版本里面大了会影响稳定性(3804
  • osd_map_share_max_epochs 从100 调整为40
  • osd_op_num_threads_per_shard 每个缓存队列的线程数从2调整为0
  • osd_op_num_shards 缓存队列从5调整为0
  • osd_pg_epoch_persisted_max_stale 从150调整为40
  • osd_max_object_size 从107374182400调整为128M,超大对象可能影响稳定性,cephfs的可能调整这个设置不成功
  • rbd_localize_parent_reads rbd的本地就近读取功能从开启调整为关闭了,官方有个pr说关闭更安全(16882
  • rgw_thread_pool_size 线程池从100调整为512,rgw的并发能力提高了

上面的是主要的一些变化,bluestore的一些参数就不记录了,因为jewel里面的bluestore基本是实验版本的

增加了394个参数,大部分是bluestore的,也有其它的参数的,增加的参数后面再分析

ceph.conf.12.2.13到ceph.conf.14.1.0主要变化

  • bluefs_buffered_io 从关闭得到开启,但是这个开启后会在后期引起swap的调用,引起整体性能降低(Redhat4967421),红帽自己是准备把这个参数关闭(GitHub pr 34297)后面版本应该也关闭了

  • fuse_big_writes 从true改成了false,false的时候是4K的写入,true的时候是128K的写入,对性能影响特别大(提出下降的问题),这个参数L版本还是true,这个版本改成了false,16562 pr这个pr可以看到,是因为libfuse去掉了这个参数了, 还要看下这个参数-o max_write ,用了fuse需要关注下版本,CentOS软件包libfuse2.9.2。因此,使用ceph-fuse在CentOS上升级到Mimi 导致fuse中的4k写 性能非常差的层

[root@lab204 cephconf]# rpm -qa|grep fuse
fuse-libs-2.9.2-11.el7.x86_64
fuse-2.9.2-11.el7.x86_64

也就是如果fuse是这个版本,就手动开启,如果把fuse升级了,那么性能就不用这个参数控制了

  • log_max_recent log最近的事件从500调整为10000
  • mon_client_hunt_parallel 客户端寻找mon的时候可以控制寻找mon的数量,从2改成了3了
  • mon config key max entry size 配置的key的大小从4096调整为65536(单位bytes)
  • mon_mgr_mkfs_grace 从60调整为120 如果120s没有活跃的mgr就用warn警告调整为error警告
  • osd_deep_scrub_large_omap_object_key_threshold判断omap超大的标准,从20万调整为200万,这个参数存在争议,后面看下最终是多少issue 40583
  • osd_max_pg_log_entries 从10000调整为3000 (这个参数是控制recover和backfill的,调整到足够小,就是强制做backfill了(红帽文档)) To force backfill rather than recovery, set osd_min_pg_log_entries to 1, and set osd_max_pg_log_entries to 2
  • osd_min_pg_log_entries 从1500调整为3000 (也有相关的问题内存占用
  • rgw_reshard_bucket_lock_duration reshard的时候,锁定对象的时间从120秒调整为360秒

ceph.conf.14.1.0到ceph.conf.14.2.0版本变化

  • rbd_skip_partial_discard 从false改成了true,跟discard 有关的,If true, the block device will skip zeroing a range when trying to discard a range inside an object.
  • rgw_frontends 默认从civetweb变成了beast

ceph.conf.14.2.0到ceph.conf.14.2.11版本变化

  • bluefs_allocator 从bitmap调整为hybrid,V14.2.11 新加入的功能(相关pr
  • bluefs_buffered_io这个版本调整为false了
  • bluestore_block_size 从10G调整为100G了
  • bluestore_fsck_on_mount_deep 从true调整为false了
  • bluestore_fsck_on_umount_deep 从true调整为false了
  • bluestore_log_omap_iterator_age 从1调整为5
  • bluestore_min_alloc_size_ssd从16384调整为4096这个跟性能有关的,The default value of bluestore_min_alloc_size_ssd has been changed to 4K to improve performance across all workloads.
  • fuse_big_writes又从false调整为true了
  • mon_pg_warn_min_per_osd从30调整为0了
  • osd_client_message_cap从100调整为0
  • osd_deep_scrub_large_omap_object_key_threshold 这个又从2000000调整为200000了
  • rocksdb_pin_l0_filter_and_index_blocks_in_cache从true调整为false了

ceph.conf.14.2.11到ceph.conf.15.2.4版本变化

  • mds_cache_memory_limit mds的缓存从1073741824调整为4294967296
  • osd_client_message_cap 从0 调整为100了
  • osd_max_omap_entries_per_request从131072调整为1024了
  • osd_max_pg_log_entries 从3000调整为10000 这个上个版本调整过,又动了
  • osd_min_pg_log_entries 从3000调整为250了 这个上个版本调整过,又动了
  • osd_op_queue_cut_off 从low调整为high
  • osd_pool_default_pg_autoscale_mode 从warn调整为了on了
  • rgw_bucket_index_max_aio从9调整为128
  • rgw_lc_lock_max_time 从60调整为90

总结

本篇是提供了一个查找功能变化点的思路,当然也可以通过github的pr来分析,配置文件过多的时候,我们就分析重点的地方即可

变更记录

Why Who When
创建 武汉-运维-磨渣 2020-09-15

ceph各个版本之间参数变化分析的更多相关文章

  1. Android之各个版本之间的变化

    (1)android5.0 Android5.0之后隐式打开服务需要指明包名 (2)android6.0 Android6.0之后涉及隐私的权限必须动态申请 (3)android8.0 android ...

  2. CLR/.NET/C#/Visual Studio/ASP.NET各版本之间的关系(转)

    由于这篇文章记录的是2015年7月,那时.net core还是叫做.net core 5 名词定义 下列这些名词,写.NET 的人一定都不陌生,但你是否有真正理解呢?如果看了我的摘要文字说明还无法理解 ...

  3. AWR Report 关键参数详细分析

    WORKLOAD REPOSITORY report for DB Name DB Id Instance Inst num Startup Time Release RAC CALLDB 12510 ...

  4. 微软提供的API的各个版本之间的区别

    First Floor Software这个diff lists非常方便的给出了微软提供的API的各个版本之间的区别,比如下表是.NET 4和.NET 4.5的API变化总结.我们可以看到.NET 4 ...

  5. mysql驱动参数变化

    在java平台使用的mysql jdbc驱动为:mysql-connector-java. 在项目中添加如下依赖: <dependency> <groupId>mysql< ...

  6. C++ 中数组做参数的分析

    C++ 中数组做参数的分析 1.数组降价问题? "数组引用"以避免"数组降阶",数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是& ...

  7. Linux 各个版本之间的差别

    一直没有搞清楚RHEL,CentOS,,还有Ubuntu,fedora这些版本之间的差别,搜了一下,整理到这里,备忘吧. 我最关心的: 1, CentOS是在RHEL基础上的免费版: 2, Ubunt ...

  8. AM335X有关MMC的启动参数问题分析

    AM335X有关MMC的启动参数问题分析 一. 问题来源 硬件平台:AM335X芯片 SDK版本:ti-processor-sdk-linux-am335x-evm-03.00.00.04-Linux ...

  9. MTK Android Git提取出两个版本之间的差异文件并打包

    git提取出两个版本之间的差异文件并打包 首先你得知道版本之间的commit id git log –pretty=oneline $ git log --pretty=oneline 1 差异文件并 ...

随机推荐

  1. Socket编程,C语言版!

    socket编程--send函数&recv函数详解 一.send函数 ✍ 函数原型: int send( SOCKET s,char *buf,int len,int flags ); ✍ 功 ...

  2. 最大子段和之M子段和

    最大M子段和 题目模型 N个整数组成的序列 \(a_1,a_2,a_3,-,a_n\) ,将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的. 问题分析 方法一: 看到序列,我们首先要尝试 ...

  3. ▶ 0001 No application 'E:\www\go\blog' found in your GOPATH

    go mod 配置 beego 首先cmd bee new blog go mod init 然后复制到任意目录 bee run 就会报错, 要退出该目录,进入上级目录 bee run blog 才行

  4. nginx集群:nginx配置负载均衡集群(nginx1.18.0)

    一,nginx的负载均衡集群的特点: 1,nginx集群和lvs的不同? lvs集群:工作在第4层(传输层) nginx集群:工作在第7层(应用层) lvs集群:性能更强 nginx集群:功能更强:可 ...

  5. PHP-fpm启动后没有查询到9000端口的问题

    Nginx与php-fpm通信的两种方式:tcp socket 和 Unix socket. Unix socket 是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信.这种方式需要再ng ...

  6. 「IDEA插件精选」安利一个IDEA骚操作:一键生成方法的序列图

    在平时的学习/工作中,我们会经常面临如下场景: 阅读别人的代码 阅读框架源码 阅读自己很久之前写的代码. 千万不要觉得工作就是单纯写代码,实际工作中,你会发现你的大部分时间实际都花在了阅读和理解已有代 ...

  7. service下载任务

    在service开启线程,利用接口更新进度 public class MainActivity extends AppCompatActivity { MyBindService msgService ...

  8. 字体图标:Font Awesome

    小图标 Font Awesome Font Awesome 字体为您提供可缩放矢量图标,它可以被定制大小.颜色.阴影以及任何可以用 CSS 的样式,是一款惊艳的字体图标! 可以前往官网进行学习 Fon ...

  9. Java 复制到剪贴板

    public void copy(String str) { StringSelection stsel = new StringSelection(str); Toolkit.getDefaultT ...

  10. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...