问题

ceph 在扩容的过程中,免不了会遇到osd数量达到一定程度以后,需要调整存储池的pg_num和pgp_num。一般在osd数量比较小的时候,可能没啥问题。但是当osd到达一定数量的时候,扩展pg的时候,可能会出现如下报错:

Error E2BIG: specified pg_num 4096 is too large (creating 2048 new PGs on ~60 OSDs would exceed the per-OSD max of 32 given by mon_osd_max_split_count); please increase the pg_num in smaller steps

根据报错,我们很明显指向了mon_osd_max_split_count这个参数。

我们的环境就是在48个osd扩展到60个osd(集群每个osd容许的最大pg是250个)的时候,需要将pg从2048调整到4096的时候出现的报错。我们不妨先查看一下集群的这个参数的值。我们使用如下命令查询:

ceph daemon osd.0 config show | egrep 'mon_osd_max_split_count'

有输出,输出如下:

"mon_osd_max_split_count": "32"

说明osd有对应的该参数的配置,并且的确和错误描述中的一致,是32.这个值是默认值。

我们再查一下mon试试,使用如下命令查询:

ceph daemon /var/run/ceph/ceph-mon.ceph-node01.asok config get mon_osd_max_split_count

也是有输出的,并且也和错误描述中的一致,说明mon也是有该参数配置的。如下:

{"mon_osd_max_split_count": "32"
}

意义

mon_osd_max_split_count参数是干嘛的?从字面上看,就是mon 监控每个osd在分裂的时候,容许的最大分裂数量。的确是这样,ceph为了限制pg分裂的速度,设置了mon_osd_max_split_count这个参数。这个参数表示【在分裂的时候,每个osd容许的最大分裂数量】。

那么,在我们的环境下,osd从48个扩展到60个的时候,也就是pg应该从2048(单个osd最大pg数为250,48个osd的时候,假如一个pool的占整个集群100%的数据量,该pool最优的pg数量是2048)开始调整。理论上应该最高容许调整到如下:

2048+32*60=3968

我们将上面的计算过程写成脚本:

#!/bin/bash
max_inc=`ceph daemon /var/run/ceph/ceph-mon.ceph-node01.asok config get mon_osd_max_split_count 2>&1 \| tr -d '\n ' | sed 's/.*"\([[:digit:]]\+\)".*/\1/'`
pg_num=`ceph osd pool get volumes pg_num | cut -f2 -d: | tr -d ' '`
echo "当前 pg_num value: $pg_num, 每个osd每次最大分列数: $max_inc"
osd_num=`ceph osd ls |wc -l`
next_pg_num="$(($pg_num+$(($max_inc * $osd_num))))"
echo "最大扩容 pg_num: $next_pg_num"

没错!当mon_osd_max_split_count保持默认的32的配置的时候,按照报错,我们的确需要每次扩容小一些的pg_num(increase the pg_num in smaller steps)。60个osd,最适合的pg_num是4096,那我们应该先扩容到3968,再扩容到4096。

处理方法

分布扩容

按照错误描述,分布扩容。先扩容到3968,在扩容到4096.该方法是可行的,不过就是集群要两次扩容(每次扩容可是会基本引起集群不可用的),两次数据平衡。不太推荐。

调整mon_osd_max_split_count

既然是mon_osd_max_split_count参数控制的,那我们可以调整该参数。可以走先动态注入,再改配置文件的方法。我们先用如下两个命令,将mon_osd_max_split_count值动态改成64:

ceph tell mon.* injectargs '--mon_osd_max_split_count 64'
ceph tell osd.* injectargs '--mon_osd_max_split_count 64'

然后在deploy(我的集群是ceph-dploy配置的)节点,修改ceph配置文件,在配置文件的mon和osd字段,添加如下配置:

[mon]
mon osd max split count = 64
[osd]
mon osd max split count = 64

将配置文件,同步到各节点:

ceph-deploy --overwrite-conf config push ceph-node0{1..6}

最后,参考ceph 存储池pg和pgp调整调整pg_num和pgp_num的值。

