MySQL Group Replication (MGR) — встроенный механизм репликации и высокой доступности MySQL, введённый в MySQL 5.7.17 (2016). В отличие от классической Master-Slave репликации, Group Replication использует протокол группового консенсуса (Paxos) для гарантии согласованности данных на всех узлах группы.
Как работает
Group Replication основана на концепции виртуальной синхронной репликации:
- Транзакция на primary-узле перед коммитом передаётся всем членам группы (broadcast).
- Каждый узел применяет транзакцию локально и голосует за её принятие.
- При достижении кворума (большинство узлов подтвердили) транзакция коммитируется.
- При конфликте двух транзакций (concurrent writes к одной строке на разных узлах) одна отклоняется с rollback.
Два режима работы:
- Single-Primary Mode — только один узел принимает записи (primary), остальные — read-only secondary. При отказе primary автоматически выбирается новый через выборы. Рекомендуется для большинства случаев.
- Multi-Primary Mode — все узлы принимают записи. Требует разрешения конфликтов (conflict detection). Подходит при горизонтальном масштабировании записи.
Минимальный состав группы — 3 узла (для кворума). Максимум — 9. Группа функционирует при отказе не более (N-1)/2 узлов: из 3 — один, из 5 — два.
MySQL InnoDB Cluster
MySQL InnoDB Cluster — более высокоуровневое решение HA, включающее Group Replication + MySQL Shell для управления + MySQL Router для прозрачного роутинга запросов. MySQL Router автоматически направляет write-запросы на primary и read-запросы на secondary.
История
Разработка MySQL Group Replication началась в Oracle MySQL Team около 2013 года. MySQL 5.7.17 (декабрь 2016) — первый GA-релиз с MGR. MySQL 8.0 (2018) принёс значительные улучшения: лучший conflict detection, поддержка большего числа узлов. Galera Cluster (2008) — альтернативная реализация synchronous replication для MySQL/MariaDB, появившаяся раньше и ставшая ориентиром для разработчиков MGR.
MGR vs Galera Cluster vs Master-Slave
| Параметр | MGR | Galera Cluster | Master-Slave |
|---|---|---|---|
| Алгоритм | Paxos | Certification-based | Binlog streaming |
| Запись | 1 или N узлов | Все узлы | Только master |
| Задержка записи | Выше (консенсус) | Выше | Минимальная |
| Auto-failover | Да | Да | Нет (требует MHA) |
На что обращать внимание
Group Replication требует InnoDB — MyISAM-таблицы несовместимы. У каждой таблицы должен быть первичный ключ (PRIMARY KEY) — без него транзакции отклоняются группой. Multi-primary режим создаёт overhead на conflict detection: при высоком параллелизме записи производительность ниже single-primary. Сеть между узлами критична: latency выше 50–100 мс снижает throughput записи. ProxySQL или MySQL Router обязательны для прозрачного failover на уровне приложения — без роутера приложение нужно перенастраивать при смене primary.
Group Replication vs традиционная репликация
MySQL Group Replication (MGR) — встроенный в MySQL 5.7.17+ механизм multi-master репликации с автоматическим failover. В отличие от Master-Slave, MGR позволяет писать в любой узел кластера (multi-primary mode). Galera Cluster — альтернатива для MariaDB/Percona XtraDB Cluster. ProxySQL — балансировщик перед кластером: маршрутизирует READ на реплики, WRITE на primary. Требования к ресурсам MGR: минимум 3 узла, задержка между ними < 5 мс (для синхронного коммита). На VPS: 3 VPS в одном дата-центре — типичная конфигурация. ACID: MGR гарантирует consistent reads при правильной конфигурации.