问题现象: 最近在研究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

 

cat set_bucket_meta.py
#!/usr/bin/env python import rados
import os
import json
import copy
import subprocess
import sys ceph_rgw_pool = ".rgw" def change_bucket_zonegroup(bucket, zgp):
print("radosgw-admin metadata get bucket:" + bucket)
me = os.popen("radosgw-admin metadata get bucket:" + bucket)
meta = json.loads(me.read())
id = meta['data']['bucket']['bucket_id']
print("radosgw-admin metadata get bucket.instance:" + bucket + ":" + id)
mei = os.popen("radosgw-admin metadata get bucket.instance:" + bucket + ":" + id)
imeta = json.loads(mei.read())
newmeta = copy.copy(imeta)
newmeta['data']['bucket_info']['zonegroup'] = zgp
stdin = json.dumps(newmeta)
print("radosgw-admin metadata put bucket.instance:" + bucket + ":" + id)
process = subprocess.Popen(['radosgw-admin', 'metadata', 'put', "bucket.instance:" + bucket + ":" + id], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
process.stdin.write(stdin)
process.stdin.close()
process.wait() def get_all_buckets():
me = os.popen("radosgw-admin bucket list");
return json.loads(me.read())
if __name__ == '__main__':
if sys.argv[1] == 'all':
for bk in get_all_buckets():
#print(bk)
change_bucket_zonegroup(bk, sys.argv[2])
#change_bucket_zonegroup('ivanwa','9affcd3e-c66c-48e4-b961-3a43a289268f')
else:
change_bucket_zonegroup(sys.argv[1],sys.argv[2]) #设置所有 bucket zone_group id
sudo python set_bucket_meta.py all 833a4781-0da0-4810-8f0c-4e6e00b15a1e #设置名为test 的bucket zone_group id
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. 如何用命令将本地项目上传到github

    一.Git终端软件安装 1.下载windows上git终端,类似shell工具,下载地址:http://msysgit.github.io/ 2.安装方法,打开文件,一路点击Next即可 3.安装完成 ...

  2. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  3. Node.js调用C#代码

    在Node.js的项目中假如我们想去调用已经用C#写的dll库该怎么办呢?在这种情况下Edge.js是一个不错的选择,Edge.js是一款在GitHub上开源的技术,它允许Node.js和.NET c ...

  4. 《.NET 设计规范》第 8 章:使用规范

    第 8 章:使用规范 8.1 数组 要在公共 API 中优先使用集合,避免使用数组. 不要使用只读的数组字段.虽然字段本身是只读的,用户不能修改它们,但用户可以修改数组中的元素. 考虑使用不规则数组, ...

  5. Linux 下定时备份数据库以及删除缓存

    一.定时备份数据库 1.在根目录下创建备份文件夹 #mkdir backup 2.进入到该目录下,创建backup.sh文件 3.赋予文件权限让其变成可执行文件 4.在backup.sh中写备份的脚本 ...

  6. 【C++】bazel的使用

    bazel的使用 bazel是google开源的构建工具,可以支持多种语言的构建.这里来尝试一下如何在C++项目中使用bazel构建. 安装就不介绍了,在官网很详细,输入bazel --help: U ...

  7. 前段篇:HTML

    <!DOCTYPE html> 文件开头统一的标准! HTML包含了两部分: head与body  固定的格式. 一.head部分: head部分分为两部分:meta标签与非meta标签: ...

  8. 如何将top命令输出重定向为文件

    命令: # top -b -n 2 -d 3 > /tmp/top.out 解析: -b: batch 模式,可以重定向到文件中 -n:一共取2次top数据 -d:每次top数据间隔为3秒

  9. codechef Dynamic GCD [树链剖分 gcd]

    Dynamic GCD 题意:一棵树,字词树链加,树链gcd 根据\(gcd(a,b)=gcd(a,a-b)\) 得到\(gcd(a_1, a_2, ..., a_i) = gcd(a_1, a_1- ...

  10. SynchronousQueue 的联想

    SynchronousQueue介绍 SynchronousQueue是一种阻塞队列,该队列没有任务的容量.内部实现采用了一种性能更好的无锁算法. 代码实现里的Dual Queue,其中每一个put对 ...