共计 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 行业资讯频道,感谢各位的阅读!
正文完