Кластеризация повышает уровень доступности системы за счет распространения изменений на разные серверы. В случае выхода из строя одного из серверов другие остаются доступными для работы.
Кластеризация 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, нужно под пользователем root последовательно на всех узлах кластера, начиная с мастер-узла, выполнить скрипт:
sh "/var/www/html/dpiui2/backend/app_bash/galera_setup.sh" -a init_cluster
Для установки и запуска кластера 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
Скрипт выполнит монтирование реплицируемых каталогов к распределенной файловой системе.
Важную роль в кластере играет Главный (мастер) сервер.
Мастер сервер устанавливается настройкой CLUSTER_PRIMARY_HOST.
Мастер сервер выполняет всю фоновою работу dpiui2: взаимодействие с оборудованием, синхронизация абонентов, услуг, тарифов и т.д.
Остальные (slave) узлы не выполняют никаких фоновых действий и находятся в режиме ожидания. При этом к эти узлы доступны для работы: пользователи могут работать с этими узлами также как и с мастер сервером и не увидят разницы. Эту опцию можно использовать для балансировки нагрузки, а также для обеспечения более защищённого доступа.
При выходе из строя мастер сервера, необходимо изменить настройку CLUSTER_PRIMARY_HOST и назначить мастером другой сервер.
Для нормальной работы кластера необходимо 3 узла (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
В случаях, когда требуется переустановить операционную систему на одном из узлов или просто заменить узел кластера другим сервером, руководствуйтесь нижеследующим.
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