ceph详解之mon_osd_max_split_count相关推荐

  1. ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储

    // 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...

  2. ceph搭建及使用详解

    第1章 ceph介绍 1.1 Ceph的主要特点 统一存储 无任何单点故障 数据多份冗余 存储容量可扩展 自动容错及故障自愈 1.2 Ceph三大角色组件及其作用 在Ceph存储集群中,包含了三大角色 ...

  3. ceph命令系列(一):ceph-deploy/ceph/rados/rbd 常用命令详解

    ceph-deploy 常用命令详解 命令 描述 ceph-deploy new [mon-node ...] 指定node(s)为monitor,开始部署一个新的ceph集群,并且在当前目录创建ce ...

  4. 【ceph】Ceph之PG状态详解--研读笔记

    原文:分布式存储Ceph之PG状态详解 - 简书 Ceph中一些PG相关的状态说明和基本概念说明.故障模拟_pansaky的博客-CSDN博客 1. PG介绍 继上次分享的<Ceph介绍及原理架 ...

  5. Ceph 中的 PG 状态详解

    1. PG介绍 这次主要来分享Ceph中的PG各种状态详解,PG是最复杂和难于理解的概念之一,PG的复杂如下: 在架构层次上,PG位于RADOS层的中间. a. 往上负责接收和处理来自客户端的请求. ...

  6. Ceph优化系列(二):Ceph主要配置参数详解

    转载:Ceph配置参数详解 概述 Ceph的配置参数很多,从网上也能搜索到一大批的调优参数,但这些参数为什么这么设置?设置为这样是否合理?解释的并不多 本文从当前我们的ceph.conf文件入手,解释 ...

  7. Ceph分布式存储 原理+架构图详解

    分布式存储Ceph ceph介绍 ceph是一个统一的.分布式的存储系统,设计初衷式提供较好的性能(io).可靠性(没有单点故障)和可扩展性(未来可以理论上无限扩展集群规模),这三点也是集群架构所追求 ...

  8. ceph集群和数据库到底是储存数据_Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...

    作者 | Pythonicc责编 | 王晓曼出品 | CSDN博客简介1.什么是数据库读写分离读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从 ...

  9. ceph-dencoder工具使用详解

    文章目录 简介 使用 decode命令用法 encode 简介 ceph-dencoder工具是一个序列化编码.解码并且打印ceph数据结构的工具.它主要用来调试和测试ceph不同版本之间的兼容性问题 ...

最新文章

  1. 64位大内存虚拟机Page File的存放位置
  2. matlab如何求传递函数的幅值_自动控制原理2.2.1 什么是传递函数,为什么要使用传递函数的概念...
  3. python hashlib模块
  4. [翻译]Axure-Basic Interactions-原型设计工具Axure学习-第1.3节
  5. Luogu 2827 [NOIP2016] 蚯蚓
  6. SDL播放音频的时候发现SDL_OpenAudioDevice打开一直失败
  7. Java 8中HotSpot选项的改进文档
  8. java map与set的区别_java 集合(list,set,map)三者之间的关系和区别
  9. TransR:实体和关系分开嵌入(知识图谱嵌入)2015 AAAI
  10. zabbix监控Linux系统服务
  11. 百度云存储教程---免费建立自己的静态网站
  12. android 维语 字体,维语字体手机版下载-维吾尔文字体apk下载 v2.0 安卓版-IT猫扑网...
  13. 怎样查看sql服务器日志文件,怎么通过sql日志,查看以前执行过的sql语句
  14. VMware Tools手动安装
  15. 详细vue脚手架安装教程
  16. 全面屏下的沉浸式状态栏的返回键、home键、菜单键的显示。
  17. canvas乱码的处理
  18. 在Excel中选取一行中的最大数值进行标题匹配
  19. BurpSuite实战十九之XSS检测实战
  20. 关于正交矩阵的二三事

热门文章

  1. 【ACM/webank】#491.递增子序列(使用HashSet来记录并防止重复子序列)
  2. 惠普笔记本计算机无法启,hp手提电脑无法启动
  3. C++ 输出颜色字体
  4. photoshop制作html,用Photoshop制作好的网页模板再来用dreamweave制作出html的简单教程...
  5. 大学生申请创新创业训练计划项目之我见
  6. HDU 4218 IMBA?
  7. 全能终端神器 MobaXterm 学习与使用
  8. 象棋棋霸2006 v5.1 五合一免费版 怎么用
  9. Django学习:用RGF创建一个简单的网页框架!(实用性感觉很强!!)
  10. 特斯拉Model 3 Key Card里的黑科技