zoukankan      html  css  js  c++  java
  • Ceph之PG数调整

    1. PG介绍

    PG, Placement Groups。CRUSH先将数据分解成一组对象,然后根据对象名称、复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID。可以将PG看做一个逻辑容器,这个容器包含多个对象,同时这个逻辑对象映射之多个OSD上。
    如果没有PG,在成千上万个OSD上管理和跟踪数百万计的对象的复制和传播是相当困难的。没有PG这一层,管理海量的对象所消耗的计算资源也是不可想象的。建议每个OSD上配置50~100个PG。

    2. 计算PG数

    一般的,

    Ceph集群中的PG总数:

    PG总数 = (OSD总数 * 100) / 最大副本数

    ** 结果必须舍入到最接近的2的N次方幂的值。

    Ceph集群中每个pool中的PG总数:

    存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数

    平衡每个存储池中的PG数和每个OSD中的PG数对于降低OSD的方差、避免速度缓慢的恢复再平衡进程是相当重要的。

    3. 修改PG和PGP

    PGP是为了实现定位而设置的PG,它的值应该和PG的总数(即pg_num)保持一致。对于Ceph的一个pool而言,如果增加pg_num,还应该调整pgp_num为同样的值,这样集群才可以开始再平衡。
    参数pg_num定义了PG的数量,PG映射至OSD。当任意pool的PG数增加时,PG依然保持和源OSD的映射。直至目前,Ceph还未开始再平衡。此时,增加pgp_num的值,PG才开始从源OSD迁移至其他的OSD,正式开始再平衡。PGP,Placement Groups of Placement。

    1.获取现有的PG数和PGP数值:

    ceph osd pool get data pg_num
    ceph osd pool get data pgp_num

    2.检查存储池的副本数或纠删码配置

    ceph osd dump|greo -i size
    纠删码池的 size 即为k+m

    3.计算pg_num和pgp_num

    # pg_num calculation
    pg_num = (num_osds * 100) / num_copies
    num_up = pow(2, int(log(pg_num,2) + 0.5))
    num_down = pow(2, int(log(pg_num,2)))
    if abs(pg_num - num_up) <= abs(pg_num - num_down):
        pg_num = num_up
    else:
        pg_num = num_down
    pgp_num = pg_num
    

    4.修改存储池的PG和PGP

    ceph osd pool set data pg_num <pg_num>
    ceph osd pool set data pgp_num <pgp_num>

    5.同样,修改另外两个存储池:metadata和rbd的PG和PGP

    4. 集群扩容对PG分布的影响

    场景数据迁移流程:

    扩容前 3 个 OSD, 4 个 PG
    扩容后 4 个 OSD, 4 个 PG

    扩容前:

    扩容后:

  • 相关阅读:
    WEB免费打印控件推荐
    json.net 反序列化
    PHP文件显示乱码
    ASP.NET服务开启后Session丢失的解决方法
    phpmyadmin 下载
    phpMyAdmin 错误 缺少 mysqli 扩展。请检查 PHP 配置
    解决IE6IE7下li上下间距
    获取IP地址方法
    Winform中DataGridView的DataGridViewCheckBoxColumn使用方法(选中与选不中)
    IIS配置PHP5.3配置完成后FastCGI Error14001 (0x800736b1)___解决方法
  • 原文地址:https://www.cnblogs.com/dengchj/p/10003534.html
Copyright © 2011-2022 走看看