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

Установка MariaDB Galera Cluster 10.1 на Ubuntu 16.04 (3 узла)

7 min read Databases Обновлено 27 Nov 2025
MariaDB Galera Cluster 10.1 на Ubuntu 16.04 — пошагово
MariaDB Galera Cluster 10.1 на Ubuntu 16.04 — пошагово

MariaDB Galera — это синхронный multi-master кластер для MariaDB. В этом руководстве пошагово показано, как установить и настроить Galera Cluster 10.1 на трёх узлах Ubuntu 16.04 (IP: 192.168.0.102, .103, .104), настроить сеть/фаервол и проверить репликацию. Включены чек-листы для ролей, команда «шпаргалка», сценарии тестирования и советы по отладке.

Введение

MariaDB Galera — решение для высокодоступных баз данных с активным multi-master режимом. Начиная с MariaDB 10.1 пакеты сервера и Galera объединены и при установке MariaDB автоматически подключают зависимости Galera. Galera поддерживает InnoDB/XtraDB как движок хранения и обеспечивает синхронную репликацию на уровне строк.

Ключевые возможности (в одно предложение каждая):

  • Синхронная репликация: транзакции подтверждаются на всех узлах одновременно.
  • Автоматическое присоединение узлов: новые узлы автоматически синхронизируются при подключении.
  • Active-active multi-master: чтение и запись возможны на любом узле.
  • Параллельная репликация на уровне строк: повышает производительность для параллельных транзакций.
  • Масштабирование чтения/записи и уменьшение задержек клиента.
  • Автоисключение неработающих узлов: падающие узлы автоматически исключаются из кластера.

Кому пригодится это руководство

  • DBA и системным администраторам, которые хотят повысить доступность MariaDB.
  • DevOps-инженерам для развёртывания отказоустойчивых сред в локальной сети.
  • Командам, которым нужна консистентная репликация между несколькими центрами обработки данных в одной сети.

Важно: это руководство описывает установку для тестовой/лабораторной среды на Ubuntu 16.04. В продакшне добавьте резервное копирование, мониторинг и правильно спроектированную сеть.

Требования

  • Три узла с Ubuntu 16.04 (Server). Каждый узел должен иметь статический IP: 192.168.0.102 (Node1), 192.168.0.103 (Node2), 192.168.0.104 (Node3).
  • На каждом узле — непривилегированный пользователь с sudo.
  • Доступ между узлами по сети (порты, перечисленные ниже, должны быть открыты).

Краткое определение терминов:

  • Узел — отдельный сервер, участвующий в кластере.
  • SST (State Snapshot Transfer) — полная передача состояния при синхронизации нового или отстающего узла.
  • IST (Incremental State Transfer) — инкрементная передача изменений.

Подготовка узлов

Обновите пакетную базу и примените обновления на всех трёх узлах:

sudo apt-get update -y  
sudo apt-get upgrade -y

Перезагрузите узлы, если требуется. Затем выполните вход под sudo-пользователем и переходите к установке MariaDB.

Установка MariaDB Galera

MariaDB 10.1 не всегда доступна в стандартных репозиториях Ubuntu 16.04, поэтому добавим официальный репозиторий MariaDB на всех узлах.

Добавьте ключ репозитория:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Добавьте репозиторий и обновите кэш APT:

sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'  
sudo apt-get update -y

Установите MariaDB и rsync (rsync используется для SST по умолчанию в этом руководстве):

sudo apt-get install mariadb-server rsync -y

После установки запустите скрипт безопасности MariaDB на каждом узле:

sudo mysql_secure_installation

При прохождении скрипта установите пароль root (или оставьте пустым, если хотите управлять иначе), удалите анонимных пользователей, запретите удалённый вход root и удалите тестовую базу, отвечая на вопросы согласно потребностям безопасности.

Пример ответов (ориентир):

Enter current password for root (enter for none):
Change the root password? [Y/n] n
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

Настройка Galera на Node1

На Node1 создайте конфигурационный файл Galera. MariaDB читает дополнительные конфигурации из /etc/mysql/conf.d/.

sudo 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://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.102"
wsrep_node_name="Node1"

