Кластер Galera¶
Galera Cluster — это программное решение для синхронной многомастерной репликации данных, предназначенное для систем управления базами данных (СУБД), совместимых с MySQL. Оно позволяет создавать высокодоступные и отказоустойчивые кластеры, в которых каждый узел является мастером (primary) и может обрабатывать как операции чтения, так и записи, обеспечивая согласованность данных на всех узлах в реальном времени.
¶История
Разработка Galera Cluster началась в 2007 году компанией Codership Oy, основанной в Финляндии. Основной целью проекта было создание надёжного механизма синхронной репликации, который мог бы решить проблемы, присущие традиционной асинхронной репликации MySQL (например, задержки и потеря данных). Первая стабильная версия была выпущена в 2008 году. Впоследствии технология была интегрирована в такие популярные дистрибутивы, как MariaDB (в виде MariaDB Galera Cluster) и Percona XtraDB Cluster. Galera Cluster стал одним из стандартных решений для построения отказоустойчивых MySQL-совместимых баз данных.
¶Архитектура и принцип работы
¶Многомастерная репликация
В отличие от традиционной модели «один мастер — несколько реплик», где все операции записи выполняются только на одном узле, Galera Cluster реализует многомастерную (multi-master) топологию. Это означает, что любой узел кластера может принимать запросы на запись. Изменения, внесённые на одном узле, автоматически и синхронно распространяются на все остальные узлы.
¶Синхронная репликация
Ключевая особенность Galera — синхронный характер репликации. Транзакция считается успешно завершённой только после того, как она будет применена на всех узлах кластера. Это гарантирует, что данные на всех узлах всегда находятся в согласованном состоянии (strong consistency). Для достижения синхронности используется протокол Group Communication и механизм Certification.
¶Протокол Group Communication
Galera использует собственную реализацию протокола групповой связи (Group Communication System, GCS). Этот протокол отвечает за:
- Обнаружение членов кластера: автоматическое определение новых узлов и выход существующих из строя.
- Распространение сообщений: гарантированная доставка всех изменений (write-set'ов) всем узлам кластера в одном и том же порядке.
- Управление членством: поддержание единого представления о составе кластера.
¶Процесс выполнения транзакции
- Выполнение: Клиент отправляет запрос на запись на любой узел кластера.
- Создание write-set: Узел формирует набор изменений (write-set), содержащий изменённые строки данных и их идентификаторы.
- Распространение: Write-set отправляется всем остальным узлам кластера через протокол GCS.
- Сертификация: Каждый узел выполняет процедуру сертификации — проверку, не возникнет ли конфликта при применении данного write-set'а к его локальной копии данных. Для этого используется глобальный порядок транзакций и механизм блокировок на уровне строк.
- Применение: Если сертификация пройдена успешно, write-set применяется на каждом узле. Если сертификация не пройдена (обнаружен конфликт), транзакция откатывается на всех узлах.
- Подтверждение: После успешного применения на всех узлах, транзакция подтверждается клиенту.
¶Механизм IST (Incremental State Transfer) и SST (State Snapshot Transfer)
Для синхронизации узлов, которые долгое время были отключены от кластера или присоединяются впервые, используются два механизма:
- IST (Incremental State Transfer): Передаются только те изменения, которые были пропущены узлом с момента его отключения. Используется, когда узел отсутствовал недолго и его журнал транзакций (gcache) ещё не был перезаписан.
- SST (State Snapshot Transfer): Выполняется полная передача копии данных с одного узла (donor) на другой (joiner). Используется при первом подключении узла или при длительном отсутствии, когда IST невозможен. SST может выполняться различными методами: rsync, mysqldump, xtrabackup и другими.
¶Классификация и виды
¶По типу СУБД
Galera Cluster не является самостоятельной СУБД, а представляет собой набор библиотек и патчей, интегрируемых в различные MySQL-совместимые дистрибутивы. Основные варианты:
- MariaDB Galera Cluster: Дистрибутив MariaDB со встроенной поддержкой Galera.
- Percona XtraDB Cluster: Дистрибутив Percona Server for MySQL с поддержкой Galera.
- Codership Galera Cluster: Оригинальный дистрибутив на основе MySQL от компании Codership.
¶По режиму работы
- Кластерный режим: Все узлы активны и обрабатывают запросы.
- Режим «донор-приёмник»: Используется при SST для передачи полной копии данных.
¶Характеристики и особенности
¶Преимущества
- Высокая доступность (High Availability, HA): При выходе из строя одного или нескольких узлов кластер продолжает работу. Клиентские приложения могут перенаправлять запросы на оставшиеся узлы.
- Согласованность данных (Consistency): Синхронная репликация гарантирует, что все узлы всегда содержат одни и те же данные. Исключается ситуация «грязного чтения» (dirty read) с неактуальных реплик.
- Автоматическое восстановление: Узлы, вышедшие из строя, автоматически синхронизируются при повторном подключении (через IST или SST).
- Горизонтальное масштабирование: Добавление новых узлов позволяет увеличить пропускную способность по чтению и записи (при правильной архитектуре приложения).
- Прозрачность для приложений: Для большинства приложений работа с кластером Galera не отличается от работы с одиночным сервером MySQL.
¶Недостатки и ограничения
- Зависимость от сети: Синхронная репликация требует низкой задержки и высокой пропускной способности сети между узлами. Задержки могут существенно снизить производительность.
- Ограничение на размер write-set: Крупные транзакции (например, массовые обновления) могут создавать значительную нагрузку на сеть и процессор, так как write-set должен быть передан и сертифицирован на всех узлах.
- Конфликты транзакций: При одновременном изменении одних и тех же данных на разных узлах возникает конфликт, и одна из транзакций откатывается. Это требует от разработчиков приложений продуманной стратегии обработки конфликтов (например, повторная отправка транзакции).
- Не поддерживает все типы таблиц: Galera Cluster работает только с таблицами, использующими движок InnoDB (или XtraDB). Таблицы MyISAM и другие не поддерживаются.
- Сложность управления: Настройка и администрирование кластера требуют более глубоких знаний, чем управление одиночным сервером.
¶Применение
Galera Cluster используется в сценариях, где критически важны высокая доступность, отказоустойчивость и согласованность данных:
- Веб-приложения: Сайты с высокой посещаемостью, интернет-магазины, системы управления контентом (CMS).
- Финансовые системы: Банковские приложения, платежные системы, биржи.
- Телекоммуникационные системы: Системы биллинга, управления абонентами.
- Системы управления базами данных (СУБД) в облачных средах: Обеспечение отказоустойчивости в виртуальных средах и контейнерах.
¶Примеры конфигураций
¶Минимальный кластер
Для работы Galera Cluster требуется как минимум три узла. Это связано с тем, что при выходе из строя одного узла, оставшиеся два могут сформировать кворум (большинство) и продолжить работу. Если в кластере всего два узла, выход одного из них приводит к потере кворума и остановке кластера.
¶Кластер с балансировщиком нагрузки
Для распределения запросов между узлами часто используется балансировщик нагрузки (например, HAProxy, ProxySQL). Он направляет запросы на разные узлы, обеспечивая равномерное распределение нагрузки и автоматическое исключение неисправных узлов.
¶Интересные факты
- Название «Galera» происходит от испанского слова «галера» (тип судна), что символизирует совместную работу узлов как команды гребцов.
- Технология Galera Cluster была реализована как патч к MySQL, что позволило использовать её с различными форками без изменения ядра СУБД.
- В 2013 году компания Codership объявила о прекращении разработки оригинального дистрибутива Galera Cluster для MySQL, сосредоточившись на поддержке MariaDB и Percona Server.
¶Критика
Основная критика Galera Cluster связана с его зависимостью от качества сети и производительностью при выполнении крупных транзакций. В условиях географически распределённых кластеров (WAN) задержки могут сделать синхронную репликацию неприемлемой. Также критикуется сложность настройки и необходимость тщательного проектирования схемы базы данных для минимизации конфликтов.
¶Источники
- Codership Oy. «Galera Cluster Documentation».
- MariaDB Foundation. «MariaDB Galera Cluster Documentation».
- Percona. «Percona XtraDB Cluster Documentation».
- «High Performance MySQL» (3rd Edition) by Baron Schwartz, Peter Zaitsev, Vadim Tkachenko.
- «MySQL High Availability» by Charles Bell, Mats Kindahl, Lars Thalmann.
