Galera Cluster — плагин синхронной репликации для MySQL и MariaDB, разработанный компанией Codership. В отличие от стандартной MySQL-репликации (один master, один или несколько slave), Galera реализует схему multi-master: каждый узел кластера принимает как запросы на запись, так и на чтение. Данные реплицируются синхронно — транзакция считается зафиксированной только после подтверждения от всех узлов. Это исключает потерю данных при падении любого узла.
Как работает
Ключевая концепция — сертификационная репликация (certification-based replication). При фиксации транзакции узел формирует write-set: набор изменённых строк плюс информацию о блокировках. Write-set рассылается всем узлам кластера. Каждый узел независимо проверяет (сертифицирует) write-set на конфликты с локальными транзакциями. Если конфликтов нет — транзакция применяется на всех узлах одновременно. При конфликте транзакция откатывается на инициировавшем узле.
Транспортный уровень — библиотека wsrep API (Write-Set Replication), использующая протокол Galera Replication Plugin поверх TCP. Порты: 3306 (MySQL), 4567 (Galera replication), 4568 (IST — Incremental State Transfer), 4444 (SST — State Snapshot Transfer).
Кворум — обязательное условие работы кластера. При разделении сети (network split) часть с большинством узлов продолжает работу, меньшинство переходит в read-only. Именно поэтому минимальное количество узлов — 3: при 2 узлах невозможно определить большинство при разделении. При чётном числе узлов добавляют Arbitrator — лёгкий процесс garbd, участвующий в кворуме без хранения данных.
SST (State Snapshot Transfer) — полная копия данных при добавлении нового узла или восстановлении упавшего. SST использует mysqldump, rsync или xtrabackup. Xtrabackup предпочтителен: создаёт снэпшот без остановки донора. IST (Incremental State Transfer) — передача только недостающих транзакций, если узел отставал недолго.
История
Codership основана в 2007 году в Финляндии. Первая версия Galera Cluster для MySQL выпущена в 2008 году. MariaDB включила Galera Cluster в MariaDB Galera Cluster в 2012 году. Percona XtraDB Cluster (PXC) — коммерческая реализация на базе Galera от Percona, выпущена в 2012-м. К 2020-м годам Galera стала стандартом для высокодоступных MySQL-кластеров в хостинге и PaaS.
Виды конфигураций
- 3-узловой кластер — базовая конфигурация с кворумом. Один узел может упасть без потери работоспособности.
- 5-узловой кластер — два узла могут упасть одновременно. Применяется в mission-critical системах.
- Geo-distributed cluster — узлы в разных дата-центрах. Требует стабильного low-latency соединения между ДЦ (не более 5–10 мс RTT для приемлемой производительности).
На что обращать внимание
Galera подходит не для всех рабочих нагрузок. Оптимален для OLTP с короткими транзакциями и равномерной записью на все узлы. Неоптимален для аналитических запросов (OLAP), работы с большими транзакциями (bulk INSERT миллионов строк), и для приложений, сильно нагружающих конкретный master. Параметр wsrep_sync_wait управляет causal consistency: при значении 1 каждый SELECT дожидается применения всех pending write-sets — увеличивает задержку, но гарантирует чтение актуальных данных.
Для VPS-хостинга: минимальный сервер для узла Galera Cluster — 2 vCPU, 4 ГБ RAM, NVMe-диск. Производительность сильно зависит от пропускной способности сети между узлами. Балансировщик нагрузки (ProxySQL или HAProxy) распределяет запросы между узлами.
Galera Cluster обеспечивает синхронную репликацию MySQL/MariaDB между несколькими VPS. Используется как Master-Master репликация. Балансировщик нагрузки распределяет запросы. Резервное копирование с любого узла кластера. SLA повышается за счёт отказоустойчивости.