专栏首页Ceph对象存储方案RGW Bucket Shard设计与优化-中

RGW Bucket Shard设计与优化-中

如何缓解 index shard 过大造成的影响

下面这些都是属于应急操作,属于快速止血止痛,部分操作属高危,一定要谨慎使用。

1

调整OSD的几个op超时参数

下面的几个参数只是用例,具体根据各位线上情况进行调整,但是不宜过大。

  osd_op_thread_timeout = 90 #default is 15
  osd_op_thread_suicide_timeout = 300 #default is 150

  filestore_op_thread_timeout = 180 #default is 60
  filestore_op_thread_suicide_timeout = 300 #default is 180

  osd_scrub_thread_suicide_timeout = 300 #如果出现scrub导致的op超时可以适当增加这个

2

压缩OSD的OMAP目录

在可以停OSD的情况下,可以对OSD进行compact操作,推荐在ceph 0.94.6以上版本,低于这个版本有bug。 https://github.com/ceph/ceph/pull/7645/files

1. 开启noout操作
ceph osd set noout

2. 停OSD服务
systemctl stop ceph-osd@<osd-id> 或者
/etc/init.d/ceph stop osd.<osd-id>

3. 检查osd进程
ps -ef| grep "id <osd_id>"

4. 在ceph.conf中对应的[osd.id]加上下面配置
leveldb_compact_on_mount = true

5. 启动osd服务
systemctl start ceph-osd@<osd-id> 或
/etc/init.d/ceph start osd.<osd-id>

6. 确认进程运行中
ps -ef| grep "id <osd-id>"

7. 使用ceph -s命令观察结果,最好同时使用tailf命令去观察对应的OSD日志.
等所有pg处于active+clean之后再继续下面的操作

8. 确认compact完成以后的omap大小:
du -sh /var/lib/ceph/osd/ceph-$id/current/omap

9. 删除osd中临时添加的leveldb_compact_on_mount配置

10. 取消noout操作(视情况而定,建议线上还是保留noout):
ceph osd unset noout

3

对bucket做reshard操作

对bucket做reshard操作,可以实现调整bucket的shard数量,实现index数据的重新分布。 仅支持ceph 0.94.10以上版本,需要停bucket读写,有数据丢失风险,慎重使用,出了问题本人概不负责。

注意下面的操作一定要确保对应的bucket相关的操作都已经全部停止,之后使用下面命令备份bucket的index

radosgw-admin bi list --bucket=<bucket_name> > <bucket_name>.list.backup

通过下面的命令恢复数据
radosgw-admin bi put --bucket=<bucket_name> < <bucket_name>.list.backup

查看bucket的index id

root@demo:/home/user# radosgw-admin bucket stats --bucket=bucket-maillist
{
    "bucket": "bucket-maillist",
    "pool": "default.rgw.buckets.data",
    "index_pool": "default.rgw.buckets.index",
    "id": "0a6967a5-2c76-427a-99c6-8a788ca25034.54133.1", #注意这个id
    "marker": "0a6967a5-2c76-427a-99c6-8a788ca25034.54133.1",
    "owner": "user",
    "ver": "0#1,1#1",
    "master_ver": "0#0,1#0",
    "mtime": "2017-08-23 13:42:59.007081",
    "max_marker": "0#,1#",
    "usage": {},
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}


Reshard对应bucket的index操作如下:

使用命令将"bucket-maillist"的shard调整为4,注意命令会输出osd和new两个bucket的instance id
root@demo:/home/user# radosgw-admin bucket reshard --bucket="bucket-maillist" --num-shards=4
*** NOTICE: operation will not remove old bucket index objects ***
***         these will need to be removed manually             ***
old bucket instance id: 0a6967a5-2c76-427a-99c6-8a788ca25034.54133.1
new bucket instance id: 0a6967a5-2c76-427a-99c6-8a788ca25034.54147.1
total entries: 3


之后使用下面的命令删除旧的instance id

