Использование 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 поддерживает 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.
И в качестве дополнительной меры безопасности:
-
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 по этому вопросу.
© 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/