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