root@demo:/home/user# radosgw-admin bi purge --bucket="bucket-maillist" --bucket-id=0a6967a5-2c76-427a-99c6-8a788ca25034.54133.1

查看最终结果
root@demo:/home/user#  radosgw-admin bucket stats --bucket=bucket-maillist
{
    "bucket": "bucket-maillist",
    "pool": "default.rgw.buckets.data",
    "index_pool": "default.rgw.buckets.index",
    "id": "0a6967a5-2c76-427a-99c6-8a788ca25034.54147.1", #id已经变更
    "marker": "0a6967a5-2c76-427a-99c6-8a788ca25034.54133.1",
    "owner": "user",
    "ver": "0#2,1#1,2#1,3#2",
    "master_ver": "0#0,1#0,2#0,3#0",
    "mtime": "2017-08-23 14:02:19.961205",
    "max_marker": "0#,1#,2#,3#",
    "usage": {
        "rgw.main": {
            "size_kb": 50,
            "size_kb_actual": 60,
            "num_objects": 3
        }
    },
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}

4

关闭pool的scrub和deep-scrub

Jewel以上版本可用

使用下面的命令开启pool的noscrub和deep-scrub
# ceph osd pool set <pool-name> noscrub 1
# ceph osd pool set <pool-name> nodeep-scrub 1

使用下面命令确认配置
# ceph osd dump | grep <pool-name>
pool 11 'pool-name' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 800 flags hashpspool,noscrub,nodeep-scrub stripe_width 0

取消pool的noscrub和deep-scrub设置
# ceph osd pool set <pool-name> noscrub 0
# ceph osd pool set <pool-name> nodeep-scrub 0

5

抢修因omap过大导致的OSD无法启动问题

本文分享自微信公众号 - Ceph对象存储方案(cephbook),作者:秦牧羊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Luminous下删除和新建OSD的正确姿势

    L版本开始极大的降低了对运维操作复杂度,新增了很多命令去确保数据安全,很多新手在删除OSD的时候很容易忽视了集群PGs的状态最终导致数据丢失,因此官方加入以下几...

    用户1260683
  • 源码解读bucket 删除中的一些细节

    问题描述 社区群里有人说删除bucket以后还有部分数据残留,用的ceph 10.2.x版本做的验证 测试用例 from boto.s3.connection ...

    用户1260683
  • 对象存储基础概念

    对象存储诞生之初 谈到为什么要有对象存储,必须聊聊对象存储诞生之前的两大存储模型:块存储和文件存储。 块存储主要是将存储介质的空间整个映射给主机使用的,主机如果...

    用户1260683
  • 反作弊如何检测系统仿真(1)

    作为我们的第一篇文章介绍了检测VMM是否存在的各种方法,无论是商业的还是定制的,我们都希望做到透彻并将其与我们对流行的反作弊厂商的研究联系起来。首先,对于游戏黑...

    franket
  • 浅谈EditText控件的inputType类型

    听着music睡
  • 浅谈EditText控件的inputType类型

    听着music睡
  • 电商网站主站(首页)怎么做

    一个常见的网站结构如下图。用户请求网站URL,nginx服务器负责负载均衡,将请求路由到具体的业务服务器tomcat;根据具体的业务需求,请求后端的相关服务(s...

    普通程序员
  • 科技改变生活,智能汽车的未来并不遥远

    想象一下这样一个场景:当酷热的夏日,车内温度过高时,汽车会自动开启空调降温。到了饭点,汽车在即将到达一家合乎自己的口味的餐馆的时候告知车主:“前方有一家餐馆比较...

    企鹅号小编
  • 11连胜!绝艺横扫中美日韩对手,称霸围棋AI世界大战

    历时一个多月的艰苦鏖战,来自中国、日本、韩国、比利时、美国等国的11个顶级围棋AI,捉对厮杀、层层晋级,王者争霸战今日落幕。

    量子位
  • FPGA系统性学习笔记连载_FPGA Zynq HDMI接口通信连接电视显示

    本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主。

    FPGA技术江湖

扫码关注云+社区

领取腾讯云代金券