В мире современных приложений высокая доступность и избыточность данных являются критически важными компонентами для обеспечения непрерывного обслуживания и предотвращения потери данных в случае сбоев. Кластеризация базы данных является распространенным решением для решения этих проблем. Среди различных технологий кластеризации баз данных MariaDB Galera Cluster выделяется как надежное и широко используемое решение. В этой статье мы рассмотрим основы репликации MariaDB Galera Cluster, ее преимущества, архитектуру и то, как она обеспечивает бесперебойную репликацию и доступность данных.

Понимание кластера MariaDB Galera

MariaDB Galera Cluster — это решение с открытым исходным кодом, которое обеспечивает синхронную репликацию для баз данных MariaDB. Он использует подключаемый модуль репликации Galera, позволяющий нескольким узлам базы данных работать как кластер. Каждый узел в кластере поддерживает согласованную копию данных, обеспечивая высокую доступность и отказоустойчивость.



Синхронная и асинхронная репликация

Основное различие между синхронной и асинхронной репликацией заключается в том, что синхронная репликация гарантирует что если изменение произошло на одном узле в кластере, то изменение произойдет и на других узлах в кластере «синхронно» или одновременно. «Асинхронная» репликация не дает никаких гарантий относительно задержки между применением изменений на «главном» узле и распространением изменений на «подчиненные» узлы. Задержка с «асинхронной» репликацией может быть короткой или длинной. Это также означает, что в случае сбоя главного узла в «асинхронной» топологии репликации некоторые из последних изменений могут быть потеряны.

Теоретически синхронная репликация имеет ряд преимуществ перед асинхронной репликацией:

  • Кластеры, использующие синхронную репликацию, всегда высокодоступны. Если бы один из узлов вышел из строя, то потери данных не было бы. Кроме того, все узлы кластера всегда согласованы.
  • Кластеры, использующие синхронную репликацию, позволяют выполнять транзакции на всех узлах параллельно.
  • Кластеры, использующие синхронную репликацию, могут гарантировать причинно-следственную связь во всем кластере. Это означает, что если SELECT выполняется на одном узле кластера после выполнения транзакции на узле кластера, он должен увидеть результаты этой транзакции.

Однако на практике синхронная репликация базы данных традиционно реализуется с помощью так называемой двухфазной фиксации или распределенной блокировки, которая оказалась очень медленной. Низкая производительность и сложность реализации синхронной репликации привели к тому, что асинхронная репликация остается доминирующим средством обеспечения масштабируемости и доступности производительности базы данных. Широко распространенные базы данных с открытым исходным кодом, такие как MySQL или PostgreSQL, предлагают только решения асинхронной или полусинхронной репликации.

Репликация Galera не является полностью синхронной. Иногда ее называют виртуально синхронной репликацией.

Как работает репликация кластера MariaDB Galera?

Кластер MariaDB Galera обеспечивает синхронную репликацию с несколькими мастерами, что означает, что каждый узел в кластере может принимать как операции чтения, так и записи. Когда данные изменяются на одном узле, эти изменения автоматически и немедленно реплицируются на все остальные узлы в кластере. Эта синхронная репликация обеспечивает надежную согласованность данных на всех узлах, обеспечивая высокую доступность и отказоустойчивость. Давайте углубимся в то, как он достигает синхронной репликации:

1. Роли узлов:

В кластере MariaDB Galera каждый узел может работать как ведущий, так и подчиненный. Это означает, что все узлы имеют возможность обрабатывать запросы на чтение и запись. Здесь нет выделенного главного узла, в отличие от традиционных настроек репликации master-slave.

2. Репликация на основе сертификации:

В основе репликации Galera лежит репликация на основе сертификации. Каждой транзакции присваивается уникальный и строго возрастающий порядковый номер, известный как «индекс сертификации». Этот индекс сертификации гарантирует, что все узлы согласны с порядком, в котором совершаются транзакции. Как только транзакция сертифицирована, ее можно безопасно зафиксировать на всех узлах, гарантируя согласованность данных.

Galera Cluster использует протокол репликации на основе многоадресной рассылки для эффективной и быстрой связи между узлами. Когда операция записи (транзакция) происходит на одном узле (узле-доноре), он генерирует «набор записи», содержащий модификации данных, сделанные этой транзакцией.

