Развертывание отказоустойчивого кластера Galera Cluster / Percona XtraDB Cluster
- Необходимость обеспечения нулевого RPO и быстрого автоматического failover без потери данных.
- Ограничения стандартной асинхронной master-slave репликации при аварийном падении основного мастера.
- Требование возможности чтения и записи на любой из узлов кластера.
1. Настройка сетевых портов и брандмауэра на всех 3 узлах
# Порты: 3306 (MySQL), 4567 (Galera replication), 4568 (IST), 4444 (SST snapshot)
ufw allow 3306,4567,4568,4444/tcp
ufw allow 4567/udp2. Конфигурация /etc/mysql/my.cnf (на примере Ноды 1)
[mysqld]
default_storage_engine = InnoDB
binlog_format = ROW
innodb_autoinc_lock_mode = 2
# Настройки провайдера Galera
wsrep_on = ON
wsrep_provider = /usr/lib/galera4/libgalera_smm.so
wsrep_cluster_name = "pxc_production_cluster"
wsrep_cluster_address = "gcomm://192.168.1.11,192.168.1.12,192.168.1.13"
wsrep_node_name = "pxc-node-01"
wsrep_node_address = "192.168.1.11"
# Метод первичной синхронизации (SST)
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = "sstuser:SSTSecretPass"3. Инициализация первой ноды (Bootstrap)
# Запуск первой ноды нового кластера
galera_new_cluster
# Проверка размера кластера (должен вернуть 1)
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';"4. Включение остальных узлов (Ноды 2 и 3)
# На остальных узлах запускается стандартный сервис
systemctl start mysqld
# Проверка финального размера кластера на любом узле
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';" # Ожидается: 3 Частые вопросы (FAQ)
Почему кластер Galera требует минимум 3 узла?
Для предотвращения ситуации Split-Brain при разделении сети требуется кворум (большинство голосов 50% + 1). В кластере из 2 узлов при потере связи кворум не соберет ни одна половина.
Зачем устанавливать innodb_autoinc_lock_mode = 2?
Значение 2 (interleaved mode) исключает блокировки таблиц при генерации автоинкрементных ключей, что необходимо для параллельной синхронной репликации транзакций между нодами.