zoukankan      html  css  js  c++  java
  • Ceph 之Multisite 下的bucket reshard

    一、背景和问题

    默认情况下只有当单个bucket承载的object数量过多,导致omap过大会导致性能问题。在L 版之前需要线下reshard,从L 版开始支持线上自动reshard,默认rgw dynamic resharding 是开启的。但是在开启了Multisite的情况下,一旦对bucket进行了reshard操作,则会破坏原有的元数据对应规则,导致对应的bucket无法进行数据同步。所以L 版在后面的一个pr 禁用了multisite 下自动的reshard1。multisite 对于omap 过大的问题,需要手动reshard,生产环境上有很大风险。所以事先规划好bucket 对象数上限和num_shard 是必要的。

    二、bucket reshard 过程

    主集群信息汇总

    查看当前集群状态:

    ## ceph -s
    

    查看当前主集群的存储桶列表:

    ## radosgw-admin bucket list
    

    在存储桶数量不多的情况下,依次查看各个存储桶的状态信息,重点关注num shards, num_objects

    ## radosgw-admin bucket stats --bucket=test1
    ## rados -p default.rgw.buckets.index ls|grep <bucket-id>
    

    获取IO 路径

    ## ceph osd map default.rgw.buckets.index .dir.a5ef9049-a15b-48b5-9a28-1692590e8752.24166.24.0   // 指定索引对象
    

    Multisite 下手动reshard

    1.查看主集群状态,确认同步完成,并没有新的写入:

    [master]# radosgw-admin sync status
    

    2.从集群检查

    [slave]# radosgw-admin sync status
    

    3.主集群上关闭对应bucket的sync

    [master]# radosgw-admin sync disable --bucket=test1
    [master]# radosgw-admin sync status --bucket=test1
    

    4.主、备集群停掉所有RGW 服务

    [master]# systemctl stop ceph-radosgw@rgw.`hostname -s`
    [slave]# systemctl stop ceph-radosgw@rgw.`hostname -s`
    

    5.主集群上的任意节点执行下面操作,手工对指定bucket 做reshard,记录对应的old bucket instance id:

    [master]# radosgw-admin bucket reshard --bucket=test1 --num-shards=<N>
    *** NOTICE: operation will not remove old bucket index objects ***
    *** these will need to be removed manually ***
    tenant:
    bucket name: test1
    old bucket instance id: e8921092-c7e8-42d8-80d1-5e83c25d5661.72254.1
    new bucket instance id: e8921092-c7e8-42d8-80d1-5e83c25d5661.72437.1
    total entries: 6
    

    6.从集群删除bucket所有数据,同时清除bucket

    [slave]# radosgw-admin bucket rm --purge-objects --bucket=test1
    [slave]# radosgw-admin bucket list
    

    7.主集群,删除旧bucket的bi信息

    [master# radosgw-admin bi purge --bucket-id="" --bucket=test1
    

    8.启动所有主、从节点上的rgw服务

    [master]# systemctl start ceph-radosgw@rgw.`hostname -s`
    [slave]# systemctl start ceph-radosgw@rgw.`hostname -s`
    

    9.主集群重新开启对应bucket的sync,等待主集群里面的数据慢慢同步回从集群

    [master]# radosgw-admin sync enable --bucket=test1
    [master]# radosgw-admin sync status --bucket=test1
    

    References

    1.https://github.com/ceph/ceph/pull/18184
    2.https://mp.weixin.qq.com/s/ckrYnvlOjQlta_JdryCauA
    3.https://cloud.tencent.com/developer/article/1400660
    4.https://cloud.tencent.com/developer/article/1378031

  • 相关阅读:
    Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
    android intent 跳转
    Android Intent 使用整理
    Android实现界面跳转
    android获取手机信息大全
    Android中实现Gallery 点击放大
    Android之TextView 详细字典
    Android发展简介
    如何成为Android高手
    系统测试阶段:
  • 原文地址:https://www.cnblogs.com/dengchj/p/11424644.html
Copyright © 2011-2022 走看看