Конфигурация 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
Развернутьarrow

В примере не отражены все возможные необязательные поля (например, workers.scan.workersCount или clusterHostPort у узлов); их следует добавлять по необходимости.

Связанные статьи

Для состояний компонентов см. Кластер ZDS и состояния компонентов.

Для API см. API ZDS.