FAILOVER
FAILOVER
FAILOVER [TO host port [FORCE]] [ABORT] [TIMEOUT milliseconds]
- Доступно с версии:
- 6.2.0
- Сложность вычислений:
- O(1)
- Категории ACL:
-
@admin,@slow,@dangerous,
Эта команда запустит скоординированную процедуру failover между текущим мастером и одним из его реплик. Failover не является синхронным; вместо этого координация failover будет выполняться фоновым заданием. Она предназначена для минимизации потери данных и недоступности кластера во время failover. Эта команда аналогична команде CLUSTER FAILOVER для некластерного Redis и похожа на поддержку failover, предоставляемую sentinel.
Подробное описание стандартного потока failover приведено ниже:
- Мастер начнёт внутренний
CLIENT PAUSE WRITE, который приостановит входящие записи и предотвратит накопление новых данных в потоке репликации. - Мастер отслеживает свои реплики, ожидая, пока реплика укажет, что она полностью прочитала поток репликации. Если у мастера несколько реплик, он будет ждать только первой реплики, догнавшей его.
- Затем мастер понизит себя до реплики. Это делается для предотвращения ситуаций с двумя мастерами. ПРИМЕЧАНИЕ: Мастер не удаляет свои данные, поэтому сможет откатиться, если реплика отклонит запрос failover на следующем шаге.
- Предыдущий мастер отправит специальный запрос PSYNC целевой реплике,
PSYNC FAILOVER, инструктируя целевую реплику стать мастером. - Как только предыдущий мастер получит подтверждение, что запрос
PSYNC FAILOVERбыл принят, он возобновит работу своих клиентов. Если запрос PSYNC отклонен, мастер прервёт failover и вернётся в нормальное состояние.
Поле master_failover_state в INFO replication можно использовать для отслеживания текущего состояния failover, которое имеет следующие значения:
-
no-failover: Нет текущего скоординированного failover. -
waiting-for-sync: Мастер ожидает, пока реплика догонит свой офсет репликации. -
failover-in-progress: Мастер понизил себя в статус реплики и пытается передать владение целевой реплике.
Если у предыдущего мастера были дополнительные реплики, они будут продолжать репликацию с него как цепные реплики. Для начала репликации непосредственно с нового мастера вам потребуется вручную выполнить REPLICAOF на этих репликах.
Дополнительные аргументы
Существуют следующие дополнительные аргументы для изменения поведения потока failover:
-
TIMEOUTмиллисекунды -- Этот параметр позволяет указать максимальное время ожидания мастером состоянияwaiting-for-syncперед прерыванием попытки failover и откатом. Это предназначено для определения верхней границы перебоев в записи, которые может испытывать кластер Redis. Обычно failover происходит менее чем за секунду, но может занять больше времени, если имеется большой объём трафика записей или реплика отстаёт в обработке потока репликации. Если это значение не указано, таймаут можно считать «бесконечным». -
TOХОСТ ПОРТ -- Этот параметр позволяет указать конкретную реплику, её хост и порт, к которой произойдёт failover. Мастер будет ожидать, пока эта реплика догонит свой офсет репликации, и затем выполнит failover к ней. -
FORCE-- Если оба параметраTIMEOUTиTOзаданы, флаг force также может использоваться для обозначения того, что после истечения таймаута мастер должен переключиться на целевую реплику вместо отката. Это может использоваться для попытки failover без потери данных с ограничением времени перебоев в записи.
ПРИМЕЧАНИЕ: Мастер всегда вернётся назад, если запрос PSYNC FAILOVER отклонится целевой репликой.
Прерывание failover
Команда failover предназначена для обеспечения безопасности от потери и повреждения данных, но может столкнуться со сценариями, которые она не может автоматически исправить и может застрять. Для этого существует команда FAILOVER ABORT, которая прервёт текущий failover и вернёт мастер в нормальное состояние. Команда не имеет побочных эффектов, если выдана в состоянии waiting-for-sync, но может привести к многомастерным сценариям в состоянии failover-in-progress. Если встретится многомастерная ситуация, вам потребуется вручную определить, какой мастер имеет самые последние данные и назначить его мастером, а также назначить другие реплики.
ПРИМЕЧАНИЕ: REPLICAOF отключена во время выполнения failover, чтобы предотвратить нежелательные взаимодействия с failover, которые могут привести к потере данных.
Возврат
Простой строковый ответ: OK если команда была принята и выполняется скоординированный failover. Ошибка, если операция не может быть выполнена.
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/failover/