Перейти к содержанию

ОСНОВНОЙ кластер и средства балансировки нагрузки: новый кластер

XC_VM может распределять ваши просмотры и трансляции по нескольким серверам. Один сервер равен главный: на нем выполняется панель администратора и база данных. Остальные - балансировщики нагрузки (LBs): они запускают потоки и обслуживают зрителей. На этой странице объясняется, как MAIN и его средства балансировки нагрузки теперь работают вместе, что лучше, чем до этого и как это настроить.

Вам не обязательно знать, как это работает внутри. Если вам нужны технические подробности, смотрите Cluster API (MAIN ↔ LB) в Руководстве разработчика.

Идея за одну минуту

До, подсистеме балансировки нагрузки был присвоен пароль от базы данных MAIN. Она вошла прямо в базу данных MAIN. MySQL и Redis позволяют считывать настройки, строки и потоки, а также записывать статистику и количество просмотров. Каждый балансировщик нагрузки удерживал ключи от всей панели.

Сейчас, каждый балансировщик нагрузки запускает небольшую программу, называемую агент (xc_agent). Агент ведет переговоры с MAIN по одному защищенному каналу. Агент всегда начинает разговор: MAIN никогда подключается к подсистеме балансировки нагрузки и ожидает запроса агента. Каждое сообщение подписывается и шифруется даже по протоколу HTTP. Подсистема балансировки нагрузки больше не работает вообще не нуждается в базе данных MAIN. В конце концов, вы можете полностью удалить пароль от базы данных.

 BEFORE                                   NOW

  ┌──────────┐  MySQL 3306 + Redis 6379    ┌──────────┐   one secure channel   ┌──────────┐
  │   LB     │ ──────────────────────────► │   MAIN   │ ◄───────────────────── │   LB     │
  │ (has the │   panel database password   │          │   (MAIN's normal HTTP  │  agent   │
  │ DB pass) │ ◄────── MAIN's /api ─────── │          │    port, signed and    │ (own key)│
  └──────────┘   (shared stream password)  └──────────┘    encrypted)          └──────────┘

Старое против нового

Ранее (устаревший балансировщик нагрузки) Сейчас (кластер)
How the LB talks to MAIN Входит непосредственно в MySQL и Redis MAIN Его агент общается с MAIN через обычный веб-порт MAIN
What the LB stores База данных MAIN и пароли Redis Его собственные закрытые ключи и токен доступа, который обновляется сам по себе (по умолчанию ежечасно).
If someone steals an LB Они получают пароль ко всей вашей базе данных панели Они получают только идентификатор этого пользователя, который вы можете отозвать одним щелчком мыши
Ports open on MAIN MySQL (3306) и Redis (6379) открыты для каждого пользователя Только веб-порт MAIN; MySQL и Redis могут быть защищены брандмауэром или закрыты
Status in the panel LB записала свою собственную статистику в базу данных MAIN Агент сообщает об этом каждые 2 секунды; после 30 секунд молчания на главной странице отображается сообщение о том, что LB отключен
Viewer links Один общий секрет подписывает ссылки для каждого сервера Каждый LB получает свой собственный ключ (поток настройки), поэтому ссылка, созданная для одного LB, не работает для другого
Relays between servers Потоковый пароль передается по URL-адресу Подписанные билеты вместо пароля (поток на уровне данных), и байты потока запечатываются там, где это поддерживают оба сервера
Proxies Которым доверяют по их IP-адресу Прокси-сервер, установленный с текущей версией прокси-сервера, подписывает то, что он отправляет, своим собственным ключом
Movies and timeshift Один PHP-процесс на одного зрителя Обслуживается потоковым демоном (xc_fanout), который использует гораздо меньше памяти
LB software updates Пришел из ГЛАВНОГО Каждый сервер загружает проверенные релизы с GitHub самостоятельно, ежечасно
Switching over Все или ничего За LB и функцию за функцией; каждый шаг может быть отменен, за исключением удаления пароля базы данных из LB.

Что вы получаете