Примечание: 192.168.0.102 — IP Node1.

Добавление Node2 и Node3

На Node2 и Node3 повторите создание /etc/mysql/conf.d/galera.cnf, изменив только wsrep_node_address и wsrep_node_name. Примеры сконфигурированных файлов приведены ниже (сохраняйте содержимое в точности как блоки кода).

Node2:

[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://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.103"
wsrep_node_name="Node2"

Node3:

[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://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.104"
wsrep_node_name="Node3"

Примечание: wsrep_cluster_address содержит адреса всех узлов; порядок не критичен, но все IP должны быть доступны.

Настройка фаервола (UFW)

Galera использует порты:

  • 3306/tcp — MySQL клиентские подключения
  • 4444/tcp — State Snapshot Transfer (SST)
  • 4567/tcp — Galera replication traffic (коннекты и state transfer)
  • 4567/udp — членство и обнаружение
  • 4568/tcp — Incremental State Transfer (редко требуется отдельно)

Разрешите порты на всех узлах:

sudo ufw enable
sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4567/udp
sudo ufw allow 4568/tcp

Проверьте статус:

sudo ufw status

Совет: если узлы находятся в одной приватной сети, рассмотрите ограничение правил по IP (например sudo ufw allow from 192.168.0.0/24 to any port 4567).

Запуск кластера

Перед стартом Galera убедитесь, что служба MariaDB остановлена на всех узлах:

sudo systemctl stop mysql

На Node1 инициализируйте новый кластер (bootstrapping):

sudo galera_new_cluster

Проверьте размер кластера на Node1:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Вы должны увидеть:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

На Node2 запустите сервис MariaDB:

sudo systemctl start mysql

Проверьте статус сервиса и размер кластера (на Node2 или Node1):

sudo systemctl status mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Ожидаемый ответ (постепенно):

| wsrep_cluster_size | 2     |

Повторите для Node3 (запустите mysql и проверьте размер кластера):

sudo systemctl start mysql  
mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Ожидаемый результат:

| wsrep_cluster_size | 3     |

Если размер кластера соответствует количеству узлов — кластер работает.

Тестирование репликации

Создайте базу на Node1 и посмотрите, синхронизировалась ли она на других узлах.

mysql -u root -p
MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;

Ожидаемый вывод:

+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

На Node2 и Node3 выполните:

mysql -u root -p  
MariaDB [(none)]> show databases;

Если test_db присутствует — репликация работает.

Чек-листы (роль-ориентированные)

DBA (перед развёртыванием):

  • Подтвердить требуемую модель репликации (синхронная vs асинхронная).
  • Настроить политики бэкапа (регулярные дампы, LVM-snapshots, или PITR).
  • Настроить мониторинг wsrep_* метрик (например Prometheus + exporter).
  • Протестировать восстановление SST и IST на тестовом окружении.

Системный администратор/DevOps:

  • Настроить сеть и разрешить порты Galera только между узлами.
  • Автоматизировать развёртывание конфигурации и секретов (Ansible/Chef/Puppet).
  • Настроить логирование и ротацию логов.
  • План обслуживания: порядок перезагрузки и процедуры обновления.

Разработчик:

  • Избегать длительных транзакций, которые блокируют автоинкременты.
  • Использовать idempotent миграции схемы и тестировать их в кластере.
  • Планировать распределённые блокировки осторожно (wsrep_autocommit влияет на поведение).

Сценарии тестирования и критерии приёмки

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

  • Кластер запускается и показывает wsrep_cluster_size равный количеству узлов.
  • Создание/удаление базы данных и строк синхронно отражается на всех узлах.
  • После перезапуска одного узла он корректно реинтегрируется (SST/IST работают).
  • При отключении одного узла остальные продолжают обслуживать запросы.

Тестовые кейсы:

  1. Создание БД и таблицы на Node1 → проверка на Node2/Node3.
  2. Добавление нагрузки: параллельные вставки на всех узлах → проверка консистентности.
  3. Отключение Node2 (shutdown) → проверка доступности на Node1/Node3.
  4. Включение Node2 → проверка, что происходит SST или IST и узел возвращается в кластер.
  5. Имитация сбоя сети между узлами → проверить, не приводит ли это к split-brain (при правильном конфиге — нет).

Распространённые проблемы и отладка

  • wsrep_cluster_size не увеличивается: проверьте сетевые настройки, доступность портов и совпадение wsrep_cluster_name на всех узлах.
  • Узел зависает на SST: убедитесь, что rsync установлен и доступен, проверьте права на /var/lib/mysql и свободное место на диске.
  • Split-brain: возникает редко при ошибках сети; используйте quorum и корректную конфигурацию wsrep_cluster_address.
  • Различия в версиях MariaDB/Galera: используйте одинаковые версии на всех узлах.

Полезные команды для диагностики:

mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'wsrep_%'"
sudo journalctl -u mariadb -f
sudo tail -n 200 /var/log/mysql/error.log
netstat -plnt | grep 4567

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

  • Отключите удалённый root-доступ и используйте отдельных пользователей с минимальными привилегиями.
  • Трафик между узлами по возможности держите в приватной сети или VPN.
  • Регулярно делайте бэкапы (полные и инкрементные) и тестируйте восстановление.
  • Шифрование: для передачи данных используйте защищённые каналы для приложений; Galera сам по себе не шифрует трафик — можно туннелировать через IPsec или VPN.

Альтернативные подходы и когда Galera не подходит

Когда Galera не лучший выбор:

  • Очень большие объёмы записи с пиковыми транзакциями, генерирующими много конфликтов — синхронная репликация может снизить пропускную способность.
  • Если требуется геораспределённый кластер с высокой задержкой между дата-центрами, IST/SST могут быть неэффективны.

Альтернативы:

  • Master-slave асинхронная репликация MySQL/MariaDB (если допустима несогласованность в короткие периоды).
  • Percona XtraDB Cluster (аналогичное решение на базе Galera с дополнительными инструментами).

Операции обслуживания и обновление

Рекомендованная методика обновления без даунтайма:

  1. Уберите один узел из нагрузки (переведите реплики на другие узлы).
  2. Остановите MariaDB на нём, обновите пакеты и перезапустите.
  3. Убедитесь, что узел корректно встал в кластер (wsrep_cluster_size увеличился).
  4. Повторите для следующих узлов по очереди.

Резервное восстановление узла (быстрый сценарий):

  • Если узел полностью потерян, создайте новый сервер с теми же параметрами и просто запустите под присоединением к кластеру — произойдёт SST от одного из живых узлов.

Шпаргалка — команды

  • Остановить MariaDB: sudo systemctl stop mysql
  • Запустить MariaDB: sudo systemctl start mysql
  • Инициализация нового кластера: sudo galera_new_cluster
  • Проверить размер кластера: mysql -u root -p -e “show status like ‘wsrep_cluster_size’”
  • Показать wsrep-статусы: mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘wsrep_%’”

Заключение

Вы успешно настроили MariaDB Galera Cluster 10.1 на трёх узлах Ubuntu 16.04 и проверили работу синхронной репликации. Для перехода в production дополните развёртывание мониторингом, резервным копированием, политиками безопасности и автоматизированными скриптами развертывания.

Важно

  • Всегда тестируйте SST/IST на тестовой среде перед применением в production.
  • Поддерживайте одинаковые версии MariaDB/Galera на всех узлах.

Ресурсы для дальнейшего чтения

  • Официальная документация Galera Cluster — смотрите последние руководства и рекомендации по производительности.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Исчезающие фото и видео в WhatsApp
Мессенджеры

Исчезающие фото и видео в WhatsApp

Надстройки и коннекторы Outlook — руководство
Электронная почта

Надстройки и коннекторы Outlook — руководство

Как превратить Nintendo DS в MP3‑плеер
Руководство

Как превратить Nintendo DS в MP3‑плеер

Как играть в Jackbox через Zoom
Игры

Как играть в Jackbox через Zoom

Shell builtins: как проверить команду в Linux
Linux

Shell builtins: как проверить команду в Linux

VPN не работает на iPhone — пошаговое руководство
Руководство

VPN не работает на iPhone — пошаговое руководство