5 Кластер GUI

Кластеризация повышает уровень доступности системы за счет распространения изменений на разные серверы. В случае выхода из строя одного из серверов другие остаются доступными для работы.

Кластеризация dpiui2 реализуется за счет репликации базы данных и файловой системы.

Возможность кластеризации доступна, начиная с версии dpiui2-2.25.9

Репликация базы данных (БД)

Репликация БД реализована с помощью MariaDB Galera Cluster.

Galera - решение кластеризации баз данных, которое позволяет настраивать кластеры с несколькими главными узлами, используя синхронную репликацию. Galera автоматически обрабатывает размещение данных на разных узлах, позволяя при этом отправлять запросы чтения и записи на любой узел кластера.

Дополнительную информацию о Galera можно найти на странице официальной документации.

Репликация файловой системы (ФС)

Репликация файловой системы реализована с помощью GlusterFS.

GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. GlusterFS объединяет хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS работает в пользовательском пространстве при помощи технологии FUSE, поэтому не требует поддержки со стороны ядра операционной системы и работает поверх существующих файловых систем (ext3, ext4, XFS, reiserfs и т. п.).

Дополнительную информацию о GlusterFS можно найти на странице официальной документации

Установка и настройка

Настройки

Все настройки можно произвести в .env файле dpiui2 или в разделе Конфигурация GUI > Настройки кластера.

Параметры настройки:

GALERA_PEER_HOSTS – список хостов кластера Galera через запятую. Параметр определяет, какие узлы будут доступны кластеру Galera .

!Важно: Главный (мастер) узел кластера необходимо поместить вначале списка. Это важно для первоначального развертывания кластера.

CLUSTER_FS_PEER_HOSTS – список хостов кластера GlusterFS через запятую. Параметр определяет, какие узлы будут доступны кластеру GlusterFS.

!Важно: Главный (мастер) узел кластера необходимо поместить вначале списка. Это важно для первоначального развертывания кластера.

CLUSTER_PRIMARY_HOST – главный узел (мастер узел) для Galera и GlusterFS. Параметр определяет главный узел на текущий момент. Данный параметр можно менять в процессе эксплуатации, если главный узел по каким-то причинам выйдет из строя.

Установка и запуск Galera

Для установки и запуска кластера Galera, нужно под пользователем root последовательно на всех узлах кластера, начиная с мастер-узла, выполнить скрипт:

sh "/var/www/html/dpiui2/backend/app_bash/galera_setup.sh" -a init_cluster

!!! Важно: перед запуском скрипта на мастер-узле, необходимо выполнить резервное копирование БД.
! Важно: Перед запуском скрипта необходимо внести настройки
! Важно: между узлами кластера должна быть связанность по IP.
! Важно: Запуск скрипта необходимо выполнять под пользователем root
! Важно: Запуск скрипта необходимо выполнить в первую очередь на мастер узле
! Важно: Необходимо дождаться окончания выполнения скрипта на одном узле, прежде чем запускать его на следующем
! Важно: Установите одинаковый пароль для пользователя dpiui2su (для подключения по ssh) на всех узлах. Пропишите этот пароль в разделе Администратор > Оборудование на мастер узле.

Установка и запуск GlusterFS

Для установки и запуска кластера GlusterFS, нужно под пользователем root последовательно выполнить действия:

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

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a init_gluster

Скрипт выполнит первоначальную установку GlusterFS.

2 На главном (мастер) узле выполнить скрипт (на остальных узлах кластера запускать не требуется):

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a init_peers

Скрипт выполнит настройку всех узлов кластера.

3 На главном (мастер) узле выполнить скрипт (на остальных узлах кластера запускать не требуется):

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a init_volume

Скрипт выполнит настройку распределенного хранилища и файловой системы на всех узлах кластера.

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

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a mount

Скрипт выполнит монтирование реплицируемых каталогов к распределенной файловой системе.

!!! Важно: перед запуском скрипта на мастер-узле, необходимо выполнить резервное копирование каталога /var/www/html/dpiui2/backend/storage/ и файла /var/www/html/dpiui2/backend/.env.
! Важно: Перед запуском скрипта необходимо внести настройки
! Важно: между узлами кластера должна быть связанность по IP.
! Важно: Запуск скрипта необходимо выполнять под пользователем root
! Важно: Необходимо дождаться окончания выполнения скрипта на одном узле, прежде чем запускать его на следующем

Мастер сервер

Важную роль в кластере играет Главный (мастер) сервер.

Мастер сервер устанавливается настройкой CLUSTER_PRIMARY_HOST.

Мастер сервер выполняет всю фоновою работу dpiui2: взаимодействие с оборудованием, синхронизация абонентов, услуг, тарифов и т.д.

Остальные (slave) узлы не выполняют никаких фоновых действий и находятся в режиме ожидания. При этом к эти узлы доступны для работы: пользователи могут работать с этими узлами также как и с мастер сервером и не увидят разницы. Эту опцию можно использовать для балансировки нагрузки, а также для обеспечения более защищённого доступа.

При выходе из строя мастер сервера, необходимо изменить настройку CLUSTER_PRIMARY_HOST и назначить мастером другой сервер.

Количество узлов

Для нормальной работы кластера необходимо 3 узла (3 сервера или виртуальные машины).

При запуске кластера только на 2-х узлах возникнут проблемы с перезапуском узлов.

!!! Важно: не пытайтесь реализовать GlusterFS на только на 2-х узлах. Для кластера необходим 3-й сервер – арбитр. При перезапуске любого из 2-х узлов, вы потеряете данные.

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

В штатном режиме вы можете без последствий остановить / перезапустить 1 или 2 сервера одновременно.

Если необходимо остановить все 3 сервера, нужно сделать это последовательно. Желательно мастер узел останавливать последним. Необходимо первым запускать тот сервер, который был остановлен последним.

Если были остановлены все 3 сервера, потребуется инициализировать кластер Galera вручную:

1 Остановите на всех узлах сервер БД. Для этого последовательно выполните команду

systemctl stop mariadb

2 Определите, какой сервер был остановлен последним (доп. информация)

cat /var/lib/mysql/grastate.dat

Найдите узел, у которого safe_to_bootstrap = 1 или наибольший seqno. Для этого узла выполните:

galera_new_cluster

Для остальных узлов выполните:

systemctl start mariadb

Замена узла

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

!!! Не останавливайте узлы кластера, кроме того, который требуется заменить.
!!! После установки операционной системы следует установить такой же IP адрес, как на заменяемом узле.

1 На замещающем узле установить dpiui2

2 На замещающем узле установить пароль пользователя dpiui2su такой же как на других узлах

3 На замещающем узле пропишите настройки кластера

4 На замещающем узле инициализируйте кластер Galera

sh "/var/www/html/dpiui2/backend/app_bash/galera_setup.sh" -a init_cluster

5 На замещающем узле инициализируйте кластер GlusterFS

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a init_gluster

6 На мастер сервере посмотреть UUID заменяемого узла командой

gluster peer status

7 На замещающем узле в файле /var/lib/glusterd/glusterd.info прописать UUID из пунтка 6

8 На замещающем узле перезапустить glusterd

systemctl stop glusterd

systemctl start glusterd

9 На замещающем узле выполнить скрипт

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a init_peers

10 На замещающем узле снова перезапустить glusterd

systemctl stop glusterd

systemctl start glusterd

11 На мастер узле убедиться, что узел добавлен и имеет статус "Peer in Cluster"

gluster peer status

12 На замещающем узле выполнить скрипт

sh "/var/www/html/dpiui2/backend/app_bash/glusterfs_setup.sh" -a mount