Better security

  • В подсистемах балансировки нагрузки нет пароля к базе данных. Как только подсистема балансировки нагрузки полностью запустится в кластере, База данных MAIN и учетные данные Redis могут быть удалены из нее (Удалить учетные данные базы данных).
  • У каждого фунта стерлингов есть своя индивидуальность. Он создается на самом LB во время установки, и его закрытые ключи никогда не покидают сервер. Срок действия его токена доступа истекает и обновляется сам по себе (каждый по умолчанию 60 минут).
  • Элементы управления одним щелчком мыши на странице Узлы кластера: поверните токен, заблокируйте (остановите) LB, поместите его в поместите на карантин или отмените его.
  • Ключи для просмотра за фунт. При включенном потоке настройки ссылка для просмотра, созданная для одного подсистемы балансировки нагрузки, не может может быть повторно использован на другом устройстве.
  • Подписанные ретрансляции и передача файлов между вашими серверами (поток на уровне данных), так что поток пароль больше не нужен в URL-адресах. Там, где оба сервера поддерживают его, байты также запечатаны.
  • Подписанные прокси-серверы. Прокси-сервер, установленный (или переустановленный) с текущей версией прокси-сервера, подписывает свой отчеты. После того, как он подписал один из них, MAIN больше не принимает неподписанные отчеты со своего адреса.
  • Более безопасный TLS. Сервер, который все еще использует старый встроенный ключ TLS, получает свой собственный при запуске, и разрешены только TLS 1.2 и 1.3.

More reliable

  • ОСНОВНЫЕ перебои в работе причиняют меньше вреда. При включенном потоке настройки каждый подсистема балансировки нагрузки сохраняет локальную копию что ему нужно (настройки, серверы, список стримов). Если ГЛАВНАЯ страница недоступна, зрители, которые уже смотрят, продолжат просмотр, и программа Потоки LB продолжают работать. То, что LB должен сообщить MAIN, ожидает на его диске и отправляется, когда MAIN вернулся.
  • Более быстрый и четкий статус. На странице Узлы кластера отображаются состояние, версия, часы и предупреждения, такие как неправильное отображение времени, несоответствующие соединения или отчеты, которые накапливается.

Less work

  • Автоматическое зачисление. Установка балансировщика нагрузки с панели управления также присоединяет его к кластеру.
  • Автоматическое обновление. Каждый сервер ежечасно проверяет GitHub и устанавливает новые проверенные версии агент, демон потоковой передачи и расширение xcvm_core. MAIN больше не выдает их.
  • Более легкие серверы. Фильмы и timeshift передаются в потоковом режиме демоном, а не PHP, поэтому загруженный балансировщику нагрузки требуется гораздо меньше работников PHP.

Прежде чем вы начнете

  • Лицензия. MAIN подписывает все токены балансировщика нагрузки вашей лицензией. Без действительной лицензии, ни один новый подсистема балансировки нагрузки не может подключиться.
  • Расширение xcvm_core с кластерным API. Проверьте это в разделе Настройки → Кластер: поле вверху показывает Расширение: xcvm_core ... (API 1).
  • Поддерживаемые системы для систем балансировки нагрузки: Ubuntu 20.04, 22.04 или 24.04, или Debian 12 или 13.
  • Network:
  • каждый подсистема балансировки нагрузки должна подключаться к HTTP-порту MAIN (или к порту Cluster API, который вы выберете).;
  • для загрузки обновлений каждому серверу требуется исходящий протокол HTTPS на GitHub;
  • Для установки MAIN необходим SSH-доступ к новому балансировщику нагрузки. Сервер, поддерживающий NAT, может подключиться вместо этого введите код (см. ниже).
  • Правильное время на каждом сервере (NTP). Панель выдает предупреждение, когда время работы сервера превышает Отключение на 30 секунд.

Настраивая его

Шаг 1: включите кластер (ОСНОВНОЙ)

  1. Открыть Настройки → Кластер.
  2. Включите Включить LB API и нажмите Сохранить.

Оставьте другие настройки без изменений. Вы можете вернуться к ним позже:

Установка По умолчанию Когда это следует изменить
Порт кластерного API 0 (используйте HTTP-порт MAIN) Если вы хотите, чтобы кластер работал на своем собственном порту
Имя ГЛАВНОГО хоста пустой Установите DNS-имя, если IP-адрес MAIN может измениться
Кластерный транспорт авто auto уже использует HTTPS, если у MAIN есть действительный сертификат
Автономный доступ местный What an LB does with new viewers while it cannot reach MAIN: local applies the line's connection limit itself, allow lets them in, deny refuses them

Шаг 2: добавьте балансировщик нагрузки

  1. Открыть Серверы → Установить балансировщик нагрузки.
  2. Введите имя сервера, его IP-адрес и SSH-логин (пользователь, пароль, порт), как и раньше.
  3. При необходимости вставьте серверный код Отпечаток ключа SSH-хоста. После этого панель откажется от установки если он видит другой сервер (защита от поддельного сервера). Ключ, обнаруженный при первой установке сервера, сохраняется, и каждая последующая установка должна соответствовать ему. Если ты переустановил операционную систему сервера, у нее появился новый ключ: в форме переустановки включите Забыли сохраненный SSH-ключ хоста (или вставьте новый отпечаток пальца). Эта установка затем доверяет ключ, который представляет сервер, и сохраняет его.
  4. Запустите установку и следите за ходом ее выполнения на странице Просмотр сервера.

