Установка MariaDB Galera Cluster 10.1 на Ubuntu 16.04 (3 узла)
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 работают).
- При отключении одного узла остальные продолжают обслуживать запросы.
Тестовые кейсы:
- Создание БД и таблицы на Node1 → проверка на Node2/Node3.
- Добавление нагрузки: параллельные вставки на всех узлах → проверка консистентности.
- Отключение Node2 (shutdown) → проверка доступности на Node1/Node3.
- Включение Node2 → проверка, что происходит SST или IST и узел возвращается в кластер.
- Имитация сбоя сети между узлами → проверить, не приводит ли это к 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 с дополнительными инструментами).
Операции обслуживания и обновление
Рекомендованная методика обновления без даунтайма:
- Уберите один узел из нагрузки (переведите реплики на другие узлы).
- Остановите MariaDB на нём, обновите пакеты и перезапустите.
- Убедитесь, что узел корректно встал в кластер (wsrep_cluster_size увеличился).
- Повторите для следующих узлов по очереди.
Резервное восстановление узла (быстрый сценарий):
- Если узел полностью потерян, создайте новый сервер с теми же параметрами и просто запустите под присоединением к кластеру — произойдёт 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 — смотрите последние руководства и рекомендации по производительности.
Похожие материалы
Исчезающие фото и видео в WhatsApp
Надстройки и коннекторы Outlook — руководство
Как превратить Nintendo DS в MP3‑плеер
Как играть в Jackbox через Zoom
Shell builtins: как проверить команду в Linux