Мультикластер
Общий принцип работы
МультикластерМультикластер - это режим работы Закрома.Хранение, когда отдельные инстансы кластера ЗАКРОМА объединяются в группу и образуют единое распределенное хранилище. Данное решение позволяет существенно увеличить надежность и производительность системы, а также построить свой собственный CDN.
Мультикластер обеспечивает высокую доступность: при отказе одного узла его функции перенимают на себя другие узлы мультикластера. Таким образом, бизнес-сервисы и приложения продолжают работать без остановки благодаря аппаратной избыточности. Чтобы построить отказоустойчивую структуру, требуется минимум два физических сервера с системами хранения данных. Каждый узел кластера - является отдельным инстансом Закрома.Хранение, которая получает и отправляет события с других кластеров для поддержания консистентности данных в системе. Каждый узел имеет свою базу данных. Kafka может быть у каждого отдельная, или общая, с правильной настройкой разных топиков.
Включение кластерного режима
Для включения кластерного режима необходимо подключить Kafka и настроить конфигурацию. Для более подробной настройки смотреть здесь.
Создание рабочей области в кластерном режиме
Обычное создание рабочей области происходит по инструкции создания рабочей области. Для обозначения рабочей области как мультикластерной, необходимо активировать признак Мультикластерная рабочая область
. В данной области объекты всех бакетов будут реплицироваться. В обычной рабочей области объекты реплицироваться не будут.
Обратите внимание, что при получении события о создании рабочей области с другого кластера, “хранилище по умолчанию” не будет установлено, при необходимости это нужно доностроить вручную.
Отображение мультикластерной рабочей области
В списке всех рабочих областей мультикластерная рабочая область отличается от обычной рабочей области специальным символом, расположенным справа от ее названия. При наведении на символ, отображается подсказка «Мультикластерная рабочая область».
В карточке рабочей области мультикластерная рабочая область имеет переключатель
Мультикластерная рабочая область
.
Переключатель всегда находится в заблокированном состоянии т.к изменить данный параметр после создания нельзя.
ВажноПри создании рабочей области в другом кластере, в текущем кластере создается рабочая область с пустым хранилищем по умолчанию. Если после создания такой рабочей области не было задано на текущем кластере хранилище по умолчанию вручную, то чтобы загружать файлы на текущий кластер, необходимо настроить политику хранения для бакета в текущем кластере вручную для созданного бакета из другого кластера. Для бакетов созданных в текущем кластере распространяются обычные правила создания политик хранения, eсли задано хранилище по умолчанию в рабочей области.
Создание бакета в кластерном режиме
Создание бакета не отличается от обычного создания бакета.
Политика хранения в другом кластереОбратите внимание, что при получении события о создании бакета с другого кластера, если у рабочей области было установлено “хранилище по умолчанию”, то автоматически создаётся политика хранения на это хранилище, если “хранилище по умолчанию” не было задано то политика не будет создана (не будет локального хранения) и при попытке пользователем скачать файл с бакета файлы будут скачиваться всегда с другого кластера, до тех пор пока бакет не будет донастроен добавлением политик хранения.
Отображение мультикластерного бакета
В списке бакетов рабочей области мультикластерный бакет отличается от обычного бакета специальным символом, расположенным справа от его названия. При наведении на символ, отображается подсказка «Мультикластерный bucket».
Особенности работы с политиками хранения кластера
Для каждого кластера политики хранения индивидуальны и настраиваются под каждый кластер отдельно.
Права, роли и s3 токены
В режиме кластера происходит синхронизация ролей, прав для рабочих областей и бакетов, а также s3 токенов для доступа к Закрома Хранение(aws_secret_access_key), генерация которых происходит на вкладке пользователя. Синхронизация происходит через топики Kafka.
Обмен сообщениями между кластерами, cинхронизация
Обмен сообщениями между кластерами происходит при помощи Kafka (распределённый программный брокер сообщений).
Добавление нового узлаПри добавлении нового узла вычитываются все сообщения из топиков, что позволяет добиться консистентности для нового созданного узла, а также консистености данных для уже существующих узлов, в которых при том или ином обстоятельстве произошел сбой (пример потеря интернет соединения).
ВажноНеобходимо учитывать два момента при создании нового узла: топик kafka не является бесконечным и время от времени удаляется, данный параметр настраивается в настройках топика кафки, в случае если какое-то важное событие было уже удалено - это может привести к неконсистентности данных (например, событие создания бакета [отсутствует в топике], а последующие события [находятся в топике] это загрузка файлов в данный бакет). Второй момент является что необходимо просмотреть уже созданные concumer-group в kafka и обязательно создавать уникальную concumer-group для нового узла, иначе чтение топика может начаться не с начала.
Кластерные вольюмы (Cluster Volume) и Ссылочные объекты
ГлоссарийСсылочный объект - это объект, который не храниться в текущем кластере, но хранится ссылка для получения его из другого кластера. Ссылочный вольюм (Cluster Volume) - это ссылка на раздел хранилища бакета в другом кластере.
Ссылочный объект создается, когда на другом кластере загружается объект, но на текущем кластере или нету политики хранения или объект еще не успел физически отреплицироваться на текущей узел мультикластера, из этого следует что, текущий файл есть на другом кластере и, при необходимости, можно будет получить файл с другого кластера. Для поддержания ссылочного объекта, при создании бакета создаются специальные ссылочные вольюмы, которые ссылаются на другие узлы мультикластера.
Синхронизация файлов между кластерами
Синхронизация, а точнее получение файлов с другого кластера и сохранение в локальном хранилище, происходит только в том случае, если к бакету привязано как минимум одно локальное хранилище(настроена политика хранения), иначе текущий кластер будет получать файл с другого кластера при попытке скачать файл пользователем.
Скачивание объектов
При запросе на скачивание объекта текущий кластер следует алгоритму:
- Если у него на локальном хранилище есть данный файл, то он будет пытаться отдать данный файл.
- Если файл не найден (не успел отреплицироваться), то будет использован ссылочный объект и попытка скачать объект из другого кластера.
- Если в кластере есть несколько ссылочных связей к объекту, то текущий кластер будет поочередно запрашивать файл из других кластеров, пока не получит успешный результат или не пройдет весь список других узлов мультикластера.
Механизм обрывания цикловЧтобы избежать циклов при скачивании, предусмотрен механизм обрывания циклов. Данный механизм позволяет оборвать цикл, если при запросе скачивания файла, текущий запрос уже был обработан текущим кластером.
Загрузка объектов
Загруженные объекты в текущем кластере реплицируются на другие кластера, если бакет работает в режиме “Мультикластерный bucket”. При загрузке объекта, это событие записывается в очередь сообщений в Kafka. Другие кластера вычитывают это сообщение и загружают к себе объект локально.
Важно убедитьсяПеред загрузкой объектов в новый бакет убедитесь, что бакет успел отреплицироваться на другие кластера. В противном случае, есть вероятность что событие загрузки объекта обработается вторым кластером раньше, чем событие создания нового бакета. В будущих релизах планируется улучшить поведение кластерного режима в этой части.