1.  

问题现象: 最近在研究zonegroup的配置操作,发现在配置zonegroup后修改了default zone,导致访问对象报404错误。

问题原因:

rgw 日志 报异常’request for data in a different zonegroup ’

rgw源码:

https://github.com/ceph/ceph/blob/d346b1b83597644b4ce58bae4bc14629f69ef667/src/rgw/rgw_op.cc

结论: bucket的zonegroup字段和集群新的id不一致。

解决方案: 使集群和bucket的zone group 一致。

1.  旧的zonegroup还存在的情况下,设置default zone group 为旧的 default。 

2.  的zonegroup 删除的情况, 设置 dubbucket的zonegroup字段为新的zonegroup id。 可以使用如下工具批量设置bucket metadata ;注意要重启rgw 服务进程

主要配置命令:

radosgw-admin metadata get bucket:qtest3
radosgw-admin metadata get bucket.instance:qtest3:3d240698-79c4-4af0-abab-6b83b340a538.33547209.1 > conf.json
radosgw-admin metadata put bucket.instance:qtest3:3d240698-79c4-4af0-abab-6b83b340a538.33547209.1 < conf.json

 

  1. cat set_bucket_meta.py
  2. #!/usr/bin/env python
  3.  
  4. import rados
  5. import os
  6. import json
  7. import copy
  8. import subprocess
  9. import sys
  10.  
  11. ceph_rgw_pool = ".rgw"
  12.  
  13. def change_bucket_zonegroup(bucket, zgp):
  14. print("radosgw-admin metadata get bucket:" + bucket)
  15. me = os.popen("radosgw-admin metadata get bucket:" + bucket)
  16. meta = json.loads(me.read())
  17. id = meta['data']['bucket']['bucket_id']
  18. print("radosgw-admin metadata get bucket.instance:" + bucket + ":" + id)
  19. mei = os.popen("radosgw-admin metadata get bucket.instance:" + bucket + ":" + id)
  20. imeta = json.loads(mei.read())
  21. newmeta = copy.copy(imeta)
  22. newmeta['data']['bucket_info']['zonegroup'] = zgp
  23. stdin = json.dumps(newmeta)
  24. print("radosgw-admin metadata put bucket.instance:" + bucket + ":" + id)
  25. process = subprocess.Popen(['radosgw-admin', 'metadata', 'put', "bucket.instance:" + bucket + ":" + id], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  26. process.stdin.write(stdin)
  27. process.stdin.close()
  28. process.wait()
  29.  
  30. def get_all_buckets():
  31. me = os.popen("radosgw-admin bucket list");
  32. return json.loads(me.read())
  33. if __name__ == '__main__':
  34. if sys.argv[1] == 'all':
  35. for bk in get_all_buckets():
  36. #print(bk)
  37. change_bucket_zonegroup(bk, sys.argv[2])
  38. #change_bucket_zonegroup('ivanwa','9affcd3e-c66c-48e4-b961-3a43a289268f')
  39. else:
  40. change_bucket_zonegroup(sys.argv[1],sys.argv[2])
  41.  
  42. #设置所有 bucket zone_group id
  43. sudo python set_bucket_meta.py all 833a4781-0da0-4810-8f0c-4e6e00b15a1e
  44.  
  45. #设置名为test 的bucket zone_group id
  46. sudo python set_bucket_meta.py test 833a4781-0da0-4810-8f0c-4e6e00b15a1e

 参考:https://blog.widodh.nl/2013/11/changing-the-region-of-a-rgw-bucket/

CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法的更多相关文章

  1. Ceph 存储集群

    Ceph 存储集群 Ceph 作为软件定义存储的代表之一,最近几年其发展势头很猛,也出现了不少公司在测试和生产系统中使用 Ceph 的案例,尽管与此同时许多人对它的抱怨也一直存在.本文试着整理作者了解 ...

  2. 002.RHCS-配置Ceph存储集群

    一 前期准备 [kiosk@foundation0 ~]$ ssh ceph@serverc #登录Ceph集群节点 [ceph@serverc ~]$ ceph health #确保集群状态正常 H ...

  3. 003.Ceph扩展集群

    一 基础准备 参考<002.Ceph安装部署>文档部署一个基础集群. 二 扩展集群 2.1 扩展架构 需求:添加Ceph元数据服务器node1.然后添加Ceph Monitor和Ceph ...

  4. Ceph 存储集群 - 搭建存储集群

    目录 一.准备机器 二.ceph节点安装 三.搭建集群 四.扩展集群(扩容)   一.准备机器 本文描述如何在 CentOS 7 下搭建 Ceph 存储集群(STORAGE CLUSTER). 一共4 ...

  5. 一步一步安装配置Ceph分布式存储集群

    Ceph可以说是当今最流行的分布式存储系统了,本文记录一下安装和配置Ceph的详细步骤. 提前配置工作 从第一个集群节点开始的,然后逐渐加入其它的节点.对于Ceph,我们加入的第一个节点应该是Moni ...

  6. Ceph 存储集群5-数据归置

    一.数据归置概览 Ceph 通过 RADOS 集群动态地存储.复制和重新均衡数据对象.很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的 OSD 之上,所以 Ceph 的运营需要些 ...

  7. Ceph 存储集群1-配置:硬盘和文件系统、配置 Ceph、网络选项、认证选项和监控器选项

    所有 Ceph 部署都始于 Ceph 存储集群.基于 RADOS 的 Ceph 对象存储集群包括两类守护进程: 1.对象存储守护进程( OSD )把存储节点上的数据存储为对象: 2.Ceph 监视器( ...

  8. Ceph 存储集群 - 搭建存储集群---教程走到osd激活这一步执行不下去了,报错

    目录 一.准备机器 [1. 修改主机名](所有节点)(https://www.cnblogs.com/zengzhihua/p/9829472.html#1-修改主机名) [2. 修改hosts文件] ...

  9. 初试 Centos7 上 Ceph 存储集群搭建

    转载自:https://cloud.tencent.com/developer/article/1010539 1.Ceph 介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统 ...

随机推荐

  1. JavaSE基础篇—流程控制语句—方法的定义 调用和重载

    1.定义方法 是封装在一起来执行操作语句的集合,用来完成某个功能操作,简单的说就是提取出来的有特定功能的代码(程序).在某些语言中被称为函数或者过程,比较特殊的方法是main方法(主方法),main方 ...

  2. Asp.net core 2.0.1 Razor 的使用学习笔记(五)

    按说这里应该写关于Role角色类的笔记,但是我还没时间实验这块,所以等以后我搞定了再来分享.现在先写其他部分. Asp.net core 2.0.1 Razor 的使用学习笔记——建立模型 按照微软官 ...

  3. Java细节

    native关键字用法 native是与C++联合开发的时候用的!java自己开发不用的! 使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL, ...

  4. char a[]和char *a的比较

    指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作 为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是 ...

  5. spring之AspectJ基于xml AOP编程

    一.引言: AspectJ框架不仅实现了面向切面编程,而且还支持注解,spring将它引入自己的规范之中. 二.需要了解: AspectJ是基于java语言的AOP框架 spring2.0之后支持As ...

  6. Core Animation 文档翻译 (第八篇)—提高动画的性能

    前言 核心动画是提高基于APP动画帧率的好方式,但是核心动画的使用不代表性能的提升的保证.尤其在OSX,当使用核心动画时,我们仍需选择最有效的方式.和所有的性能相关的问题一样,我们应该使用工具时时的评 ...

  7. SSD trim及4k对齐

    trim可以帮助减小SSD的写放大WA问题,删除文件后不仅仅是将文件标记为删除,而是在SSD空闲的时候统一进行删除. Linux下的trim支持叫discard,修改fstab文件,在挂载参数中加上d ...

  8. es数据恢复杂记

    kill -9或者断电等原因异常,es在重启后,会通过translog来进行数据恢复. 默认的恢复速度是较慢的,可以设置indices.recovery.current_streams:10增大恢复的 ...

  9. Keil中搭建自动化单元测试框架Unity

    前言: 虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动 ...

  10. 游戏服务器设计之NPC系统

    游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...