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

Настройка и запуск кластера

💰 Функция доступна по подписке Yucca Enterprise

Введение

В данном руководстве описано, как настроить кластер Yucca из 3х узлов. На потребуется установленная Yucca и Postgres так как в режиме кластера возможна работа только с этой DB. А так же лицензия на нужное количество узлов.

Запуск

Для запуска Yucca в режиме кластера, нужно включить сам режим и обозначить адреса по которым серверы будут общаться друг с другом. Нам потребуется определить следующие параметры:

  • --cluster=true - Включает режиме кластера.
  • --cluster-advertise-address=127.0.0.1:9941 - говорит по какому адресу участники кластера могут обратиться к этому серверу.
  • --cluster-listen-address=:9941 - какой порт нужно слушать для для обращений участников кластера.

Параметры также можно определить и через конфиг файл и через переменные окружения

Для примера я запущу всё локально на 1 компьютере, в рабочем окружении предполагается, что это разные физические серверы. Отмечу, что при работе на 1 узле, у серверов обязательно должен отличаться state_dir, в этом каталоге создастся файл cluster_node_id который будет содержать уникальный идентификатор сервера в кластере. Не удаляйте и не изменяйте этот файл. По этому номеру сервер идентифицирует себя в кластере, если его удалить, то сервер попытается добавится в кластер, как новый узел и все настроенные ранее камеры будут проигнорированы. В случае переноса узла кластера на другое оборудование обязательно переносите и этот файл.

Запустим первый узел Yucca в кластере:

/opt/yucca/yucca server \
    --data-dir=/opt/yucca/data/cluster/data1 \
    --database-type="postgres" \
    --telemetry=false \
    --smtp-server=false \
    --cluster=true \
    --cluster-advertise-address=127.0.0.1:9941 \
    --cluster-listen-address=0.0.0.0:9941 \
    --log-level=debug \
    --web.listen-address=0.0.0.0:9911

Второй инстанс Yucca в кластере:

/opt/yucca/yucca server \
    --data-dir=/opt/yucca/data/cluster/data2 \
    --database-type="postgres" \
    --telemetry=false \
    --smtp-server=false \
    --cluster=true \
    --cluster-advertise-address=127.0.0.1:9942 \
    --cluster-listen-address=0.0.0.0:9942 \
    --log-level=debug \
    --web.listen-address=0.0.0.0:9912

Третий инстанс Yucca в кластере:

/opt/yucca/yucca server \
    --data-dir=/opt/yucca/data/cluster/data3 \
    --database-type="postgres" \
    --telemetry=false \
    --smtp-server=false \
    --cluster=true \
    --cluster-advertise-address=127.0.0.1:9943 \
    --cluster-listen-address=0.0.0.0:9943 \
    --log-level=debug \
    --web.listen-address=0.0.0.0:9913

Далее открываем интерфейс всех 3 серверов. Мы увидим страницу инициализации базы на одном из серверов, том что смог стать лидером. Лидер - это особая роль сервера в кластере, он отвечает за множество операций и статусы в кластере, хотя при этом является таким же участником, тоже размещает камеры и так далее. Если текущий лидер вдруг станет недоступен, то его место тут же займёт кто то другой. Так в кластере всегда есть лидер. Все остальные узлы являются участниками или претендентами и ждут когда лидер разрешит им вступить в кластер.

init1

init2

После инициализации добавляем лицензию:

Обратите внимание, что я указал лицензию с кластером на 2 узла, при этом запустил 3 узла

license1

Лидер также следит за квотами. Если у вас по лицензии квота на 2 узла в кластере, и вы попытаетесь добавить 3-ю, то новый узел будет находиться в статусе претендента на вступление в кластер, но не сможет вступить в него.

cluster1

Лидер проверяет квоты не только на старте но и в процессе работы. К примеру если вы примените лицензию с квотой на 10 узлов, всё настроите, а затем примените лицензию с квотой на 3 узла, то увидев это, лидер сольёт (выведет из обслуживания) лишние узлы. Выбор лишних узлов происходит случайным образом.