Конфигурация ZDS
Общая информация
Конфигурация задаётся для каждого узла и определяет:
- идентификацию узла и режим работы (
nodeName,mode, при необходимостиprotocolPrefix); - параметры логирования (
log); - внешний и внутренний HTTP API (
server,clusterServer); - настройки исходящего HTTP-клиента к другим узлам (
client); - схему хранения данных (
providersдля EC и FC); - фоновые процессы синхронизации, журнала, сканирования и восстановления (
workers); - расписание и состояние вакуума (
vacuum); - локальный реестр метаданных (
registry); - состав кластера (
nodes); - диски узла: пороги, бенчмарки и список точек монтирования (
drive).
При изменении конфигурации нужно учитывать связь между параметрами провайдеров, списком узлов и группами хранения на дисках.
Когда требуется настраивать конфигурацию
Настройка актуальна:
- при первичном развёртывании кластера;
- при добавлении узлов или дисков;
- при изменении сетевых адресов или TLS;
- при подборе производительности фоновых задач и ограничений клиента.
Изменения параметров схемы EC/FC, состава nodes и привязки дисков к группам хранения следует планировать отдельно и оценивать влияние на уже размещённые данные.
Обязательные параметры
Для согласованной работы кластера обычно задаются следующие группы параметров.
Параметры текущего узла
nodeName— имя текущего узла. Должно совпадать с одним из элементов спискаnodes(полеname).
Режим работы
mode— режим работы:ec.
Список узлов кластера
nodes— описание узлов кластера.
Для каждого элемента:
nodes[i].name— имя узла в кластере;nodes[i].driveCount— количество дисков на узле;nodes[i].hostPort— адрес и порт узла для внешних запросов;nodes[i].clusterHostPort— адрес и порт узла для внутренней коммуникации кластера (необязательный параметр).
Диски узла
drive.list— список монтируемых дисков/томов на данном узле.drive.defaultStorageClass— класс хранения по умолчанию для вольюмов, созданных без явного указания класса (необязательный параметр).
Для каждого элемента:
drive.list[i].index— индекс диска;drive.list[i].path— путь к директории хранения;drive.list[i].storageGroup— индекс группы хранения;drive.list[i].storageClass— класс хранения (необязательный параметр).
Параметры провайдеров хранения
В зависимости от режима и политики размещения задаётся секция providers:
Erasure coding (providers.ec):
dataPart— количество частей данных для кодирования;parityPart— количество частей чётности для восстановления;blockSize— размер блока в байтах для EC-кодирования;cleanup— удаление загруженных партов при неуспешной загрузке или восстановлении.
Full copy (providers.fc):
replicaCount— максимальное число реплик для групп хранения по умолчанию. Указывается, если EC отключён глобально (параметрыdataPartиparityPartне заданы);maxFullCopySize— максимальный размер файла в байтах, при котором используется FC;cleanup— удаление загруженных партов при неуспешной загрузке или восстановлении.
Параметры сервера
Внешний API узла:
server.host— хост для API сервера;server.port— порт для API сервера;server.accessKey— ключ доступа;server.secretKey— секретный ключ.
TLS (внешний API)
server.tls.enable— включение TLS (true/false);server.tls.key— путь к TLS-ключу (обязательно приenable=true);server.tls.crt— путь к TLS-сертификату (обязательно приenable=true).
Параметры внутреннего взаимодействия
Внутренний API для межузлового обмена:
clusterServer.host— хост для API внутренних взаимодействий кластера;clusterServer.port— порт этого API;clusterServer.accessKey— ключ доступа;clusterServer.secretKey— секретный ключ.
TLS (внутренний API)
clusterServer.tls.enable— включение TLS;clusterServer.tls.key— путь к ключу (при включённом TLS);clusterServer.tls.crt— путь к сертификату (при включённом TLS).
Межузловые запросы разумно направлять на выделенный внутренний порт, не смешивая их с внешним API.
Доступ к узлам и протокол
protocolPrefix— префикс протокола для доступа к узлам (по умолчаниюhttp://). Необязательный параметр.
Параметры HTTP-клиента
Настройки клиента при обращении к другим узлам:
client.maxIdleConnsPerHost— максимальное число неактивных соединений на хост;client.maxConnsPerHost— максимальное общее число открытых соединений на хост;client.timeout— таймаут на выполнение запроса;client.dialTimeout— таймаут на установку TCP-соединения;client.accessKey— ключ доступа;client.secretKey— секретный ключ.
Параметры кластера и фоновых процессов
Фоновая логика задаётся в секции workers.
Синхронизация узлов и томов (workers.nodeSync)
period— интервал выполнения запроса получения статуса внешнего узла (необязательный параметр);heartbeat— интервал выполненияheartbeat(необязательный параметр);statusReqTimeout— таймаут выполнения запроса статуса (необязательный параметр);volumeSyncPeriod— интервал выполнения синхронизации вольюмов (необязательный параметр);volumeSyncRetryPeriod— интервал ретрая при неуспешном запросе вольюмов с внешнего узла (необязательный параметр);volumeSyncReqTimeout— таймаут выполнения запроса вольюмов (необязательный параметр);destroyedVolumesCleanupPeriod— интервал, через который запись о вольюме со статусомDESTROYED, подтверждённым на всех узлах кластера, удаляется из реестра (необязательный параметр).
Обрезка журнала изменений (workers.changelogCut)
period— интервал выполнения проверки размера ченджлога (необязательный параметр);cutBatchCount— количество записей, удаляемых за одну операцию удаления (необязательный параметр);maxSize— максимальный размер ченджлога;cutSize— количество записей, удаляемое при переполнении с конца (в несколько операций поcutBatchCount).
Синхронизация ченджлога (workers.changelog)
period— интервал выполнения синхронизации ченджлога (необязательный параметр);workersCount— количество воркеров, выполняющих синхронизацию отдельных операций;syncBatchSize— размер пачки операций, обрабатываемой параллельно для каждого внешнего узла;operationsReqTimeout— таймаут выполнения запроса получения операций (необязательный параметр);metadataReqTimeout— таймаут выполнения запроса получения метаданных (необязательный параметр);fileReqTimeout— таймаут выполнения синхронизации файла (необязательный параметр).
Сканирование (workers.scan)
timeout— таймаут одного цикла сканирования (необязательный параметр);workersCount— количество воркеров, выполняющих локальное сканирование (необязательный параметр);queueCapacity— размер буфера канала очереди задач сканирования (необязательный параметр);schedule— расписание временных окон автозапуска. Сканирование запускается только внутри заданных окон, при выходе из окна останавливается и сохраняет checkpoint. Элементы могут включать:dayOfWeek— день недели (0 — воскресенье, 1 — понедельник и т.д., необязательный параметр);hour— час запуска, по умолчанию 0 (необязательный параметр);minute— минута запуска, по умолчанию 0 (необязательный параметр);second— секунда запуска, по умолчанию 0 (необязательный параметр).
Ручной запуск через
POST /admin/scan/startработает независимо от расписания и сбрасывает checkpoint. Подробнее см. API ZDS.
Восстановление (workers.repair)
timeout— таймаут на восстановление одного файла (необязательный параметр);workersCount— количество воркеров для восстановления повреждённых файлов (необязательный параметр).
Параметры реестра и журнала на диске
Секция registry задаёт локальное хранилище метаданных и параметры работы с журналом:
registry.path— путь для хранения данных регистра;registry.commitInterval— период автоматического коммита изменений;registry.batchLimit— максимальное число изменений в одном батче;registry.changelogListPageSize— число отдаваемых при листинге записей по каждой группе хранения.
Эти параметры влияют на синхронизацию и на восстановление состояния после сбоев.
Вакуум
vacuum.enabled— включение работы вакуума в технологические окна;vacuum.storePath— путь для хранения данных вакуума;vacuum.windows— список временных окон автозапуска. Вакуум запускается только внутри заданных окон, при выходе из окна останавливается и сохраняет checkpoint:days— список дней недели, в которые выполняется вакуум (0 — воскресенье, 1 — понедельник и т.д.);start— время начала окна;duration— длительность окна.
Ручной запуск через
POST /admin/vacuum/startработает независимо от расписания и сбрасывает checkpoint. Подробнее см. API ZDS.
Диски: пороги и бенчмарки
Общие параметры дисков:
drive.pingTimeout— таймаут выполнения операции пинга диска, после которого он переходит в ERROR (необязательный параметр);drive.capacityThreshold— минимальный процент свободного места по inode и вместимости, после которого диск перейдёт в FULL (0–100, необязательный параметр).
Бенчмарк перед инициализацией (drive.bench)
enabled— включение снятия бенчмарков перед инициализацией дисков (необязательный параметр);test_directory— директория, в которой будут создаваться файлы во время проведения бенчмарка (необязательный параметр);cleanup_after_benchmark— очищать директорию после проведения бенчмарка (необязательный параметр).
Последовательная запись (sequential_write):
enabled— включение бенчмарка на sequential write (необязательный параметр);file_size— размер файла для sequential write в байтах (необязательный параметр);block_size— размер одной операции записи в байтах (необязательный параметр);concurrency— количество одновременных горутин в бенчмарке (необязательный параметр).
Последовательное чтение (sequential_read):
enabled— включение бенчмарка на sequential read (необязательный параметр);file_size— размер файла для sequential read в байтах (необязательный параметр);block_size— размер одной операции чтения в байтах (необязательный параметр);concurrency— количество одновременных горутин в бенчмарке (необязательный параметр).
IOPS (iops):
enabled— включение бенчмарка на IOPS (необязательный параметр);duration— длительность бенчмарка на IOPS (необязательный параметр);file_size— размер файла для бенчмарка на IOPS в байтах (необязательный параметр);block_size— размер одной операции для бенчмарка на IOPS в байтах (необязательный параметр);concurrency— количество одновременных горутин в бенчмарке (необязательный параметр);random_access— использовать случайный или последовательный доступ для бенчмарка (необязательный параметр).
Дополнительные параметры
Логирование
log.format— формат вывода логов (text,json);log.level— уровень логирования (debug,info,warn,error);log.title— название сервиса в логах.
Пример конфигурации
Минимальный пример конфигурации приложения ZDS для запуска
1nodeName: zds-0.zds-headless:8080 2protocolPrefix: "http://" 3mode: "ec" 4log: 5 format: json
В примере не отражены все возможные необязательные поля (например, workers.scan.workersCount или clusterHostPort у узлов); их следует добавлять по необходимости.
Политики хранения групп (storagePolicyOverrides)
По умолчанию все группы хранения поддерживают как EC, так и FC политики. Параметр storagePolicyOverrides позволяет переопределить это поведение для конкретных групп.
Пример: отключить EC для группы хранения 2 и ограничить FC фактором репликации не более 4:
1storagePolicyOverrides: 2 - groups: [2] 3 policy: 4 allowEC: false 5 maxReplicas: 4
groups— список индексов групп хранения, для которых применяется переопределение.policy.allowEC— разрешить EC-политики для группы (trueпо умолчанию). При значенииfalseгруппа поддерживает только FC-политики.policy.maxReplicas— максимальный фактор репликации для группы. Обязателен, еслиallowEC: false. Доступный диапазон FC для группы: от1доmaxReplicas.
Для групп с включённым EC указывать
maxReplicasне нужно — диапазон FC определяется автоматически из параметров EC: отparityPart + 1доdataPart + parityPart.
Изменение схемы EC на существующем кластере
Начиная с ZDS v2.1.0, в рамках одного кластера можно одновременно использовать несколько схем EC. Это позволяет перейти на новую схему (например, с dataPart: 2, parityPart: 1 на dataPart: 3, parityPart: 1) без полного переноса данных на отдельный кластер.
Для добавления новой схемы создаётся новая группа хранения (storageGroup) с нужными параметрами EC. Записи в существующие группы при этом продолжаются без прерывания.
Способ 1: новые диски на существующих узлах
Если на узлах кластера есть свободные диски:
- В конфигурации каждого узла добавьте новые диски в
drive.listс новым индексомstorageGroup:
1drive: 2 list: 3 - index: 1 4 path: /mnt/ps/data/volume1 5 storageGroup: 1 # существующая группа 6 - index: 4 7 path: /mnt/ps/data/volume4 8 storageGroup: 2 # новая группа с новой схемой
- В секции
providers.ecзадайте параметры новой схемы:
1providers: 2 ec: 3 dataPart: 3 4 parityPart: 1
Параметры
providers.ecприменяются к записям в новую группу хранения. Данные в существующих группах продолжают обслуживаться по прежней схеме.
- Выполните последовательный перезапуск узлов кластера (по одному). Repair не требуется: новые группы хранения имеют нулевые смещения на всех узлах и не нуждаются в синхронизации данных.
Способ 2: добавление нового узла
Если новые диски добавляются вместе с новым узлом:
- Запустите новый узел ZDS с конфигурацией, в которой диски привязаны к новому
storageGroup. Новые группы хранения на нём будут в статусе ERROR — это ожидаемое состояние. - Новый узел выполняет repair: загружает метаданные кластера с существующих узлов.
- После завершения repair выполните последовательный перезапуск остальных узлов с обновлённой конфигурацией, в которой указан новый узел и добавлена новая группа хранения на их дисках.
По завершении в кластере одновременно работают старая и новая группы хранения. Запись новых вольюмов ведётся в ту группу, которая указана при создании вольюма.
Связанные статьи
Для состояний компонентов см. Кластер ZDS и состояния компонентов.
Для API см. API ZDS.