一、背景和问题

默认情况下只有当单个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

最新文章

  1. jQuery入门(4)jQuery中的Ajax应用
  2. paip.python错误解决23
  3. AngularJS快速入门指南01:导言
  4. XML Namespace 命名空间
  5. leetcode:Rotate Array
  6. poj 1581 A Contesting Decision
  7. nyoj 168 房间安排(区间覆盖)
  8. 数据库(学习整理)----7--Oracle多表查询,三种join连接
  9. c++ 控制台流和字符串流
  10. 《Python简明教程》总结
  11. Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
  12. mxml日期显示使用
  13. c++异常处理第四篇---不使用try catch语句,使用Loki::ScopeGuard
  14. JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果
  15. for循环中执行setTimeout问题
  16. Tomcat8远程访问manager,host-manager被拒绝403
  17. [再寄小读者之数学篇](2014-06-22 发散级数 [中国科学技术大学2012年高等数学B考研试题])
  18. tiny4412--linux驱动学习(1)
  19. MySQL中间件之ProxySQL(2):初试读写分离
  20. 关于x-shell连接不上本地虚拟机linux

热门文章

  1. html2canvas JS截图插件
  2. 大牛就别进来了.npm --save-dev --save 的区别
  3. js算法之把一个数组按照指定的数组大小分割成若干个数组块
  4. [转]10 Tips for Learning a New Technology
  5. 取消 ios 上下滑动
  6. 关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 转
  7. netcore进程内(InProcess)托管和进程外(out-of-Process)托管
  8. 【vue】openshopping-vue
  9. 09安装运行redis-trib.rb所需的环境
  10. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]