Узел-донор выполняет многоадресную рассылку набора для записи всем остальным узлам в кластере. Каждый принимающий узел (узел применения) проверяет набор записей, чтобы гарантировать его целостность и согласованность с его локальной копией базы данных. После успешной проверки изменения в наборе для записи применяются к локальной базе данных на узле применения.

Применяя наборы записей в одном и том же порядке индекса сертификации, Galera Cluster гарантирует, что все узлы имеют идентичную копию данных и согласовывают последовательность совершенных транзакций, обеспечивая надежную согласованность данных.

3. Управление потоком:

Чтобы поддерживать синхронизацию и предотвратить перегрузку любого узла из-за внезапного притока наборов записей, Galera Cluster использует механизм управления потоком. Каждый принимающий узел (узел применения) отправляет подтверждение (ACK) узлу-донору, когда он получает набор для записи.

Если узел-донор не получает ACK от всех узлов в течение определенного периода времени, это указывает на то, что один или несколько узлов отстают в обработке наборов записей. В таких случаях узел-донор замедляет или временно приостанавливает передачу наборов записей, чтобы позволить более медленным узлам наверстать упущенное.

Управление потоком помогает поддерживать синхронизацию кластера, обеспечивает согласованность данных и предотвращает перегрузку любого узла в периоды интенсивной записи.

4. Разделение кворума и чтения-записи:

Galera Cluster использует подход на основе кворума для обработки сетевых разделов и сценариев недоступности узлов. Кворум обеспечивает доступность и подключение большинства узлов для обеспечения оперативной доступности и согласованности данных.

Когда кластер теряет кворум из-за сетевых разделов или сбоев узлов, он переходит в режим только для чтения. В этом состоянии операции записи блокируются, чтобы предотвратить конфликтующие изменения в кластере. Однако запросы на чтение по-прежнему могут обслуживаться любым доступным узлом, что обеспечивает масштабируемость и доступность чтения.

Разделение чтения-записи позволяет приложениям продолжать чтение данных из кластера, даже если операции записи временно заблокированы. После устранения сбоя сетевого раздела или узла кластер восстанавливает кворум, и операции записи возобновляются.

Преимущества репликации кластера MariaDB Galera:

  1. Высокая доступность: репликация Galera Cluster гарантирует, что даже в случае отказа одного или нескольких узлов кластер останется работоспособным. Остальные узлы могут продолжать обслуживать запросы, обеспечивая бесперебойный доступ к базе данных.
  2. Автоматическое восстановление узла: в случае сбоя узла или сетевого раздела Galera Cluster может автоматически обнаруживать потерю узла и обеспечивать его повторное присоединение к кластеру, когда он снова становится доступным. Этот автоматический процесс восстановления обеспечивает согласованность данных в кластере и поддерживает непрерывную работу.
  3. Масштабируемость: по мере добавления новых узлов в кластер MariaDB Galera Cluster динамически масштабируется по горизонтали, распределяя рабочую нагрузку по доступным ресурсам. Это позволяет эффективно обрабатывать возросшие объемы трафика и данных.
  4. Согласованность данных: механизм синхронной репликации Galera Cluster гарантирует, что все узлы в кластере имеют одинаковый набор зафиксированных транзакций. Это гарантирует высокую согласованность, устраняя риск расхождений или конфликтов данных.
  5. Избыточность данных. Механизм синхронной репликации Galera Cluster обеспечивает избыточное хранение данных на нескольких узлах. В случае сбоя узла данные остаются доступными на других узлах, что предотвращает потерю данных.

Архитектура кластера MariaDB Galera

Архитектура MariaDB Galera Cluster вращается вокруг трех основных компонентов: узлов базы данных, подключаемого модуля репликации Galera и связи кластера.

Узлы базы данных:

На каждом узле базы данных в кластере работает экземпляр MariaDB. Узлы взаимосвязаны и обмениваются данными для репликации данных и поддержания согласованности.

Плагин репликации Galera:

Плагин репликации Galera отвечает за синхронную репликацию. Он управляет процессом репликации, координирует транзакции и обеспечивает согласованное распространение изменений данных по всем узлам.

Кластерная связь:

Уровень связи кластера обеспечивает взаимодействие между узлами и синхронизацию. Он использует протокол связи на основе многоадресной рассылки или одноадресную передачу для передачи данных между узлами.

