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

Настройка кластера MariaDB Galera на Debian 10

6 min read Databases Обновлено 24 Nov 2025
MariaDB Galera на Debian 10 — настройка кластера
MariaDB Galera на Debian 10 — настройка кластера

Фотография с диаграммой кластера MariaDB Galera

Введение

MariaDB предоставляет два подхода к высокой доступности: классическая мастер-репликация и Galera — синхронный многомастерный кластер. Galera позволяет всем узлам принимать чтение и запись, автоматически синхронизирует данные и упрощает масштабирование при сохранении целостности данных.

Ключевые характеристики Galera кратко:

  • Многомастерность: чтение и запись на всех узлах.
  • Автоматическое подключение и исключение узлов при сбоях.
  • Синхронная репликация: изменения должны примениться на всех узлах кластера.

Опирайтесь на эту инструкцию, если у вас есть три и более Debian 10 узлов. Два узла теоретически возможны, но не дают устойчивости к сбоям: падение одного приведёт к остановке другого.

Требования

  • Три или более инстанций Debian 10 с сетью между ними.
  • root-доступ или пользователь с sudo.
  • Переменная окружения $EDITOR должна быть установлена.

Примечание: Galera работает как по локальным сетям, так и по WAN. Если узлы находятся в приватной сети, используйте приватные IP-адреса.

Если вы используете sudo-пользователя, откройте root-оболочку на время настройки:

sudo -s

Шаг 1: Установка MariaDB и зависимостей

Эти команды нужно выполнить на каждом узле.

apt update
apt install -y mariadb-server mariadb-client galera-3 rsync

Rsync используется Galera для передачи данных при синхронизации.

Включите автозапуск службы MariaDB:

systemctl enable mariadb.service

Запустите стандартный скрипт безопасности:

mysql_secure_installation

Следуйте подсказкам и задайте сильный пароль для root-пользователя MariaDB.

Пример ответов (следуйте собственным требованиям безопасности):

Enter current password for root (enter for none): Press 
Set root password? [Y/n] y
New password: your_password
Re-enter new password: your_password
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
All done!

Шаг 2: Конфигурация MariaDB для Galera

Эти изменения выполняются на всех узлах.

Остановите MariaDB перед правкой конфигурации:

systemctl stop mariadb.service

По умолчанию MariaDB слушает только localhost. Для работы кластера нужно слушать внешний интерфейс. Отредактируйте файл:

$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf

Найдите строку

bind-address = 127.0.0.1

Если узлы в приватной сети, укажите IP каждого узла. Если хотите слушать на всех интерфейсах, укажите:

bind-address = 0.0.0.0

Сохраните и выйдите.

Создайте файл опций кластера, одинаковый на всех узлах:

$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf

Вставьте следующую конфигурацию, заменив адреса на IP ваших узлов:

[galera]

wsrep_on = on
wsrep_provider = /lib/galera/libgalera_smm.so
wsrep_cluster_address = gcomm://192.0.2.1,192.0.2.2,192.0.2.3
wsrep_cluster_name = galera_cluster_0

default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
innodb_doublewrite = 1

binlog_format = ROW

Пояснения по ключам:

  • wsrep_on = on включает репликацию наборов изменений.
  • wsrep_provider указывает путь к библиотеке Galera, предоставляемой пакетом galera-3.
  • wsrep_cluster_address должен содержать по крайней мере один адрес члена кластера; рекомендуется перечислить все.
  • wsrep_cluster_name одинаков для всех узлов кластера.
  • Остальные параметры необходимы для корректной работы Galera.

Шаг 3: Инициализация (bootstrap) кластера

Убедитесь, что MariaDB остановлен на всех узлах:

systemctl status mariadb.service

На одном узле выполните инициализацию кластера. На Debian 10 используется вспомогательный скрипт galera_new_cluster. Скрипт должен быть выполнен только один раз, на одном узле:

galera_new_cluster

Проверьте статус сервиса после инициализации:

systemctl status mariadb.service

На остальных узлах просто запустите службу:

systemctl start mariadb.service

Проверьте, что кластер сформирован и узлы подключились.

Шаг 4: Тестирование работоспособности

На любом узле войдите в MariaDB:

mysql -u root -p

Создайте тестовую базу данных и выйдите:

CREATE DATABASE test0;
\q

На других узлах проверьте список баз данных:

mysql -u root -p -e "SHOW DATABASES;"

Ожидаемый вывод должен содержать test0. После проверки можно удалить тестовую БД:

mysql -u root -p -e "DROP DATABASE test0;"

Для полноты теста попробуйте писать из каждого узла и проверять консистентность данных.

Шаг 5: Диагностика и устранение неполадок

Просмотр статуса узла/кластера:

mysql -u root -p -e "SELECT * FROM information_schema.global_status WHERE variable_name IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY','WSREP_EVS_DELAYED','WSREP_READY');"

Значения полезны для быстрой оценки состояния:

  • WSREP_CLUSTER_SIZE — число узлов в компоненте кластера.
  • WSREP_CLUSTER_STATUS — состояние компонента (Primary или non-Primary).
  • WSREP_EVS_DELAYED — список узлов с задержками/проблемами соединения.
  • WSREP_EVS_REPL_LATENCY — латентность репликации в секундах.
  • WSREP_LOCAL_STATE_COMMENT — состояние текущего узла (Synced, Initialized и т.д.).
  • WSREP_READY — ON если узел принимает запросы.

