Spec-Zone.ru › MariaDB

Использование GTID MariaDB с кластером MariaDB Galera

Глобальные идентификаторы транзакций (GTID) MariaDB очень полезны при использовании с репликацией MariaDB, для чего, в основном, эта функция и была разработана. Кластер Galera, с другой стороны, был разработан компанией Codership для всех вариантов MySQL и MariaDB, а первоначальная разработка технологии предшествовала реализации GTID MariaDB. В качестве побочного эффекта, кластер MariaDB Galera (по крайней мере, до MariaDB 10.5.1) только частично поддерживает реализацию GTID MariaDB.

Поддержка GTID для наборов записей, реплицированных кластером Galera

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

До MariaDB 10.5.1, кластер MariaDB Galera не реплицировал оригинальный GTID с набором записей, за исключением случаев, когда транзакция изначально применялась потоком SQL-потоком раба. В большинстве случаев каждый узел независимо генерировал свой собственный GTID для каждого набора записей. См. MDEV-20720.

Режим wsrep GTID

MariaDB, начиная с 10.1.4

MariaDB поддерживает wsrep_gtid_mode с версии 10.1.4.

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

Включение режима Wsrep GTID

Для работы режима wsrep GTID необходимо настроить несколько параметров, таких как:

  • wsrep_gtid_mode=ON необходимо установить на всех узлах кластера.
  • wsrep_gtid_domain_id необходимо установить на одинаковое значение на всех узлах данного кластера, чтобы каждый узел кластера использовал одну и ту же область при назначении GTID для наборов записей кластера Galera. При репликации между двумя кластерами для каждого кластера это значение должно быть разным, чтобы каждый кластер использовал разные области при назначении GTID для своих наборов записей.
  • log_slave_updates необходимо включить на всех узлах кластера. См. MDEV-9855.
  • log_bin необходимо установить в один и тот же путь на всех узлах кластера. См. MDEV-9856.

И в качестве дополнительной меры безопасности:

  • gtid_domain_id должно быть установлено на разных значениях на всех узлах данного кластера, и каждое из этих значений должно отличаться от настроенного значения wsrep_gtid_domain_id. Это делается для предотвращения использования узлом той же области, что и для наборов записей кластера Galera, при назначении GTID для транзакций, не относящихся к Galera, таких как DDL, выполненные с wsrep_sst_method=RSU установленным, или DML, выполненные с wsrep_on=OFF установленным.

Дополнительную информацию об установке server_id, см. в разделе Использование репликации MariaDB с кластером MariaDB Galera: Настройка server_id на узлах кластера.

Известные проблемы с режимом Wsrep GTID

До MariaDB 10.5.1 были известные случаи, когда GTID могли стать несовместимыми между узлами кластера.

Известная проблема (исправленная в MariaDB 10.5.1):

  • Неявное удаление временных таблиц может привести к несогласованности GTID. См. MDEV-14153 и MDEV-20720.

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

GTID для транзакций, применённых потоком раба

Если узел кластера Galera также является рабом репликации, то SQL-поток раба этого узла будет применять транзакции, которые он реплицирует со своего мастера репликации. Если у узла установлено значение log_slave_updates=ON, то каждая транзакция, которую применяет SQL-поток раба, также сгенерирует набор записей кластера Galera, который будет реплицирован на остальные узлы кластера.

В MariaDB 10.1.30 и ранее узел, выступающий в роли раба, применял транзакцию с оригинальным GTID, который он получил от мастера, а другие узлы кластера Galera генерировали свои собственные GTID для транзакции при репликации набора записей.

В MariaDB 10.1.31 и более поздних версиях узел, выступающий в роли раба, будет включать в реплицированный набор записей оригинальный Gtid_Log_Event транзакции, поэтому все узлы должны будут связать набор записей с его оригинальным GTID. См. MDEV-13431 по этому вопросу.

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

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/using-mariadb-gtids-with-mariadb-galera-cluster/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API