====== Кластер GUI ====== {{indexmenu_n>5}} Кластеризация повышает уровень доступности системы за счет распространения изменений на разные серверы. В случае выхода из строя одного из серверов другие остаются доступными для работы. Кластеризация dpiui2 реализуется за счет репликации базы данных и файловой системы. Возможность кластеризации доступна, начиная с версии [[dpi:dpi_components:dpiui:install_and_update:version_information:start|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:start#настройки|настройки]] ! Важно: между узлами кластера должна быть связанность по 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:start#настройки|настройки]] ! Важно: между узлами кластера должна быть связанность по IP. ! Важно: Запуск скрипта необходимо выполнять под пользователем root ! Важно: Необходимо дождаться окончания выполнения скрипта на одном узле, прежде чем запускать его на следующем ===== Мастер сервер ===== Важную роль в кластере играет Главный (мастер) сервер. Мастер сервер устанавливается настройкой [[dpi:dpi_components:dpiui:user_guide:admin_section:cluster:start#настройки|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:start#настройки|настройки]] кластера **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