В конце установки новый балансировщик нагрузки устанавливает свой агент с GitHub, создает свой собственный ключи, проверяет, может ли он связаться с MAIN, и присоединяется к кластеру. Открыть Серверы → Узлы кластера: это отображается там как активный.

!!! обратите внимание, что "Уже установленный балансировщик нагрузки или к которому MAIN не может подключиться по SSH (NAT)" Сервер, должно быть, уже находится в Серверы → Управление серверами.

1. Убедитесь, что подсистема балансировки нагрузки обновлена до текущей версии.
2. На **Серверы → Узлы кластера** используйте **Регистрация по коду**: выберите сервер и нажмите **Проблема

код. Если LB должен связаться с MAIN по другому адресу (например, частному IP), введите его в сначала введите поле ОСНОВНОЙ URL. На странице один раз отображается команда. 3. Запустите эту команду в подсистеме балансировки нагрузки от имени пользователя root. Она выводит короткий контрольный код (SAS). 4. Введите SAS в запрос, ожидающий Узлы кластера, и нажмите Одобрить**.

Код действителен в течение 30 минут и может быть использован один раз.

Шаг 3: перенесите работу в кластер, по одному элементу за раз.

При отключении всех функций подключается новый балансировщик нагрузки режим 1. Он подключен и отчет, но он по-прежнему работает по-старому. Затем вы включаете его функции (потоки) одну за другой. во-первых, на странице Узлы кластера. Каждый переключатель перемещает один вид работы с "LB использует основные база данных" на "агент делает это по защищенному каналу".

Включайте их в таком порядке. После каждого из них некоторое время смотрите LB (его трансляции, его зрителей, предупреждения на узлах кластера), прежде чем продолжить:

Заказ Поток Что меняется, когда он включен
1 Telemetry MAIN получает данные о процессоре, памяти, сети и статистике LB от своего агента
2 Commands Запуск/остановка, перезапуски и отключения программы просмотра поступают в LB в виде подписанных команд
3 Logs Логи LB поступают в MAIN через агента
4 Streams LB сообщает о состоянии своих потоков (запущен, остановлен, кодеки) через агента
5 Content Записи и анализ видеозаписей поступают в MAIN через агента
6 Config LB считывает свои настройки, серверы и список потоков из своей локальной копии, а не из базы данных MAIN. Он также получает свой собственный ключ просмотра
7 Connections LB сам ведет свой список просмотра, а агент отображает его в MAIN. Нужны команды и потоки
8 Data plane Ретрансляции и файлы с других серверов передаются через агента с подписанными билетами вместо пароля для потока. Нужны потоки и контент

Каждый поток может быть снова отключен: для этого балансировщик нагрузки возвращается к старому способу часть. Перед включением Связи загрузите текущие средства просмотра LB в его агент с помощью одного команда на ГЛАВНОМ экране:

sudo -u xc_vm /home/xc_vm/console.php cluster:seed-connections <server id>

Шаг 4: режим полного кластера (режим 2)

Режим 2 означает, что подсистема балансировки нагрузки больше вообще не подключается к базе данных MAIN. Страница позволяет только нажмите Включение режима, когда это будет безопасно:

  • включен каждый поток, включая плоскость данных;
  • отображается значок Root pin-кода, поэтому обновления и перезапуски могут поступать в LB в виде подписанных команд;
  • LB сообщил о семь дней подряд отсутствии подключения к MySQL или Redis от MAIN. То *Подключение к ОСНОВНОЙ базе данных * поле на узлах кластера показывает, что все еще подключается, если вообще подключается.

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

Шаг 5 (необязательно): заблокируйте все

Только тогда, когда каждый подсистема балансировки нагрузки находится в режиме 2:

  1. Удаление учетных данных базы данных (Узлы кластера, за фунт) удаляет базу данных MAIN и пароли Redis из подсистемы балансировки нагрузки, и MAIN отменяет доступ к базе данных. Этот шаг нельзя отменить из панель.
  2. Список разрешений базы данных (Настройки → Кластер) брандмауэры MAIN поддерживают MySQL и Redis, так что только MAIN и серверы, которые все еще нуждаются в них, могут подключаться.
  3. Прокси-серверы: переустановите каждый прокси-сервер из Серверы → Управление прокси-серверами, чтобы он получил свой собственный ключ и подписывает свои отчеты.
  4. Наконец, администратор может полностью отключить MySQL и Redis от сети, выполнив /home/xc_vm/console.php cluster:lockdown как root в MAIN. Он отказывает, если любое значение LB находится ниже режим 2 или любой другой прокси-сервер еще не подписан. cluster:lockdown --undo отменяет его.

