10.8 Принудительное назначение нового первичного узла
В отличие от InnoDB Cluster, который поддерживает автоматическое переключение при внезапном отказе первичного узла, InnoDB ReplicaSet не имеет автоматического обнаружения отказов или протокола консенсуса, такого как в Group Replication. Если первичный узел недоступен, требуется ручное переключение. InnoDB ReplicaSet, потерявший свой первичный узел, становится фактически только для чтения, и для возможности внесения изменений необходимо выбрать новый первичный узел. Если вы не можете подключиться к первичному узлу и не можете использовать для безопасного переключения на новый первичный узел, как описано в разделе 10.7 «Изменение первичного узла», используйте операцию ReplicaSet.setPrimaryInstance() для принудительного переключения первичного узла. Это крайняя мера, которую следует применять только в критических ситуациях, когда текущий первичный узел недоступен и не может быть восстановлен каким-либо способом. ReplicaSet.forcePrimaryInstance()
Принудительное переключение — это потенциально разрушительное действие и должно использоваться с осторожностью.
Если целевой узел недоступен (или равен null), автоматически выбирается и повышается до статуса нового первичного узла самый актуальный узел. Если целевой узел доступен, он повышается до статуса нового первичного узла. Другие доступные вторичные узлы реплицируют данные с этого нового первичного узла. Целевой узел должен иметь самую актуальную GTID_EXECUTED среди доступных узлов, иначе операция завершается неудачно.
Переключение отличается от планового изменения первичного узла, поскольку оно повышает вторичный узел без синхронизации или обновления старого первичного узла. Это влечёт следующие важные последствия:
Любые транзакции, которые ещё не были применены вторичным узлом к моменту отказа старого первичного узла, теряются.
Если старый первичный узел всё ещё работает и обрабатывает транзакции, возникает ситуация раскола, и наборы данных старого и нового первичных узлов расходятся.
Если последний известный первичный узел по-прежнему доступен, операция завершается неудачно, чтобы уменьшить риск возникновения ситуации раскола. Однако администратор несёт ответственность за обеспечение того, чтобы старый первичный узел не был доступен другим узлам, чтобы предотвратить или минимизировать такие ситуации. ReplicaSet.forcePrimaryInstance()
После принудительного переключения старый первичный узел считается недействительным новым первичным узлом и больше не может быть частью ReplicaSet. Если впоследствии вы найдёте узел, который может быть восстановлен, вы должны удалить его из ReplicaSet и добавить как новый узел. Вторичный узел считается недействительным, если его нельзя переключить на новый первичный узел во время переключения.
Потеря данных возможна после переключения, поскольку старый первичный узел мог иметь транзакции, которые ещё не были реплицированы на вторичный узел, который был повышен. Более того, если узел, который, как предполагалось, вышел из строя, всё ещё может обрабатывать транзакции, например, потому что сеть, в которой он расположен, всё ещё функционирует, но недоступна с MySQL Shell, он продолжает расходиться с повышенными узлами. Восстановление после того, как наборы транзакций на узлах разошлись, требует ручного вмешательства и может быть невозможным в некоторых ситуациях, даже если неисправные узлы могут быть восстановлены. Часто самый быстрый и простой способ восстановить систему после аварии, потребовавшей принудительного переключения, заключается в отбрасывании таких разошедшихся транзакций и повторном развертывании нового узла с недавно повышенного первичного.
© 2025 Oracle
Licensed under the GPLv2 License.