Гид по технологиям

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

5 min read Databases Обновлено 26 Nov 2025
MariaDB Galera: трехузловой кластер на Ubuntu 20.04
MariaDB Galera: трехузловой кластер на Ubuntu 20.04

Три сервера, иллюстрация кластера MariaDB Galera

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) — см. раздел Альтернативы.

Инициализация кластера

  1. Остановите MariaDB на всех узлах:
systemctl stop mariadb
  1. На первом узле инициализируйте кластер:
galera_new_cluster
  1. Проверьте размер кластера:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Ожидаемый вывод на первом узле:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+
  1. На втором и третьем узлах запустите сервис MariaDB:
systemctl start mariadb
  1. На каждом новом узле проверьте размер кластера той же командой. Ожидаемое значение последовательно 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 — предпочтительная СУБД.

Мини-методология развертывания

  1. Подготовка сети и DNS/hosts для стабильных имён узлов. 2. Бекап текущих БД. 3. Установка MariaDB на тестовой среде и тестовая репликация. 4. Пошаговое добавление узлов и мониторинг метрик. 5. Прокатка на проде по окну технического обслуживания.

Check-list ролей

  • DBA: подготовка дампов, валидация схем, выбор SST-метода.
  • DevOps: сеть, firewall, системные параметры kernel, мониторинг.
  • Системный администратор: резервные копии, доступы, настройка ntp/chrony.

Runbook: устранение проблем и откат

  • Случай: Узел не присоединяется к кластеру

    1. Проверить логи /var/log/mysql/error.log и /var/log/syslog.
    2. Убедиться, что порты 4567, 4568, 4444 и 3306 доступны.
    3. Проверить wsrep_provider и путь к libgalera_smm.so.
    4. Если SST не проходит, временно отключить узел и выполнить IST/полную синхронизацию.
  • Случай: Split-brain / несогласованность

    1. Определить, какой компонент имеет наибольшую актуальность данных.
    2. Остановить MariaDB на некорректных узлах.
    3. Инициализировать новый первичный узел командой galera_new_cluster на узле с корректными данными.
    4. Поочередно присоединять остальные узлы.
  • Откат изменений

    • В случаях серьёзных ошибок восстановите данные из бэкапа, предварительно остановив все узлы и инициализировав кластер заново с корректного бэкапа.

Безопасность и жёсткая настройка

  • Отключите удалённый 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 или диагностикой логов, напишите, какие сообщения об ошибках вы видите.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Управление процессами в GNOME System Monitor
Linux

Управление процессами в GNOME System Monitor

Поиск по физическим книгам в Evernote
Продуктивность

Поиск по физическим книгам в Evernote

Восстановление писем Hotmail после перехода в Outlook
Почта

Восстановление писем Hotmail после перехода в Outlook

BerryBoot: мультизагрузка Raspberry Pi
Raspberry Pi

BerryBoot: мультизагрузка Raspberry Pi

Windows XP Mode в Windows 7: руководство и практика
IT/Системы

Windows XP Mode в Windows 7: руководство и практика

ORAS: реестр OCI как универсальное хранилище
DevOps

ORAS: реестр OCI как универсальное хранилище