如何解决以零停机时间将 ceph 存储桶迁移到新用户
我有一个包含数百万个对象的 ceph/radosgw 存储桶,我需要将存储桶的所有权更改为另一个用户。
通常,这是通过将存储桶link
传输给新用户,然后chown
传输其中的所有文件来完成的,如下所示:
radosgw-admin bucket unlink --uid=user1 --bucket=bigbucket
radosgw-admin bucket link --uid=user2 --bucket=bigbucket
radosgw-admin bucket chown --uid=user2 --bucket=bigbucket
不幸的是,chown
operation has to loop over every single object in the bucket 是为了更新元数据。这会导致停机时间延长(有时显然是每百万个对象 1 小时),旧用户和新用户都无法访问存储桶的全部内容。
有什么方法可以在不需要停机的情况下更改存储桶所有权?一些想法:
- 两个用户是否可以同时拥有一个存储桶或特定对象?
- 我们能否创建新用户,然后更改他们的
uid
或其他一些元数据,授予他们访问旧用户的存储桶的权限? - 问题可以在客户端解决,还是可以通过代理解决?
解决方法
您可以向存储桶添加存储桶策略以访问两个用户,直到通过 function squareDigits(num){
let digits = (""+num).split("");
let intDigits = [];
for (x of digits) {
intDigits.push(parseInt(x));
}
for (let i = 0; i < intDigits.length; i++) {
const x = intDigits[i];
console.log('intDigits: ' + intDigits);
console.log(` index of ${x} = ${i}`);
intDigits.splice(i,1,x * x);
}
return parseInt(intDigits.join(""));
}
console.log('RESULT: ' + squareDigits(24));
命令完成迁移:
chown
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。