Когда мы пишем в таблицу на узле, узел собирает записи в транзакцию набора записей, которую затем реплицирует на другие узлы в кластере. Ваше приложение может писать на любой узел в кластере. Каждый узел сертифицирует реплицированный набор записей. Если транзакция не имеет конфликтов, узлы ее применяют. Если транзакция имеет конфликты, она отклоняется, и все узлы отменяют изменения.

Обсуждения Galera Slave

Хотя поставщик Galera сертифицирует набор для записи, связанный с транзакцией, во время фиксации на каждом узле в кластере, этот набор для записи не обязательно применяется к этому узлу кластера немедленно. Вместо этого набор для записи помещается в очередь получения узла кластера на узле и в конечном итоге применяется одним из подчиненных потоков Galera узла кластера.

Ведомые потоки Galera могут определять, какие наборы записи безопасно применять параллельно.

Потоковая репликация

В более старых версиях MariaDB Cluster существовало ограничение в 2 ГБ на размер транзакции, которую вы могли выполнить. Узел ожидает фиксации транзакции перед выполнением репликации и сертификации. С большими транзакциями, длительными операциями записи и изменениями в огромных наборах данных была большая вероятность конфликта, вызывающего откат дорогостоящей операции.

Используя потоковую репликацию, узел разбивает огромные транзакции на более мелкие и более управляемые фрагменты, а затем реплицирует эти фрагменты в кластер по мере его работы, не дожидаясь фиксации. После сертификации фрагмент больше не может быть прерван конфликтующими транзакциями. Поскольку это может сказаться на производительности как во время выполнения, так и в случае отката, рекомендуется использовать его только с большими транзакциями, которые вряд ли будут конфликтовать.

Конфигурация и настройка — Настройка кластера MariaDB Galera:

  1. Установите MariaDB и подключаемый модуль репликации Galera: начните с установки MariaDB на каждом узле кластера. Убедитесь, что подключаемый модуль репликации Galera также установлен и активирован.
  2. Настройка адресов кластера: Настройте адреса кластера, указав IP-адреса или имена хостов всех узлов. Это позволяет узлам обнаруживать друг друга и формировать кластер.
  3. Включить синхронную репликацию: измените файл конфигурации MariaDB, чтобы включить подключаемый модуль репликации Galera и настроить кластер для работы в режиме синхронной репликации.
  4. Заполнить начальный узел: выберите узел, который будет выступать в качестве начального начального узла. Запустите этот узел и позвольте ему установить кластер. Последующие узлы могут присоединиться к кластеру, подключившись к начальному узлу.

Лучшие практики

Чтобы обеспечить оптимальную производительность и надежность репликации кластера MariaDB Galera, примите во внимание следующие рекомендации:

  1. Используйте согласованное оборудование: поддерживайте согласованное оборудование на узлах кластера, чтобы предотвратить неравномерность производительности и обеспечить равномерное использование ресурсов.
  2. Мониторинг работоспособности кластера. Внедрите надежные механизмы мониторинга и оповещения для отслеживания работоспособности кластера. Отслеживайте ключевые показатели, такие как задержка репликации, состояние узла и использование ресурсов.
  3. Планирование кворума: установите нечетное количество узлов (обычно три или более), чтобы избежать сценариев разделения мозгов. Это гарантирует, что кластер может поддерживать большинство и выбирать первичный компонент даже в случае сетевых разделов.
  4. Резервное копирование и восстановление. Реализуйте регулярное резервное копирование узлов кластера, чтобы обеспечить возможность восстановления данных. Используйте такие инструменты, как резервное копирование MariaDB или Percona XtraBackup, для согласованного резервного копирования.

Заключение

Репликация кластера MariaDB Galera предоставляет мощное решение для обеспечения высокой доступности, масштабируемости и согласованности данных при управлении базами данных. Используя возможности синхронной репликации с несколькими мастерами, организации могут обеспечить отказоустойчивость, беспрепятственно масштабировать ресурсы и поддерживать целостность данных. Понимание архитектуры, конфигурации и лучших практик, связанных с репликацией кластера MariaDB Galera, позволяет организациям максимально использовать потенциал своей инфраструктуры баз данных и предоставлять надежные приложения и услуги.