Spec-Zone.ru › MySQL 9.2

20.5.3.1 Понимание гарантий согласованности транзакций

С точки зрения гарантий распределенной согласованности, как в обычных операциях, так и при восстановлении после сбоев, Group Replication всегда является системой с согласованностью по умолчанию. Это означает, что как только входящий трафик замедлится или прекратится, все члены группы будут иметь одинаковое содержимое данных. События, относящиеся к согласованности системы, можно разделить на операции управления (ручные или автоматически запускаемые сбоями) и операции потока данных.

Для Group Replication операции управления, которые можно оценить с точки зрения согласованности, включают:

  • присоединение или выход из группы, что регулируется механизмом раздела 20.5.4 «Распределенное восстановление» и защитой записи.

  • сетевые сбои, которые регулируются режимами изоляции.

  • в группах с одним первичным узлом — переход первичного узла, который также может быть операцией, инициируемой group_replication_set_as_primary().

Гарантии согласованности и переход первичного узла

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

С первым подходом группа максимально быстро обеспечивает стабильное членство в группе после сбоя первичного узла, выбрав нового первичного узла и позволив немедленный доступ к данным, в то время как он обрабатывает возможные накопленные данные с предыдущего первичного узла. Гарантируется согласованность записей, но чтение может временно извлекать устаревшие данные, пока новый первичный узел обрабатывает накопленные данные. Например, если клиент C1 записал A=2 WHERE A=1 на старом первичном узле незадолго до его сбоя, при повторном подключении клиента C1 к новому первичному узлу он потенциально может прочитать A=1, пока новый первичный узел не обработает свою очередь и не синхронизируется с состоянием старого первичного узла перед его выходом из группы.

При втором подходе система обеспечивает стабильное членство в группе после сбоя первичного узла и выбирает нового первичного узла аналогичным образом, как в первом варианте, но в этом случае группа ожидает, пока новый первичный узел обработает всю очередь, и только после этого разрешает доступ к данным. Это гарантирует, что в описанной ранее ситуации, когда клиент C1 повторно подключается к новому первичному узлу, он читает A=2. Однако компромисс заключается в том, что время перехода увеличивается пропорционально размеру очереди, который на правильно настроенной группе должен быть небольшим.

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

Операции потока данных

Поток данных важен для гарантий согласованности группы из-за операций чтения и записи, выполняемых с группой, особенно когда эти операции распределены по всем членам. Операции потока данных применимы к обоим режимам Group Replication: с одним первичным узлом и с несколькими первичными узлами, однако для большей ясности объяснение ограничивается режимом с одним первичным узлом. Обычно операции чтения и записи распределяются по членам группы с одним первичным узлом следующим образом: записи отправляются первичному узлу, а чтения распределяются по вторичным узлам равномерно. Поскольку группа должна функционировать как единое целое, можно ожидать, что записи на первичном узле будут мгновенно доступны на вторичных узлах. Хотя Group Replication написана с использованием протоколов системы групповой коммуникации (GCS), которые реализуют алгоритм Paxos, некоторые части Group Replication являются асинхронными, что подразумевает асинхронную обработку данных на вторичных узлах. Это означает, что клиент C2 может записать B=2 WHERE B=1 на первичном узле, немедленно подключиться к вторичному узлу и прочитать B=1. Это связано с тем, что вторичный узел еще обрабатывает накопленные данные и не применил транзакцию, которая была применена первичным узлом.

Точки синхронизации транзакций

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

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

Если данные синхронизируются во время операции записи, записывающая сессия ожидает, пока все вторичные узлы не запишут свои данные. Group Replication использует общую упорядоченность записей, а это подразумевает ожидание применения этой и всех предыдущих записей, находящихся в очередях вторичных узлов. Таким образом, при использовании этой точки синхронизации записывающая сессия ожидает, пока все очереди вторичных узлов не будут обработаны.

Любой из вариантов гарантирует, что в описанной ситуации для клиента C2 всегда будет читаться B=2, даже если он немедленно подключится к вторичному узлу. Каждый вариант имеет свои преимущества и недостатки, которые напрямую связаны с рабочим объемом вашей системы. В следующих примерах описываются различные типы рабочих нагрузок и даются рекомендации по выбору подходящей точки синхронизации.

Представьте следующие ситуации:

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

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

В этих случаях вы должны выбрать синхронизацию по записям.

Представьте следующие ситуации:

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

  • Вы хотите, чтобы определенные транзакции в вашей рабочей нагрузке всегда читали актуальные данные из группы, например, при обновлении конфиденциальных данных (таких как учетные данные для файла или аналогичных данных), и вы хотите обеспечить, чтобы чтения извлекали последнее значение.

В этих случаях вы должны выбрать синхронизацию по чтениям.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/group-replication-understanding-consistency-guarantees.html

Spec-Zone.ru

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