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