====== Кластер GUI ======
{{indexmenu_n>5}}
Кластеризация повышает уровень доступности системы за счет распространения изменений на разные серверы. В случае выхода из строя одного из серверов другие остаются доступными для работы.
Кластеризация dpiui2 реализуется за счет репликации базы данных и файловой системы.
Возможность кластеризации доступна, начиная с версии [[dpi:dpi_components:dpiui:install_and_update:version_information|dpiui2-2.25.9]]
===== Репликация базы данных (БД) =====
Репликация БД реализована с помощью MariaDB Galera Cluster.
Galera - решение кластеризации баз данных, которое позволяет настраивать кластеры с несколькими главными узлами, используя синхронную репликацию. Galera автоматически обрабатывает размещение данных на разных узлах, позволяя при этом отправлять запросы чтения и записи на любой узел кластера.
Дополнительную информацию о Galera можно найти на странице [[https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/|официальной документации]].
===== Репликация файловой системы (ФС) =====
Репликация файловой системы реализована с помощью GlusterFS.
GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. GlusterFS объединяет хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS работает в пользовательском пространстве при помощи технологии FUSE, поэтому не требует поддержки со стороны ядра операционной системы и работает поверх существующих файловых систем (ext3, ext4, XFS, reiserfs и т. п.).
Дополнительную информацию о GlusterFS можно найти на странице [[https://docs.gluster.org/en/latest/|официальной документации]]
===== Установка и настройка =====
==== Настройки ====
Все настройки можно произвести в .env файле dpiui2 или в разделе Конфигурация GUI > Настройки кластера.
{{ :dpi:dpi_components:dpiui:user_guide:admin_section:cluster:dpiui2_настройки_кластера.png?direct&640 |}}
Параметры настройки:
**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
!!! Важно: перед запуском скрипта на мастер-узле, необходимо выполнить резервное копирование БД.
! Важно: Перед запуском скрипта необходимо внести [[dpi:dpi_components:dpiui:user_guide:admin_section: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.
! Важно: Перед запуском скрипта необходимо внести [[dpi:dpi_components:dpiui:user_guide:admin_section:cluster#настройки|настройки]]
! Важно: между узлами кластера должна быть связанность по IP.
! Важно: Запуск скрипта необходимо выполнять под пользователем root
! Важно: Необходимо дождаться окончания выполнения скрипта на одном узле, прежде чем запускать его на следующем
===== Мастер сервер =====
Важную роль в кластере играет Главный (мастер) сервер.
Мастер сервер устанавливается настройкой [[dpi:dpi_components:dpiui:user_guide:admin_section:cluster#настройки|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** Определите, какой сервер был остановлен последним ([[https://galeracluster.com/library/documentation/crash-recovery.html|доп. информация]])
cat /var/lib/mysql/grastate.dat
Найдите узел, у которого safe_to_bootstrap = 1 или наибольший seqno. Для этого узла выполните:
galera_new_cluster
Для остальных узлов выполните:
systemctl start mariadb
===== Замена узла =====
В случаях, когда требуется переустановить операционную систему на одном из узлов или просто заменить узел кластера другим сервером, руководствуйтесь нижеследующим.
!!! Важно: Не останавливайте узлы кластера, кроме того, который требуется заменить.
!!! Важно: После установки операционной системы следует установить такой же IP адрес, как на заменяемом узле.
**1** На замещающем узле установить dpiui2
**2** На замещающем узле установить пароль пользователя dpiui2su такой же как на других узлах
**3** На замещающем узле пропишите [[dpi:dpi_components:dpiui:user_guide:admin_section:cluster#настройки|настройки]] кластера
**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