#ceph #radosgw
Вопрос:
У меня есть ведро 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
операция должна проходить по каждому отдельному объекту в корзине, чтобы обновить метаданные. Это приводит к длительному периоду простоя (иногда 1 час на миллион объектов, по-видимому), когда ни старый пользователь, ни новый пользователь не могут получить доступ к полному содержимому корзины.
Есть ли какой-либо способ изменить владельца корзины, который не требует простоя? Некоторые идеи:
- Возможно ли, чтобы ведро или определенные объекты принадлежали двум пользователям одновременно?
- Можем ли мы создать нового пользователя, а затем просто изменить его
uid
или какую-либо другую часть метаданных, которая предоставляет им доступ к ведру старого пользователя? - Может ли проблема быть решена на стороне клиента или, может быть, с помощью прокси-сервера?
Ответ №1:
Вы можете добавить политику корзины в корзину, чтобы получить доступ к обоим пользователям, пока миграция не будет выполнена chown
командой:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam:::user/user1", "arn:aws:iam:::user/user2"]},
"Action": "*",
"Resource": [
"arn:aws:s3:::bigbucket/*"
]
}]
}