Как изменение уровня изоляции влияет на Galera Cluster

В настоящее время я играю с кластером Percona XtraDB, который основан на кластере Galera. В документации Galera я увидел следующее: Warning: When using Galera Cluster in master-slave mode, all four levels are available to you, to the extend that MySQL supports it. In multi-master mode, however, you can only use the REPEATABLE-READ level.

И проблема в том, что мое приложение использует уровень изоляции READ-COMMITTED. Поэтому я хочу узнать, как Galera работает с этим уровнем изоляции. Согласно упомянутому выше предупреждению, Galera должна работать только в режиме master-slave. Это означает, что только один узел должен разрешать запись.

Но я провел эксперимент: имея кластер из 3 узлов (на одном ПК с помощью Docker), я изменил уровень изоляции на всех узлах на READ-COMMITTED, перезапустил эти узлы и попытался выполнить запросы на запись на каждом узле — все успешно, что противоречит предупреждению выше.

Итак, вот мои вопросы:

  1. Как Galera реагирует на уровни изоляции, отличные от «ПОВТОРЯЕМОЕ ЧТЕНИЕ»?
  2. Как я могу проверить, работает ли кластер в режиме master-master или master-slave? Разве ведомые узлы не должны отклонять запросы на запись?

person Roman Proshin    schedule 28.02.2019    source источник
comment
Является ли Read-Committed реальным требованием вашего приложения?   -  person Rick James    schedule 12.03.2019
comment
@RickJames, так исторически сложилось, что наше приложение работает с фиксацией чтения. Я пытался просто изменить уровень изоляции на повторяемое чтение, и это привело к множеству проблем из-за взаимоблокировок и тайм-аутов блокировки. Так что проще продолжать использовать read-committed. Вот почему я задаю этот вопрос.   -  person Roman Proshin    schedule 14.03.2019


Ответы (1)


Насколько я мог понять разные источники информации (например, это и это), "локальный" уровень изоляции может быть любым из поддерживаемых ядром СУБД. В последней статье говорится:

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

И только связь между узлами работает иначе: Галера просто не поддерживает SERIALIZABLE уровень и может работать с другими.

И по поводу второго вопроса. Галера всегда работает в режиме "мастер-мастер" (ссылка?). И только некоторые ручные изменения в конфигурации могут заставить «подчиненные» экземпляры отклонять запросы «на запись».

Тем не менее, если у кого-то есть дополнительная информация или кто-то знает, что мой ответ неверен, добро пожаловать, напишите свой ответ.

person Roman Proshin    schedule 28.02.2019