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
最新文章
- jQuery入门(4)jQuery中的Ajax应用
- paip.python错误解决23
- AngularJS快速入门指南01:导言
- XML Namespace 命名空间
- leetcode:Rotate Array
- poj 1581 A Contesting Decision
- nyoj 168 房间安排(区间覆盖)
- 数据库(学习整理)----7--Oracle多表查询,三种join连接
- c++ 控制台流和字符串流
- 《Python简明教程》总结
- Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
- mxml日期显示使用
- c++异常处理第四篇---不使用try catch语句,使用Loki::ScopeGuard
- JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果
- for循环中执行setTimeout问题
- Tomcat8远程访问manager,host-manager被拒绝403
- [再寄小读者之数学篇](2014-06-22 发散级数 [中国科学技术大学2012年高等数学B考研试题])
- tiny4412--linux驱动学习(1)
- MySQL中间件之ProxySQL(2):初试读写分离
- 关于x-shell连接不上本地虚拟机linux
热门文章
- html2canvas JS截图插件
- 大牛就别进来了.npm --save-dev --save 的区别
- js算法之把一个数组按照指定的数组大小分割成若干个数组块
- [转]10 Tips for Learning a New Technology
- 取消 ios 上下滑动
- 关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 转
- netcore进程内(InProcess)托管和进程外(out-of-Process)托管
- 【vue】openshopping-vue
- 09安装运行redis-trib.rb所需的环境
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]