Skip to content

Присоединение стримеров

cluster.control.nodes

Central хранит конфигурацию кластера и определяет, какие стримы выполняет каждый стример. Чтобы добавить машину, оператор открывает окно присоединения и передаёт ей адрес central и join-токен. После регистрации стример получает постоянную идентичность, синхронизирует настройки и сообщает о своём состоянии.

Присоединение не требует вручную переносить на новый сервер конфигурацию всех стримов. Central доставляет назначения, а оператор управляет машиной через настройки стримера. Установка самого Sapsan описана в разделе установки.

Что подготовить

Для присоединения нужны:

  • Адрес central — доступный стримеру HTTP- или HTTPS-адрес управляющей группы.
  • Join-токен — секрет действующего окна присоединения, полученный оператором в central.
  • Постоянный каталог состояния — доступный на запись каталог, который сохранится после перезапуска процесса или контейнера.
  • Совместимая установка — поставка и лицензия должны позволять работу стримера в выбранном кластере.

Соединение для синхронизации инициирует стример. Для обратных обращений central и чтения медиа соседними стримерами нужны также корректные адреса самой машины. Направления и назначение адресов разобраны в подключении и доставке.

Окно присоединения

Действие permit_join открывает окно на один час и выдаёт join-токен. Пока окно открыто, стримеры с этим токеном могут регистрироваться в central. Это временное разрешение на создание регистрации, а не постоянный пароль стримера. Отдельного ручного одобрения каждой машины нет: действующий токен разрешает регистрацию.

Откройте окно через management API central с административным ключом:

curl -fsS -X POST \
  -H "Authorization: Bearer $ADMIN_KEY" \
  https://central.example/central/api-v4/nodes/permit-join

Запрос не требует тела. В ответе token содержит join-токен, open — состояние окна, а remaining_secs — оставшееся время в секундах. Сохраните токен для настройки присоединяемых машин. Обычный запрос состояния GET по тому же адресу не раскрывает секрет; для его повторного получения у действующего окна предусмотрен GET /central/api-v4/nodes/permit-join/reveal с административной авторизацией.

Повторный permit_join при открытом окне продлевает его срок, сохраняя тот же токен. Когда прежнее окно закрыто или истекло, новое открытие выдаёт новый токен. Поэтому токен, уже переданный на устанавливаемые машины, не меняется от обычного продления действующего окна.

Один токен окна может использоваться для присоединения нескольких стримеров. После завершения добавления машин окно можно закрыть. Закрытие окна или истечение часа не отменяет уже созданные регистрации: присоединённые стримеры продолжают синхронизацию с собственными учётными данными.

Закрыть окно после присоединения машин можно отдельным запросом:

curl -fsS -X DELETE \
  -H "Authorization: Bearer $ADMIN_KEY" \
  https://central.example/central/api-v4/nodes/permit-join

Если первичная регистрация отклонена, стример повторяет попытки. Проверьте, что окно открыто и на машине указан его действующий токен. Повторное открытие окна после истечения выдаёт другой токен — его нужно передать стримеру, который ещё не зарегистрировался.

Включение управляемого режима

Связь с central задаётся локальной секцией managed_by:

managed_by:
  url: https://central.example
  name: streamer-01
  join_token: "JOIN_TOKEN_FROM_CENTRAL"
  state_dir: /var/lib/sapsan/central

Поля этой секции относятся к запуску и подключению машины:

Поле Назначение
url Адрес central или список адресов одной управляющей группы.
name Операторская подпись стримера; если не задана, используется hostname машины.
join_token Токен для первичной регистрации. При сохранённой идентичности повторно не используется.
state_dir Каталог постоянной идентичности и кэша конфигурации. Без явного значения используется доступный на запись каталог состояния установки, где хранится server.id.

Адрес группы можно задать списком:

managed_by:
  url:
    - https://central-1.example
    - https://central-2.example
  join_token: "JOIN_TOKEN_FROM_CENTRAL"

Список задаёт предпочтение адресов. При сетевом отказе стример пробует другие адреса группы. Он также запоминает адреса, полученные от central, чтобы использовать их после перезапуска. Не включайте в список независимые кластеры: это запасные точки входа в одну управляющую группу.

Если схема не указана, к адресу добавляется http://. Чтобы использовать TLS, задавайте https:// явно и настройте соответствующий серверный сертификат.

Те же параметры можно передать окружением процесса:

Переменная Параметр
CENTRAL_URL managed_by.url; несколько адресов разделяются запятыми.
NODE_NAME managed_by.name.
JOIN_TOKEN managed_by.join_token.
STATE_DIR managed_by.state_dir.

Значения окружения имеют приоритет над одноимёнными настройками конфигурации. Не оставляйте переменные от прежнего подключения при переносе установки в другой кластер.

managed_by объявляет стример управляемым. Секция central предназначена для самого управляющего компонента и не заменяет managed_by. Одновременно использовать managed_by и другой внешний источник конфигурации config_external нельзя.

