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

Введение
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 rsyncRsync используется 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) открыты между узлами.
- Проверяйте время и таймзоны на узлах; значительный дрейф времени может повлиять на работу.
Руководство действий: быстрый чеклист для администратора
Для развертывания кластера (сводка для команды):
- Подготовить три узла с Debian 10 и статическими IP.
- Установить пакеты: mariadb-server, mariadb-client, galera-3, rsync.
- Настроить bind-address и создать 99-cluster.cnf с корректными IP.
- Инициализировать кластер на одном узле galera_new_cluster.
- Запустить службу на остальных узлах и проверить WSREP статусы.
- Провести тесты записи/чтения и проверку целостности.
Роли и обязанности:
- Системный администратор: подготовка ОС, настройка сети и брандмауэра.
- DBA: конфигурация MariaDB, тесты целостности, политики резервного копирования.
- Операции: мониторинг, восстановление в случае инцидента.
Playbook: восстановление non-Primary узла
- Проверить состояние узла командой статуса MariaDB.
- Просмотреть логи /var/log/mysql/error.log.
- Убедиться, что сеть и порты доступны между узлом и Primary компонентом.
- Перезапустить mariadb.service на проблемном узле.
- Если автоматическая синхронизация не проходит, использовать 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 — надёжный выбор для приложений, которым требуется многомастерная синхронная репликация. Важны строгая унификация конфигураций, открытые сетевые порты и тестирование на реальных рабочих нагрузках. Следуйте шагам установки, используйте предложенные команды для диагностики и имейте готовый план восстановления при инцидентах.
Похожие материалы
Баланс в фотографии: виды и приёмы
Как сохранить и выйти из Vi
Как почистить контроллер PS4 — полный гайд
Как печатать в Word: советы и макросы