Открыть сервисСервис

Кластер 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'ов) всем узлам кластера в одном и том же порядке.
  • Управление членством: поддержание единого представления о составе кластера.

Процесс выполнения транзакции

  1. Выполнение: Клиент отправляет запрос на запись на любой узел кластера.
  2. Создание write-set: Узел формирует набор изменений (write-set), содержащий изменённые строки данных и их идентификаторы.
  3. Распространение: Write-set отправляется всем остальным узлам кластера через протокол GCS.
  4. Сертификация: Каждый узел выполняет процедуру сертификации — проверку, не возникнет ли конфликта при применении данного write-set'а к его локальной копии данных. Для этого используется глобальный порядок транзакций и механизм блокировок на уровне строк.
  5. Применение: Если сертификация пройдена успешно, write-set применяется на каждом узле. Если сертификация не пройдена (обнаружен конфликт), транзакция откатывается на всех узлах.
  6. Подтверждение: После успешного применения на всех узлах, транзакция подтверждается клиенту.

Механизм 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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru