Перенос сегментов ceph новому пользователю с нулевым временем простоя

#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/*"
    ]
  }]
}