以零停机时间将 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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...