20.7.7 Реакции на обнаружение сбоев и разделение сети
Механизм обнаружения сбоев Group Replication разработан для выявления членов группы, которые больше не взаимодействуют с группой, и их исключения, когда есть подозрение, что они вышли из строя. Наличие механизма обнаружения сбоев увеличивает вероятность того, что группа содержит большинство исправно работающих членов и что запросы от клиентов обрабатываются корректно.
Обычно все члены группы регулярно обмениваются сообщениями со всеми другими членами группы. Если член группы не получает никаких сообщений от конкретного соседа в течение 5 секунд, после окончания этого периода обнаружения возникает подозрение на соседа. Когда подозрение истекает, предполагается, что подозрительный член вышел из строя, и он исключается из группы. Исключенный член удаляется из списка участников, видимого другими членами, но он не знает, что был исключен из группы, поэтому он считает себя онлайн, а других членов — недоступными. Если член на самом деле не вышел из строя (например, из-за временной проблемы с сетью) и может возобновить общение с другими членами, он получает представление, содержащее информацию о том, что он был исключен из группы.
Реакции членов группы, включая самого вышедшего из строя члена, на эти ситуации могут быть настроены на ряде этапов процесса. По умолчанию, если у члена есть подозрение в выходе из строя, происходит следующее:
В MySQL 8.4 после возникновения подозрения добавляется период ожидания в 5 секунд, прежде чем подозрение истечет, и подозрительный член может быть исключен.
Если исключенный член возобновляет общение и понимает, что был исключен, он автоматически предпринимает три попытки присоединиться к группе (с 5 минутами между каждой попыткой); если эта процедура автоматического присоединения не работает, он перестаёт пытаться присоединиться к группе.
Когда исключённый член не пытается присоединиться к группе, он переключается в режим супер-только для чтения и ожидает вмешательства оператора.
Вы можете использовать параметры конфигурации Group Replication, описанные в этом разделе, чтобы изменить эти действия постоянно или временно, чтобы соответствовать требованиям вашей системы и вашим приоритетам. Если у вас возникают ненужные исключения, вызванные медленными сетями или машинами, сетями с высокой частотой неожиданных временных сбоев или запланированными отказами сети, рассмотрите возможность увеличения таймаута исключения и числа попыток автоматического присоединения. Пока член проходит через любое из описанных выше стандартных действий, хотя он не принимает записи, чтение всё же может быть выполнено, если член всё ещё взаимодействует с клиентами, с возрастающей вероятностью устаревших чтений со временем. Если для вас приоритетнее избегать устаревших чтений, чем вмешательство оператора, рассмотрите возможность уменьшения таймаута исключения и попыток автоматического присоединения или установления их равными нулю.
Члены, которые не вышли из строя, могут потерять связь с частью, но не со всей, группой репликации из-за разбиения сети. Например, в группе из 5 серверов (S1, S2, S3, S4, S5), если есть разрыв соединения между (S1, S2) и (S3, S4, S5), происходит разделение сети. Первая группа (S1, S2) теперь находится в меньшинстве, потому что не может связаться более чем с половиной группы. Любые транзакции, которые обрабатываются членами в меньшинстве, блокируются, потому что большинство группы недоступно, поэтому группа не может достичь кворума. Более подробное описание этой ситуации см. в разделе 20.7.8 «Обработка разбиения сети и потери кворума». В этой ситуации по умолчанию члены как в меньшинстве, так и в большинстве остаются в группе, продолжают принимать транзакции (хотя они заблокированы для членов в меньшинстве) и ожидают вмешательства оператора. Это поведение также можно настроить.
Обратите внимание, что если члены группы находятся на более старой версии MySQL Server, которая не поддерживает соответствующий параметр, или на версии с другим значением по умолчанию, они действуют в отношении себя и других членов группы согласно стандартным правилам, описанным выше. Например, член, не поддерживающий системную переменную group_replication_member_expel_timeout, исключает других членов, как только обнаруживается истекшее подозрение, и это исключение принимается другими членами, даже если они поддерживают системную переменную и имеют более длительный таймаут.
© 2025 Oracle
Licensed under the GPLv2 License.