Удаление объекта в OpenStack Swift

Вопрос или проблема

Удаление объекта в OpenStack Swift

Официальный документ Swift говорит:

Чтобы реплицировать удаления наряду с созданием, каждая удаленная запись или файл в системе помечается «памятной плитой». Процесс репликации очищает памятные плиты по истечении времени, известного как окно согласованности. Это окно определяет продолжительность репликации и то, как долго временная ошибка может удалить узел из кластера. Очистка памятных плит должна быть связана с репликацией, чтобы достичь согласования реплик.

https://docs.openstack.org/swift/latest/admin/objectstorage-replication.html

Мне интересно:

  1. Что произойдет, если узел хранения все еще не знает об удалении (другими словами, объект на узле не помечен памятной плитой) после истечения времени окна согласованности? Предположим, что этот узел временно не может связаться с другими из-за сетевой проблемы.
  2. Когда он снова станет доступен, объект будет реплицирован на другие узлы, не так ли?
  3. Каково решение?

Ответ или решение

В OpenStack Swift процесс удаления объектов и управления их жизненным циклом продуман с учётом необходимости обеспечения согласованности данных в распределенной системе. При удалении объектов система помечает их с помощью «тумбстоунов», что позволяет другим узлам знать о том, что объект был удалён, даже если они не получили это обновление сразу.

На ваши вопросы отвечу подробно:

  1. Что произойдет, если узел хранения всё ещё не знает о удалении (то есть объект на узле не отмечен тумбстоуном) после истечения окна согласованности?

    Если после истечения окна согласованности узел не был проинформирован о том, что объект был удален, и всё ещё содержит его в своём хранилище, то в процессе репликации этот узел может сохранить «устаревшую» версию объекта. Если другие узлы уже отметили этот объект как удалённый (то есть отмечен тумбстоуном), то при попытке синхронизации данных после восстановления связи узел, который не знал о.delete, будет возвращать объект обратно в систему.

  2. Когда узел станет доступен снова, объект будет реплицирован на другие узлы, не так ли?

    Да, вы правы. Как только восстановится соединение, узел, который не знал о удалении, начнёт процесс синхронизации. Если в системе все другие узлы отметили объект как удаленный (то есть зафиксировали тумбстоун), то процесс репликации может не допустить возвращения объекта. Однако, если в процессе репликации данные не будут согласованы должным образом, в результате этого узел с устаревшими данными может инициировать репликацию объекта обратно, если механизм не обработает тумбстон в соответствии с заранее определенными правилами.

  3. Какое решение?

    Решение этой проблемы заключается в правильной конфигурации и использовании механизма согласованности и репликации Swift. Вот несколько рекомендаций:

    • Настройка времени окна согласованности: Оптимизируйте время окна согласованности, чтобы оно соответствовало вашим требованиям. Более короткое окно может уменьшить вероятность, что данные будут недоступны, но может увеличить нагрузку на систему.
    • Мониторинг и поддержка связи: Проведение мониторинга состояния узлов и обеспечение надежного сетевого соединения между ними поможет поддерживать актуальность данных.
    • Регулярные проверки: Используйте регулярные проверки состояния объектов, чтобы убедиться, что все данные правильно реплицируются и тумбстоны указывают на корректное состояние объектов.
    • Конфигурация для преемственности: Настройте параметры конфигурации для управления поведением узлов в отношении тумбстонов и репликации, чтобы предотвратить дублирование данных или их неверную синхронизацию.

Используя эти рекомендации, вы сможете обеспечить требуемую согласованность и избежать проблем с возвратом уже удаленных объектов в систему. Разумеется, важно вести документацию и следить за обновлениями, чтобы быть в курсе последних изменений в архитектуре Swift и любых процессах, касающихся управления данными.

Оцените материал
Добавить комментарий

Капча загружается...