Когда узел теряет связь в 3-узловом кластере, формируется Primary компонент с 2 узлами и non-Primary с 1 узлом. Узел non-Primary не будет принимать запросы до восстановления связи.

Если упал один узел, обычно при восстановлении соединения синхронизация происходит автоматически. В случае разрыва сети проверьте WSREP_EVS_DELAYED и логи MariaDB (/var/log/mysql/error.log). Частые причины проблем:

  • Неправильный bind-address.
  • Блокировка портов в брандмауэре.
  • Несоответствие конфигураций wsrep_cluster_name.
  • Разные версии библиотек Galera/MariaDB.

Советы по проверке сетевых соединений:

  • Убедитесь, что порты TCP 4567 (репликация), 4568 (источник IST), 4444 (SST) открыты между узлами.
  • Проверяйте время и таймзоны на узлах; значительный дрейф времени может повлиять на работу.

Руководство действий: быстрый чеклист для администратора

Для развертывания кластера (сводка для команды):

  1. Подготовить три узла с Debian 10 и статическими IP.
  2. Установить пакеты: mariadb-server, mariadb-client, galera-3, rsync.
  3. Настроить bind-address и создать 99-cluster.cnf с корректными IP.
  4. Инициализировать кластер на одном узле galera_new_cluster.
  5. Запустить службу на остальных узлах и проверить WSREP статусы.
  6. Провести тесты записи/чтения и проверку целостности.

Роли и обязанности:

  • Системный администратор: подготовка ОС, настройка сети и брандмауэра.
  • DBA: конфигурация MariaDB, тесты целостности, политики резервного копирования.
  • Операции: мониторинг, восстановление в случае инцидента.

Playbook: восстановление non-Primary узла

  1. Проверить состояние узла командой статуса MariaDB.
  2. Просмотреть логи /var/log/mysql/error.log.
  3. Убедиться, что сеть и порты доступны между узлом и Primary компонентом.
  4. Перезапустить mariadb.service на проблемном узле.
  5. Если автоматическая синхронизация не проходит, использовать SST (state snapshot transfer) метод, указанный в логах.

Критерии приёмки:

  • Кластер из трёх узлов стабильно показывает WSREP_CLUSTER_STATUS = Primary и WSREP_CLUSTER_SIZE = 3.
  • WSREP_READY = ON на каждом узле.
  • Запись на любом узле видна на остальных узлах в разумное время.

Частые ошибки и способы их решения

  • Ошибка: узлы не видят друг друга. Проверить bind-address, firewall, корректность IP в wsrep_cluster_address.
  • Ошибка: non-Primary после разрыва сети. Убедиться, что большая часть узлов сформировала Primary компонент. Если нет, перезапустить Primary компонент корректным образом.
  • Ошибка: разные версии Galera/MariaDB. Поддерживайте одинаковые версии ПО на всех узлах.

Безопасность и соответствие

  • Подключайте только доверенные сети к кластеру или используйте VPN/шлюз для WAN.
  • Храните пароли в управляемом хранилище секретов.
  • Минимизируйте права на учётные записи БД и используйте TLS, если данные проходят через публичные сети.
  • Для GDPR: если в кластере хранятся персональные данные, документируйте местоположение узлов, доступы и политику резервного копирования.

Набор тестов и критерии приёмки

  • Тест 1: создание БД на узле A, проверка появления на B и C.
  • Тест 2: одновременная запись на разных узлах; проверить отсутствие конфликтов для типичных рабочих нагрузок.
  • Тест 3: отключение одного узла и проверка, что Primary компонент продолжает обслуживать запросы.

Критерии приёмки описаны выше.

Справочная информация и полезные ресурсы

  • Проверка статуса Galera: запросы к information_schema.global_status (см. раздел Диагностика).
  • Порты: 4567 (репликация), 4568 (IST), 4444 (SST).
  • Файл провайдера Galera на Debian 10: /lib/galera/libgalera_smm.so

Цитата: “Galera обеспечивает прозрачную многомастерную репликацию и упрощает горизонтальное масштабирование баз данных”, — типичное мнение инженеров по высокой доступности.

Краткое резюме

Galera на MariaDB — надёжный выбор для приложений, которым требуется многомастерная синхронная репликация. Важны строгая унификация конфигураций, открытые сетевые порты и тестирование на реальных рабочих нагрузках. Следуйте шагам установки, используйте предложенные команды для диагностики и имейте готовый план восстановления при инцидентах.

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

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

Баланс в фотографии: виды и приёмы
Фотография

Баланс в фотографии: виды и приёмы

Как сохранить и выйти из Vi
Linux

Как сохранить и выйти из Vi

Как почистить контроллер PS4 — полный гайд
Геймерская периферия

Как почистить контроллер PS4 — полный гайд

Как печатать в Word: советы и макросы
Офис

Как печатать в Word: советы и макросы

Как продавать на Amazon — руководство для частных
Электронная коммерция

Как продавать на Amazon — руководство для частных

Очистка очереди печати в Windows 11
Windows

Очистка очереди печати в Windows 11