概述
近期遇到一个故障环境,因为某些原因,导致集群原有zone、zonegroup等信息丢失(osd,pool等状态均健康)。原有桶和数据无法访问,经过一些列fix后修复, 记录过程
恢复realm和pool相关信息
重新初始化realm
radosgw-admin realm create --rgw-realm=zzrealm --default
创建zonegroup
radosgw-admin zonegroup create --rgw-realm=zzrealm --rgw-zonegroup=zzzonegroup --master --default
创建zone
radosgw-admin zone create --rgw-realm=zzrealm --rgw-zonegroup=zzzonegroup --rgw-zone=zzzone --master --default
如果realm,zonegroup以及zone和之前创建过程一样,则使用的indexpool和datapool和之前一致。如果发生了变化,则需要重新指定对应的池。
radosgw-admin zone placement modify --placement-id=default-placement --data-pool data-pool --index-pool index-pool
重启rgw实例
systemctl restart ceph-radosgw@.target
至此,索引和桶信息等数据恢复完成,通过s3cmd和s3browser都可以看到桶列表。
但访问桶内数据时候会报错。
ERROR: S3 error: 301 (Moved Permanently)
恢复旧桶的zonegroup id
虽然旧的桶无法访问,但仍可以创建新桶和访问新桶内数据,我们新建一个桶testnew。底层查看桶信息
radosgw-admin bucket stats --bucket=""
发现新桶和旧桶的zonegroup id不一致。
获取旧桶的桶id
radosgw-admin metadata get bucket:test
其中bucket_id的行就是桶id
导出旧桶配置
其中同名后面的一大长串为上一步查询的桶id
radosgw-admin metadata get bucket.instance:testnew:6a3071ed-d182-4bdd-9398-ab21f6bf4f9d.24280.7>> testnew.json
修改桶配置json文件
找到zonegroup这一行,编辑修改为与新桶一直,即新的zonegroup id。
桶配置json导回到桶
radosgw-admin metadata put bucket.instance:testnew:6a3071ed-d182-4bdd-9398-ab21f6bf4f9d.24280.7<testnew.json
然后重启rgw实例
至此完成数据访问恢复。