Содержание

Кластер 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