ceph PGs per Pool Calculator

原文档:http://xiaqunfeng.cc/2017/09/18/ceph-PGs-per-Pool-Calculator/

2017-09-18

根据集群相关信息计算每个pool的pg数量。

在前一篇文章too-many-PGs-per-OSD中,简单讲了pg数目的设定,这里再深入介绍一下计算方法。

计算PG Count的公式

1
PoolPGCount=(TargetPGsPerOSD ∗ OSDNumber ∗ DataPercent) / PoolReplicateSize

参数

参数名称 参数释义 备注
PoolPGCount 该pool的PG数量  
TargetPGsPerOSD 每个OSD的PG数量 该值根据如下规则来进行设置:
1. 如果未来集群的OSD数量基本不再增长,Target PGs per OSD =100 
2. 如果未来集群的OSD数量可能增长到目前规模的2倍以内,Target PGs per OSD =200
3. 如果未来集群的OSD数量增长规模大于当前2倍且小于3倍,Target PGs per OSD =300
OSDNumber OSD数目 默认是所有的OSD, 具体看OSD所属的rule
一般会通过CRUSH rules划分SSD和SATA两个ruleset,此时单独填写pool所在的对应rule的OSD数量
DataPercent 该pool占用所在OSD集群容量百分比 需要预估
PoolReplicateSize 该pool的副本数 replicate size,默认是3
如果是EC pool,该值为 m+n

结果取值

1、如果上述计算结果小于 OSDNumber/PoolReplicateSize ,那就使用值 OSDNumber/PoolReplicateSize 。这是为了确保每个Pool的每个OSD至少分配一个Primary或Secondary PG来确保均匀加载/数据。

2、计算的最终结果应该是与计算结果相邻的2的幂次方。

采用2的幂次方是因为了提高CRUSH算法的效率

3、如果结果超过较小2次幂数值的25%则选择较大的2次幂作为最终结果,反之则选择较小的那个2次幂数值。

目的

1、计算公式的目的是为了确保整个集群拥有足够多的PG从而实现数据均匀分布在各个OSD上,同时能够有效避免在Recovery 和Backfill 的时候因为PG/OSD比值过高所造成的问题。

2、如果集群中存在空pool或者其他non-active的pool,这些pool并不影响现有集群的数据分布,但是这些pool仍然会消耗集群的内存和CPU资源。

官网参考信息:http://ceph.com/pgcalc/

每个pool pg数计算的更多相关文章

  1. PG数计算

    PG数计算 原地址:http://xiaqunfeng.cc/2017/09/15/too-many-PGs-per-OSD/ ceph告警问题:”too many PGs per OSD” 的解决方 ...

  2. Ceph之PG数调整

    1. PG介绍 PG, Placement Groups.CRUSH先将数据分解成一组对象,然后根据对象名称.复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID.可以将PG看做一个逻辑 ...

  3. 调整ceph的pg数(pg_num, pgp_num)

    https://www.jianshu.com/p/ae96ee24ef6c 调整ceph的pg数 PG全称是placement groups,它是ceph的逻辑存储单元.在数据存储到cesh时,先打 ...

  4. ACM Fibonacci数 计算

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...

  5. js-小数计算问题

    先上图: 什么情况? 原因:js采用二进制进行小数计算 先看十进制的小数转换为二进制的方法: 十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位 假如我们有小数111.4(10), ...

  6. 查询osd上的pg数

    本文中的命令的第一版来源于国外的一个博客,后面的版本为我自己修改的版本 查询的命令如下: ceph pg dump | awk ' /^pg_stat/ { col=1; while($col!=&q ...

  7. PHP PDO select语句结果行数计算

    PDO有一个函数PDOStatement::rowCount返回上一个SQL语句影响的行数. rowCount函数对于DELETE, INSERT, 或者UPDATE语句的结果是正确的,但对于sele ...

  8. CNN中的卷积操作的参数数计算

    之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积.比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8* ...

  9. Catalan数计算及应用

    Catalan数列是非常奇妙的一列数字,因为很多问题的解就是一个Catalan数.知道了这一规律,很多看似复杂的问题便可迎刃而解.那么什么是Catalan数,什么样的问题的解是Catalan数呢? 1 ...

随机推荐

  1. gopls替换hover文档

    一直在用vscode来开发golang程序,也一直在用 gopls语言服务器,也一直用鼠标悬浮显示函数的文档. 今天 偶然关闭了 gopls,然后 鼠标悬浮后,发现了 新大陆,nima,gopls的 ...

  2. shell脚本0——”一切皆文件“, 认识Shell

    一.”一切皆文件“与“管道” 1)管道:grep foo /path/to/file | grep -n -k 3 | more 实际过程与我们直观认为的相反,最好通过实际过程理解.首先运行的是mor ...

  3. [转发]CSR8670的DFU功能

    本文源自:https://blog.csdn.net/wzz4420381/article/details/52371409 作者:RyomaWang 申明:为了保持原作者内容,这里不进行任何修改,后 ...

  4. IE6下CSS常见兼容性问题及解决方案

    1. 在IE6元素浮动,如果宽度需要内容撑开,就给里面的块元素加浮动. 2. IE6下最小高度问题:在IE6下元素高度小于19px的时候,会被当作19px处理.解决方案:给元素加 overflow:h ...

  5. 物联网架构成长之路(47)-利用GitLab实现CI持续集成

    0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...

  6. python CGI编程-----简单的本地使用(1)

    本章节需要安装python开发工具,window平台安装地址:https://www.python.org/downloads/windows/,linux安装地址:https://www.pytho ...

  7. Asp.Net Core下使用swagger生成api文档

    目录 一.前期准备 二.配置Swagger 三.参考 .Net Core中有两个集成NSwag的包,分别为Swashbuckle和NSwag.两者的配置大同小异.这里以NSwag为例. 一.前期准备 ...

  8. RESTful API的理解

    技术交流的时候遇到了这样的一个问题,被问及开发中用到的是不是Restful API,我说的是,我们现在用到的不属于完全是Restful API.因为我了解到的Restful API,是 通过具体的UR ...

  9. Netty网络框架

    Netty网络框架 Netty是一个异步的基于事件驱动的网络框架. 为什么要使用Netty而不直接使用JAVA中的NIO 1.Netty支持三种IO模型同时支持三种Reactor模式. 2.Netty ...

  10. c# 基于DataTable的Compute方法的扩展

    DataTable.Compute(String, String) 方法 定义 命名空间:System.Data 程序集:System.Data.dll, netstandard.dll, Syste ...