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

Настройка Percona XtraDB Cluster (3 узла) на Debian 8

6 min read Databases Обновлено 24 Nov 2025
Percona XtraDB Cluster на Debian 8 — 3 узла
Percona XtraDB Cluster на Debian 8 — 3 узла

Зачем нужен трёхузловой кластер и что такое quorum

Трёхузловая конфигурация обеспечивает возможность автоматически определить, какая часть кластера имеет актуальные данные при разрыве связи между узлами. Чётность количества узлов важна, чтобы избежать ситуации «split brain» — когда две изолированные части кластера принимают независимые записи, и при восстановлении соединения непонятно, какая версия данных правильная.

Quorum — минимальное число узлов, необходимое для определения корректной стороны. Для трёх узлов quorum = 2. Это значит, что всегда должны быть подключены по крайней мере два узла. Если все три узла окажутся недоступными одновременно, потребуется ручная выборка узла для загрузки кластера (bootstrap).

Важно: multicast/heartbeat и корректные записи в /etc/hosts облегчают обнаружение и соединение узлов.

Кому полезна эта инструкция

  • DBA и инженерам DevOps, которым нужен высокодоступный MySQL с возможностью записи на любом узле.
  • Тем, кто использует Percona XtraDB Cluster (Galera) и хочет развернуть тестовый или production‑кластер на Debian 8.

Ключевые понятия (в одну строку)

  • Galera: синхронный слой репликации для MySQL/Percona.
  • SST: State Snapshot Transfer — полная синхронизация состояния при присоединении узла.
  • wsrep: набор системных переменных и параметров Galera.

Требования и предвариельная подготовка

Минимальные требования:

  • Три сервера с Debian 8 (Jessie). Рекомендуется одинаковая версия ОС и сетевых настроек.
  • Постоянные IP-адреса и корректные записи в /etc/hosts на каждом узле.
  • Доступ root для установки пакетов и редактирования конфигурации.

Пример конфигурации хостов (выполните на каждом узле):

127.0.0.1 localhost  
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2
192.168.152.120 mysql3.local.vm mysql3  
  
# The following lines are desirable for IPv6 capable hosts  
::1 localhost ip6-localhost ip6-loopback  
ff02::1 ip6-allnodes  
ff02::2 ip6-allrouters

Совет: проверьте связность с помощью ping/nc/telnet по порту 3306 и 4567 (порт Galera) между узлами.

Шаг 1. Установка Percona XtraDB Cluster

На всех узлах выполните команды от root:

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb  
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb  
apt-get update  
apt-get -y install percona-xtradb-cluster-57

При установке укажите пароль для MySQL root, когда установщик запросит. После установки служба mysqld может запуститься автоматически. Остановите её на всех трёх узлах перед внесением конфигурации:

/etc/init.d/mysql stop

Важно: не оставляйте одинаковые идентификаторы узлов и пароли в production без дополнительной защиты.

Шаг 2. Конфигурация первого узла (bootstrap)

На первом узле (mysql1.local.vm, 192.168.152.100) добавьте в конец секции [mysqld] файла /etc/mysql/my.cnf следующие строки (оставьте другие параметры без изменений):

[mysqld]  
  
...

# Path to Galera library  
wsrep_provider=/usr/lib/libgalera_smm.so  

# Cluster connection URL contains the IPs of node#1, node#2 and node#3  
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120  

# In order for Galera to work correctly binlog format should be ROW  
binlog_format=ROW  

# MyISAM storage engine has only experimental support  
default_storage_engine=InnoDB  

# This InnoDB autoincrement locking mode is a requirement for Galera  
innodb_autoinc_lock_mode=2  

# Node #1 address  
wsrep_node_address=192.168.152.100  

# SST method  
wsrep_sst_method=xtrabackup-v2  

# Cluster name  
wsrep_cluster_name=my_ubuntu_cluster  

# Authentication for SST method  
wsrep_sst_auth="sstuser:PASSW0RD"

Обратите внимание на пароль в wsrep_sst_auth — в примере использовано “PASSW0RD”. Подумайте о безопасном хранении этих учётных данных.

После сохранения конфигурации запустите первый узел в режиме bootstrap:

root@mysql1:~# /etc/init.d/mysql bootstrap-pxc

Вы должны увидеть подтверждение успешного запуска:

[ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..

Проверьте статус кластера в mysql:

mysql> show status like 'wsrep%';

В примере ожидаемые переменные: wsrep_cluster_size = 1, wsrep_connected = ON, wsrep_ready = ON, wsrep_local_state_comment = Synced.

Создайте пользователя для SST (XtraBackup) на первом узле:

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'PASSW0RD';
mysql> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;

Важно: можно использовать root для SST, но безопаснее создать отдельного пользователя с ограниченными привилегиями.

Шаг 3. Конфигурация второго узла

На втором узле (mysql2.local.vm, 192.168.152.110) внесите аналогичные строки в /etc/mysql/my.cnf, изменив только адрес узла:

[mysqld]  
  
...

# Path to Galera library  
wsrep_provider=/usr/lib/libgalera_smm.so  

# Cluster connection URL contains the IPs of node#1, node#2 and node#3  
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120  

# In order for Galera to work correctly binlog format should be ROW  
binlog_format=ROW  

# MyISAM storage engine has only experimental support  
default_storage_engine=InnoDB  

# This InnoDB autoincrement locking mode is a requirement for Galera  
innodb_autoinc_lock_mode=2  

# Node #2 address  
wsrep_node_address=192.168.152.110  

# SST method  
wsrep_sst_method=xtrabackup-v2  

# Cluster name  
wsrep_cluster_name=my_ubuntu_cluster  

# Authentication for SST method  
wsrep_sst_auth="sstuser:PASSW0RD"

Запустите MySQL обычным образом (без bootstrap):

root@mysql2:~# /etc/init.d/mysql start

При старте второй узел автоматически запросит SST у первого узла. Проверьте статус:

mysql> show status like 'wsrep%';

Ожидайте wsrep_cluster_size = 2 и wsrep_local_state_comment = Synced.

Шаг 4. Конфигурация третьего узла

На третьем узле (mysql3.local.vm, 192.168.152.120) повторите ту же конфигурацию, изменив wsrep_node_address на 192.168.152.120:

[mysqld]  
  
...

# Path to Galera library  
wsrep_provider=/usr/lib/libgalera_smm.so  

# Cluster connection URL contains the IPs of node#1, node#2 and node#3  
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120  

# In order for Galera to work correctly binlog format should be ROW  
binlog_format=ROW  

# MyISAM storage engine has only experimental support  
default_storage_engine=InnoDB  

# This InnoDB autoincrement locking mode is a requirement for Galera  
innodb_autoinc_lock_mode=2  

# Node #2 address  
wsrep_node_address=192.168.152.120  

# SST method  
wsrep_sst_method=xtrabackup-v2  

# Cluster name  
wsrep_cluster_name=my_ubuntu_cluster  

# Authentication for SST method  
wsrep_sst_auth="sstuser:PASSW0RD"

Запустите MySQL:

root@mysql3:~# /etc/init.d/mysql start

Проверяйте статус. В норме wsrep_cluster_size = 3 и все узлы должны быть Synced.

Если при старте возникают проблемы, смотрите логи в /var/log/syslog и /var/log/mysql/error.log. Пример строки из syslog, показывающей процесс передачи состояния:

Oct 4 12:16:13 mysql3 mysql[2767]: Starting MySQL (Percona XtraDB Cluster) database server: mysqld . . .State transfer in progress, setting sleep higher: mysqld . ..  
Oct 4 12:16:13 mysql3 systemd[1]: Started LSB: Start and stop the mysql (Percona XtraDB Cluster) daemon.  
Oct 4 12:17:01 mysql3 CRON[3731]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

В этом примере видна передача состояния (State Transfer).

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

Приведём простой тест, чтобы убедиться, что запись, созданная на одном узле, видна на всех остальных.

  1. На втором узле создайте базу данных:
mysql@mysql2> CREATE DATABASE percona;
Query OK, 1 row affected (0.01 sec)
  1. На третьем узле создайте таблицу в этой базе:
mysql@mysql3> USE percona;
Database changed

mysql@pxc3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.05 sec)
  1. На первом узле вставьте запись:
mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');
Query OK, 1 row affected (0.02 sec)
  1. На втором узле проверьте результат:
mysql@mysql2> SELECT * FROM percona.example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+
1 row in set (0.00 sec)

Если данные синхронизировались, репликация работает.

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


