Конфигурация 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.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— количество реплик при использовании FC;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— таймаут выполнения запроса волюмов (необязательный параметр).
Обрезка журнала изменений (workers.changelogCut)
period— интервал выполнения проверки размера ченджлога (необязательный параметр);cutBatchCount— количество записей, удаляемых за одну операцию удаления (необязательный параметр);maxSize— максимальный размер ченджлога;cutSize— количество записей, удаляемое при переполнении с конца (в несколько операций поcutBatchCount).
Синхронизация ченджлога (workers.changelog)
period— интервал выполнения синхронизации ченджлога (необязательный параметр);workersCount— количество воркеров, выполняющих синхронизацию отдельных операций;syncBatchSize— размер пачки операций, обрабатываемой параллельно для каждого внешнего узла;operationsReqTimeout— таймаут выполнения запроса получения операций (необязательный параметр);metadataReqTimeout— таймаут выполнения запроса получения метаданных (необязательный параметр);fileReqTimeout— таймаут выполнения синхронизации файла (необязательный параметр).
Сканирование (workers.scan)
timeout— таймаут одного цикла сканирования (необязательный параметр);workersCount— количество воркеров, выполняющих локальное сканирование (необязательный параметр);queueCapacity— размер буфера канала очереди задач сканирования (необязательный параметр);schedule— расписание запусков; элементы могут включать:dayOfWeek— день недели (0 — воскресенье, 1 — понедельник и т.д., необязательный параметр);hour— час запуска, по умолчанию 0 (необязательный параметр);minute— минута запуска, по умолчанию 0 (необязательный параметр);second— секунда запуска, по умолчанию 0 (необязательный параметр).
Восстановление (workers.repair)
timeout— таймаут на восстановление одного файла (необязательный параметр);workersCount— количество воркеров для восстановления повреждённых файлов (необязательный параметр).
Параметры реестра и журнала на диске
Секция registry задаёт локальное хранилище метаданных и параметры работы с журналом:
registry.path— путь для хранения данных регистра;registry.commitInterval— период автоматического коммита изменений;registry.batchLimit— максимальное число изменений в одном батче;registry.changelogListPageSize— число отдаваемых при листинге записей по каждой группе хранения.
Эти параметры влияют на синхронизацию и на восстановление состояния после сбоев.
Вакуум
vacuum.enabled— включение работы вакуума в технологические окна;vacuum.storePath— путь для хранения данных вакуума;vacuum.windows— список окон:days— список дней недели, в которые выполняется вакуум (0 — воскресенье, 1 — понедельник и т.д.);start— время начала окна;duration— длительность окна.
Диски: пороги и бенчмарки
Общие параметры дисков:
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 у узлов); их следует добавлять по необходимости.
Связанные статьи
Для состояний компонентов см. Кластер ZDS и состояния компонентов.
Для API см. API ZDS.