Повседневное использование: страница узлов кластера

Серверы → Узлы кластера - это место, где вы наблюдаете за своими балансировщиками нагрузки и управляете ими:

Ты видишь Это означает
Государство активен / помещен на карантин Обычный / замороженный, пока вы снова не нажмете Доверять
Режим 0, 1, 2 Старый способ / смешанный / полностью на кластере
Последний раз видел, Агент Когда в последний раз сообщалось о LB и его агентской версии
Token expires Когда его текущий токен доступа закончится. Он обновится сам по себе
clock … Часы LB выключены; зафиксируйте их время (NTP)
connections differ MAIN и the LB расходятся во мнениях о том, кто смотрит; они синхронизируются сами по себе
P0 / P1 lagging Отчеты ожидают поступления на ГЛАВНУЮ страницу. Проверьте связь между ними
MAIN URL unreachable Серверу LB не удается связаться ни с одним из адресов MAIN. Проверьте брандмауэр или сертификат
relay port down Другая программа использует порт 31290 на LB; освободите его

Пуговицы:

Кнопка Что он делает
Вращать токен / Вращайте все жетоны прямо сейчас Выдает новый токен, например, если вы считаете, что произошла утечка. LB продолжает работать
Забор / Незащищенность Сразу же останавливает новых зрителей на этом канале и удаляет остальные после непродолжительного просмотра. Unfence возвращает его в эфир
Карантин / Верь снова Замораживает доверие к серверу LB: он продолжает обслуживать сервер, но не принимает новых инструкций. MAIN также делает это самостоятельно, если подозревает, что сервер клонирован
Resync LB снова извлекает свою копию конфигурации и список средств просмотра с нуля
Revoke Удаляет LB из кластера. Его токены сразу перестают работать; он должен присоединиться снова
Включение режима / Выключенный режим Перемещает LB между режимами 0, 1 и 2

Когда MAIN недоступен

  • Зрители, которые уже смотрят с помощью балансировщика нагрузки, продолжают смотреть, и их потоки продолжают работать.
  • Все, о чем должен сообщить LB, находится на его диске и отправляется, когда MAIN возвращается.
  • Автономный доступ (Настройки → Кластер) определяет, что происходит со зрителями, которые LB не может проверить с ГЛАВНЫМ.
  • По умолчанию подсистема балансировки нагрузки никогда не останавливается сама по себе, поскольку она не может подключиться к MAIN. Если вы включите Арендованный забор в настройках → Кластер, LB, который слишком долго не получал сообщений от MAIN, останавливается порция. Он отказывает новым зрителям, как только срок действия его токена истек, а также Допуск к разделению (по умолчанию через 12 часов, но не более чем через 26 часов после последнего использования токена) и сбрасывает оставшийся просмотр по истечении Дренаж ограждения (по умолчанию 10 минут). Включите его, прежде чем он вам понадобится., потому что он поступает в LBs только до тех пор, пока действительна ваша лицензия.

Общие вопросы

Do I have to switch everything over at once? Нет. Каждый балансировщик нагрузки и каждый поток переключаются отдельно, и вы можете смешивать старую и новую нагрузку балансиры на одной панели.

Do I need HTTPS? Нет. Каждое сообщение подписывается и шифруется даже по обычному протоколу HTTP. Если у MAIN есть действительный сертификат, автоматический транспорт по умолчанию все равно использует HTTPS.

What happens if I change MAIN's IP address or port? MAIN сообщает балансировщикам нагрузки новый адрес и продолжает отвечать по старому в течение семи дней, таким образом, ни один из них не теряется. Установка ОСНОВНОГО имени хоста (DNS-имени) полностью устраняет проблему.

A load balancer shows "relay port down". What do I do? Другая программа в этом балансировщике нагрузки использует порт 31290, который нужен агенту. Остановите эту программу, и агент забирает порт сам по себе.

The install says the licence does not allow it (CLUSTER_LICENCE_REQUIRED). MAIN может разрешить подключение новых подсистем балансировки нагрузки только при наличии действующей лицензии. Проверять Лицензирование и активация.

A new load balancer stayed in the old mode after install. Ему не удалось загрузить свой агент с GitHub, или кластер еще не был включен. Проверьте, что сервер может подключиться к GitHub по протоколу HTTPS, а затем присоединиться к нему с помощью Регистрация по коду.