Постоянная идентичность

При успешной регистрации central выдаёт идентификатор node_id и секрет node_key. Стример сохраняет их в identity.json внутри state_dir и затем использует для синхронизации. Имя node_id относится к полю API; подпись из name и hostname не являются этой идентичностью.

При обычном перезапуске стример читает сохранённую идентичность и не регистрируется заново. Ему не требуется новое окно присоединения, даже если прежний join-токен давно истёк. Изменение подписи машины также не создаёт новую регистрацию.

Сохраняйте каталог состояния при обновлении и пересоздании контейнера. Потеря identity.json лишает стример прежних учётных данных; повреждённый файл вызывает ошибку, а не незаметное создание другой регистрации. Копирование этого файла на вторую машину переносит ту же идентичность и не заменяет присоединение нового стримера.

Файл содержит секрет и создаётся с правами 0600. Доступ к каталогу состояния должен оставаться только у процесса и администраторов установки. Не включайте содержимое файлов идентичности и токенов в открытые отчёты диагностики.

Как стороны авторизуют обращения

Управление и чтение медиа используют разные учётные данные:

Направление Как разрешается доступ
Стример → central После присоединения стример предъявляет node_key как Bearer-секрет. Central определяет регистрацию по этому ключу.
Central → management API стримера Central создаёт для машины отдельную учётную запись api_auth для HTTP Basic и доставляет её в управляемой конфигурации. Она используется, например, для чтения сессий и управляющих действий.
Стример → другой стример Для межсерверного чтения медиа и архива выдаётся отдельный подписанный JWT-билет. Секрет node_key соседним стримерам не передаётся.

Таким образом, запросы в обе стороны имеют свои механизмы авторизации. Это не означает автоматическую настройку взаимного TLS. При подключении по HTTPS клиент проверяет серверный сертификат обычным механизмом TLS; присоединение не закрепляет отдельный криптографический отпечаток группы central. При HTTP TLS-защиты соединения нет.

Указывайте правильные доверенные адреса и используйте HTTPS либо защищённую сеть для передачи управляющих секретов. Наличие join-токена само по себе не удостоверяет сервер central, к которому направлен запрос.

Межсерверные билеты подписываются Ed25519 и проверяются получателем локально. Их срок в текущей реализации — 24 часа; central обновляет билет до истечения. Сохранённый ещё действующий билет позволяет читать соседние стримеры при временной потере связи с central, но не обеспечивает бессрочный доступ без обновления.

Кто управляет конфигурацией

В управляемом режиме состав стримов задаёт central: локальный список streams не подмешивается к назначениям и не становится резервным источником при потере связи. Создавайте стримы и меняйте их размещение через central. Правила назначения описаны в размещении стримов.

Для серверных настроек действуют слои конфигурации. Central доставляет настройки стримера, но локальные include-файлы и окружение могут перекрыть отдельные значения. Поэтому «сохранено в central» и «эффективно на машине» — не всегда одно и то же. В интерфейсе такие переопределения отмечаются отдельно; порядок применения описан в управлении стримером.

Обновление конфигурации и наблюдение за применением выполняются через central. Для первоначального подключения на машине остаются адрес управляющей группы и параметры запуска.

Если central недоступен

Стример сохраняет полученные настройки и срез стримов на диске. При кратковременной потере управляющей связи уже применённые стримы продолжают работать; конфигурация не заменяется локальным списком стримов.

После перезапуска стример может восстановить работу по сохранённому кэшу и затем возобновить синхронизацию. Если пригодного кэша ещё нет, например при первом запуске, для получения назначений нужна связь с central. Сам по себе join-токен не содержит конфигурацию стримов.

Отказ в доступе по node_key также не превращает стример в новый: он сообщает об ошибке и сохраняет уже применённую конфигурацию. Для восстановления управляющей связи требуется действие оператора. Новое окно присоединения не заменяет исправление существующей регистрации.

Работа по кэшу не делает стример независимой плоскостью управления. Новые назначения не приходят, изменения в central не применяются до восстановления связи, а межсерверные билеты ограничены своим сроком. Возможность продолжать выдачу зависит также от доступности источников, дисков и других стримеров.

Проверка присоединения

После запуска проверьте:

  1. Стример появился в реестре central с ожидаемой подписью и текущим состоянием связи.
  2. Каталог состояния сохраняется между перезапусками; повторный запуск использует ту же регистрацию.
  3. API-адрес машины доступен central, а внутрикластерный адрес доставки — соседним стримерам.
  4. Настройки доставлены и подтверждены как применённые; окружение не перекрывает нужные значения.
  5. Назначенные стримы работают, а межсерверное чтение, если оно требуется, проходит с действующим билетом.

Состояние соединения и применение настроек рассматривайте отдельно от работоспособности медиа. Зарегистрированный стример ещё не обязательно имеет доступный источник или исправное хранилище; потеря central, в свою очередь, не означает немедленную остановку уже работающего эфира.