zoukankan      html  css  js  c++  java
  • 每个pool pg数计算

    ceph PGs per Pool Calculator

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

    根据集群相关信息计算每个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/

  • 相关阅读:
    day3
    day2
    day1-存储
    day5-iptables
    MySQL之补充
    11.18
    11.17
    junit基础学习之-测试controller层(2)
    junit基础学习之-简介(1)
    外键和级联
  • 原文地址:https://www.cnblogs.com/flytor/p/11425363.html
Copyright © 2011-2022 走看看