Как настроить трехузловой кластер MariaDB Galera на Ubuntu 20.04

TL;DR
Краткая пошаговая инструкция для создания трехузлового MariaDB Galera cluster на Ubuntu 20.04: установите MariaDB на все узлы, создайте идентичный файл конфигурации galera.cnf на каждом узле, инициализируйте кластер с первого узла и подключите остальные. В тексте — проверка репликации, типичные ошибки, рекомендации по безопасности и runbook для восстановления.
Как использовать это руководство
- Предназначено для администраторов баз данных и DevOps, знакомых с Ubuntu и базовой администрированием MariaDB.
- Все команды выполняйте под пользователем с правами sudo или root.
Требования
- Три сервера под управлением Ubuntu 20.04.
- Сетевые адреса каждого узла доступны между собой (между узлами должны быть открыты порты 3306/TCP и 4567/TCP, а также 4568/TCP и 4444/TCP для SST/Galera).
- Настроен пароль root для MariaDB или доступ к mysql через unix_socket.
Подготовка системы
Перед началом обновите пакеты:
apt-get update -yРекомендуется также выполнить apt-get upgrade на всех узлах при необходимости.
Установка MariaDB на всех узлах
apt-get install mariadb-server -yПосле установки запустите и проверьте сервис:
systemctl start mariadb
systemctl status mariadbЗатем выполните облегчённую процедуру безопасности и задайте пароль root:
mysql_secure_installationСледуйте подсказкам скрипта (можно оставить unix_socket-аутентификацию или переключиться на парольную). Если скрипт просит текущий пароль, нажмите Enter, если ещё нет пароля.
Важно: выполните mysql_secure_installation на каждом узле.
Конфигурация Galera
Создайте единый файл конфигурации галеры на каждом узле по пути /etc/mysql/conf.d/galera.cnf. Для каждого узла замените nodeX-ip-address и nodeX на реальные IP-адреса/имена.
На первом узле создайте файл:
nano /etc/mysql/conf.d/galera.cnfДобавьте следующие строки:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name='galera_cluster'
wsrep_cluster_address='gcomm://node1-ip-address,node2-ip-address,node3-ip-address'
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address='node1-ip-address'
wsrep_node_name='node1'Сохраните и закройте файл.
Повторите создание файла на втором и третьем узлах, заменив wsrep_node_address и wsrep_node_name на соответствующие значения node2 и node3. wsrep_cluster_address должен включать список всех трёх узлов.
Замечание: вместо rsync можно использовать более быстрые SST-методы, например xtrabackup-v2 (требует дополнительной установки Percona XtraBackup) — см. раздел Альтернативы.
Инициализация кластера
- Остановите MariaDB на всех узлах:
systemctl stop mariadb- На первом узле инициализируйте кластер:
galera_new_cluster- Проверьте размер кластера:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"Ожидаемый вывод на первом узле:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+- На втором и третьем узлах запустите сервис MariaDB:
systemctl start mariadb- На каждом новом узле проверьте размер кластера той же командой. Ожидаемое значение последовательно 2 и 3.
Проверка репликации
На первом узле подключитесь к MariaDB:
mysql -u root -pСоздайте тестовые базы:
MariaDB [(none)]> create database db1;
MariaDB [(none)]> create database db2;
MariaDB [(none)]> exit;На втором и третьем узле проверьте список баз данных:
mysql -u root -p
MariaDB [(none)]> show databases;Вы должны увидеть db1 и db2 на всех узлах. Это подтверждает, что изменения реплицируются по всем мастерам.
Важные примечания
- bind-address=0.0.0.0 делает сервер доступным на всех интерфейсах; убедитесь, что межсетевой экран настроен правильно.
- wsrep_sst_method=rsync подходит для небольших баз. Для больших БД рекомендуется SST через xtrabackup-v2.
- Убедитесь, что системные часы синхронизированы (ntp/chrony); рассинхронизация времени может приводить к проблемам.
Когда Galera не подходит
- Для очень больших однослойных баз данных с длительными блокирующими DDL-операциями Galera может оказывать негативное влияние на производительность.
- Если вам нужна асинхронная репликация с большим лагом или сложная топология master-slave, классическая репликация может быть проще.
Альтернативные подходы
- Классическая репликация master-slave для сценариев, где запись централизована.
- Percona XtraDB Cluster (альтернатива Galera с похожим поведением и инструментами).
- Patroni + PostgreSQL для проектов, где PostgreSQL — предпочтительная СУБД.
Мини-методология развертывания
- Подготовка сети и DNS/hosts для стабильных имён узлов. 2. Бекап текущих БД. 3. Установка MariaDB на тестовой среде и тестовая репликация. 4. Пошаговое добавление узлов и мониторинг метрик. 5. Прокатка на проде по окну технического обслуживания.
Check-list ролей
- DBA: подготовка дампов, валидация схем, выбор SST-метода.
- DevOps: сеть, firewall, системные параметры kernel, мониторинг.
- Системный администратор: резервные копии, доступы, настройка ntp/chrony.
Runbook: устранение проблем и откат
Случай: Узел не присоединяется к кластеру
- Проверить логи /var/log/mysql/error.log и /var/log/syslog.
- Убедиться, что порты 4567, 4568, 4444 и 3306 доступны.
- Проверить wsrep_provider и путь к libgalera_smm.so.
- Если SST не проходит, временно отключить узел и выполнить IST/полную синхронизацию.
Случай: Split-brain / несогласованность
- Определить, какой компонент имеет наибольшую актуальность данных.
- Остановить MariaDB на некорректных узлах.
- Инициализировать новый первичный узел командой galera_new_cluster на узле с корректными данными.
- Поочередно присоединять остальные узлы.
Откат изменений
- В случаях серьёзных ошибок восстановите данные из бэкапа, предварительно остановив все узлы и инициализировав кластер заново с корректного бэкапа.
Безопасность и жёсткая настройка
- Отключите удалённый root-доступ, используйте отдельных пользователей с минимальными привилегиями.
- Шифруйте трафик между узлами через VPN или TLS, если кластер разбросан по WAN.
- Ограничьте доступ к портам Galera по IP в firewall.
Совместимость и миграция
- MariaDB Galera стабильна на Ubuntu 20.04, но проверьте совместимость версий MariaDB и libgalera для вашего релиза.
- При миграции с классической репликации на Galera — сначала синхронизируйте данные, затем переключите приложения на работу с кластером.
Критерии приёмки
- Все три узла в кластере показывают wsrep_cluster_size равным 3.
- Тестовые базы данных созданы на одном узле видны на остальных.
- Мониторинг фиксирует стабильную синхронизацию и отсутствие частых перезапусков сервиса.
Краткий глоссарий
- SST — state snapshot transfer, полная передача состояния при присоединении узла.
- IST — incremental state transfer, передача только недостающих транзакций.
- wsrep — write set replication API, реализация Galera для синхронной репликации.
Заключение
Вы сейчас получили практическое руководство по развёртыванию трехузлового MariaDB Galera кластера на Ubuntu 20.04: от установки и конфигурации до инициализации и проверки репликации. Для продакшена рекомендуются тестирование SST-метода, настройка мониторинга и безопасный доступ между узлами. Если нужна помощь с выбором SST, настройкой xtrabackup-v2 или диагностикой логов, напишите, какие сообщения об ошибках вы видите.
Похожие материалы
Управление процессами в GNOME System Monitor
Поиск по физическим книгам в Evernote
Восстановление писем Hotmail после перехода в Outlook
BerryBoot: мультизагрузка Raspberry Pi
Windows XP Mode в Windows 7: руководство и практика