bucket删除中的细节有哪些

29次阅读
没有评论

共计 2129 个字符,预计需要花费 6 分钟才能阅读完成。

bucket 删除中的细节有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

问题描述

社区群里有人说删除 bucket 以后还有部分数据残留,用的 ceph 10.2.x 版本做的验证

测试用例

from boto.s3.connection import S3Connection
import boto
conn = boto.connect_s3(
 aws_access_key_id =  ,
 aws_secret_access_key =  ,
 host =  s3.cephbook.com ,
 port = 80,
 is_secure = False,
 calling_format = boto.s3.connection.OrdinaryCallingFormat(),
 )
bucket = conn.create_bucket(foo)
#bucket.delete()

删除前

root@demohost:/home/user# rados ls -p rgw.root
.bucket.meta.foo:70af9a54-20bb-480b-92f4-cbdeef0b775c.217357.1

删除后

root@demohost:/home/user# rados ls -p rgw.root
.bucket.meta.foo:70af9a54-20bb-480b-92f4-cbdeef0b775c.217357.1 # 残留

原因分析

对 meta file 的删除操作需要根据是否开启了多集群同步来决定

# src/rgw/rgw_rados.cc
 op_ret = store- delete_bucket(s- bucket, ot);# 入口
 ....
 /* if the bucket is not synced we can remove the meta file */
 if (!is_syncing_bucket_meta(bucket)) {
 RGWObjVersionTracker objv_tracker;
 string entry = bucket.get_key();
 r= rgw_bucket_instance_remove_entry(this, entry,  objv_tracker);
 if (r   0) {
 return r;
 }
 /* remove bucket index objects*/
 map int, string ::const_iterator biter;
 for (biter = bucket_objs.begin(); biter != bucket_objs.end(); ++biter) { index_ctx.remove(biter- second);
 }
 }

满足下面 4 种情况是不会进行 meta file 的删除操作
当前 period 不是最新版本  zonegroup 为非 master zonegroup
当前集群只有单个 zonegroup,且只有一个 zone  当前 zone 不是 master zone

/**
 * Check to see if the bucket metadata could be synced
 * bucket: the bucket to check
 * Returns false is the bucket is not synced
 */
bool RGWRados::is_syncing_bucket_meta(rgw_bucket  bucket)
 /* no current period */
 if (current_period.get_id().empty()) {
 return false;
 }
 /* zonegroup is not master zonegroup */
 if (!get_zonegroup().is_master) {
 return false;
 }
 /* single zonegroup and a single zone */
 if (current_period.is_single_zonegroup(cct, this)   get_zonegroup().zones.size() == 1) {
 return false;
 }
 /* zone is not master */
 if (get_zonegroup().master_zone.compare(zone_public_config.id) != 0) {
 return false;
 }
 return true;
}

解决方案

rados 命令手工删除对应的 obj,但是要注意相应的 bucket 一定是不再需要的,最好是在多个集群上确认最终操作,确保数据一致性。

修改集群配置,满足上面 4 点需求之一。

最后非标准操作去删除 bucket 可能破坏底层数据一致性,起手无悔,一定要慎重。

看完上述内容,你们掌握 bucket 删除中的细节有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2129字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)