Практические рекомендации и безопасность

  • Фаерволл: откройте только необходимые порты (3306, 4567/4568 для Galera, 4444 для SST если используется). По возможности ограничьте доступ по IP.
  • Учетные записи: используйте отдельного пользователя для SST (как показано) и минимальные привилегии.
  • Бекапы: регулярно делайте бэкапы и тестируйте восстановление. SST не заменяет резервное копирование при логической ошибке приложения.
  • Авто‑апдейты: в production планируйте окна обслуживания для обновлений Percona.
  • Мониторинг: контролируйте wsrep_* переменные и метрики задержек репликации.

Важно: храните wsrep_sst_auth в безопасном месте и не кладите пароли в публичные репозитории.

Отладка: основные сценарии проблем и решения

  1. Узел не подключается к кластеру

    • Проверить /etc/hosts и сетевую связность.
    • Убедиться, что wsrep_cluster_address содержит все IP.
    • Проверить логи /var/log/mysql/error.log и /var/log/syslog.
  2. Долгая передача состояния (SST)

    • SST с XtraBackup может занять значительное время при больших базах. Убедитесь в наличии места на диске и пропускной способности сети.
    • Для больших данных используйте Incremental IST (если применимо) или подготовьте узлы заранее.
  3. Split brain после массового отказа

    • Если все узлы недоступны, при восстановлении решите вручную, какой узел будет bootstrap. Проверьте последние логи и внешний источник правды.
  4. Конфликты автоинкремента

    • Параметр innodb_autoinc_lock_mode=2 необходим для согласованного поведения автоинкремента в Galera.

Когда эта схема не подойдёт (контрпримеры)

  • Если ваши транзакции сильно зависят от локальных триггеров/функций с побочными эффектами, мульти‑мастер может усложнить консистентность.
  • Если задержки сети между узлами большие (>100мс), синхронная репликация ухудшит производительность записей.
  • Если у вас большой объём одноразовых нагрузочных вставок, SST/IST может съесть значительные ресурсы.

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

  • Асинхронная репликация Master‑Slave — проще, но есть задержка и потеря возможности записывать на всех узлах.
  • MySQL Group Replication — встроенное решение от Oracle с собственными особенностями.
  • Кластерные файловые системы и шардинг — для специфичных сценариев масштабирования.

Роль‑ориентированные чеклисты

DBA:

  • Настроить резервное копирование и проверку restore.
  • Мониторить wsrep_* переменные.
  • Провести план отката и процедуру bootstrap.

DevOps:

  • Настроить /etc/hosts и сеть между узлами.
  • Настроить firewall и LB перед кластером.
  • Автоматизировать установку пакетов и конфигураций.

Разработчик приложения:

  • Проверить, что приложение корректно обрабатывает транзакции и конфликты.
  • Не полагаться на моментальные консистентные чтения без проверки ошибок.

Факт‑бокс: ключевые числа и значения

  • Узлы: 3
  • Quorum: 2
  • Порты Galera: 4567 (события), 4568 (IST), 4444 (SST по умолчанию), 3306 (MySQL)
  • innodb_autoinc_lock_mode: 2 (рекомендуется)

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

  • Все три узла в статусе wsrep_local_state_comment = Synced.
  • wsrep_cluster_size = 3.
  • SST успешно выполняется при добавлении нового узла.
  • Запись, сделанная на любом узле, видна на остальных.

Короткая инструкция по восстановлению после split brain

  1. Остановить MySQL на всех узлах: /etc/init.d/mysql stop
  2. Выбрать узел с наибольшим и корректным набором данных (по логам и времени).
  3. На выбранном узле выполнить: /etc/init.d/mysql bootstrap-pxc
  4. На остальных узлах выполнить обычный старт: /etc/init.d/mysql start
  5. Проверить wsrep_cluster_size и состояние Synced.

Глоссарий (1 строка)

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

Итог: трёхузловой Percona XtraDB Cluster на Debian 8 даёт отказоустойчивую мульти‑мастер репликацию при условии правильной сетевой конфигурации, защищённых учётных данных для SST и мониторинга состояния wsrep. Планируйте резервные копии, мониторйте метрики и тестируйте процедуру восстановления заранее.

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

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

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

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

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

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

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

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

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

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

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

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

Изменить место сохранения фото Камеры в Windows
Windows

Изменить место сохранения фото Камеры в Windows