ВЫКЛЮЧЕНИЕ
SHUTDOWN
SHUTDOWN [NOSAVE | SAVE] [NOW] [FORCE] [ABORT]
- Доступно с версии:
- 1.0.0
- Сложность по времени:
- O(N) при сохранении, где N — общее количество ключей во всех базах данных при сохранении данных, в противном случае O(1)
- Категории ACL:
-
@admin,@slow,@dangerous,
Поведение команды следующее:
- Если есть какие-либо реплики, отстающие в репликации:
- Приостановить попытки записи клиентов, выполнив
CLIENT PAUSEс опциейWRITE. - Подождать до настроенного значения
shutdown-timeout(по умолчанию 10 секунд), пока реплики не догонят смещение репликации.
- Приостановить попытки записи клиентов, выполнив
- Остановить всех клиентов.
- Выполнить блокирующее сохранение, если настроен хотя бы один пункт сохранения.
- Очистить файл Append Only, если включен AOF.
- Выйти из сервера.
Если включена персистенция, эта команда гарантирует, что Redis выключится без потери данных.
Примечание: экземпляр Redis, настроенный на непродолжительное сохранение на диск (без конфигурации AOF и без директивы «save»), не будет создавать файл RDB при SHUTDOWN, так как обычно вы не хотите, чтобы экземпляры Redis, используемые только для кэширования, блокировались при выключении.
Также обратите внимание: если Redis получает один из сигналов SIGTERM и SIGINT, выполняется та же последовательность выключения. Смотрите также Обработка сигналов.
Модификаторы
Можно указать необязательные модификаторы, чтобы изменить поведение команды. В частности:
- SAVE принудительно выполнит операцию сохранения БД, даже если не настроены точки сохранения.
- NOSAVE предотвратит операцию сохранения БД, даже если настроен один или несколько пунктов сохранения.
- NOW пропустит ожидание отстающих реплик, то есть пропустит первый шаг в последовательности выключения.
- FORCE игнорирует любые ошибки, которые обычно мешают серверу выйти. Подробности см. в следующем разделе.
- ABORT отменяет текущее выключение и не может использоваться совместно с другими флагами.
Условия, при которых выключение завершается неудачно
При настройке точки сохранения или указании модификатора SAVE выключение может завершиться неудачно, если файл RDB не может быть сохранен. Затем сервер продолжает работу, чтобы гарантировать отсутствие потери данных. Это можно обойти, используя модификатор FORCE, заставив сервер выйти в любом случае.
При включении файла Append Only выключение может завершиться неудачно, потому что система находится в состоянии, которое не позволяет безопасно немедленно сохранить данные на диск.
Обычно, если существует дочерний процесс AOF, выполняющий перепись AOF, Redis просто уничтожит его и выйдет. Однако есть ситуации, когда это небезопасно, и, если не указан модификатор FORCE, команда SHUTDOWN будет отклонена с ошибкой вместо этого. Это происходит в следующих ситуациях:
- Пользователь только что включил AOF, и сервер запустил первую перепись AOF для создания начального файла AOF. В этом контексте остановка приведет к потере всего набора данных: после перезапуска сервер потенциально будет иметь включенный AOF без файла AOF вообще.
- Реплика с включенным AOF, подключенная к мастеру, выполнила полную ресинхронизацию и перезапустила файл AOF, вызвав процесс начального создания AOF. В этом случае не завершение переписывания AOF опасно, потому что последние данные, полученные от мастера, будут потеряны. Новый мастер фактически может быть даже другим экземпляром (если команда REPLICAOF или SLAVEOF была использована для перенастройки реплики), поэтому важно завершить переписывание AOF и начать с правильного набора данных, представляющего набор данных в памяти при завершении работы сервера.
В некоторых ситуациях необходимо просто немедленно завершить работу экземпляра Redis, независимо от его содержимого. В таких случаях можно использовать команду SHUTDOWN NOW NOSAVE FORCE. В версиях до 7.0, где флаги NOW и FORCE недоступны, правильное сочетание команд — отправить CONFIG appendonly no, а затем SHUTDOWN NOSAVE. Первая команда выключит AOF, если это необходимо, и завершит дочерний процесс переписывания AOF, если он активен. Вторая команда не будет иметь проблем с выполнением, так как AOF больше не включен.
Минимизация риска потери данных
Начиная с Redis 7.0, сервер ожидает отстающих реплик до настраиваемого значения shutdown-timeout, по умолчанию 10 секунд, прежде чем завершить работу. Это обеспечивает максимальную эффективность, минимизируя риск потери данных в ситуации, когда не настроены точки сохранения и отключен AOF. До версии 7.0 выключение сильно загруженного узла-мастера в бездисковой установке было более подвержено потере данных. Чтобы минимизировать риск потери данных в таких конфигурациях, рекомендуется инициировать ручную FAILOVER (или CLUSTER FAILOVER), чтобы понизить мастер до реплики и повысить одну из реплик до нового мастера, прежде чем выключать узел-мастер.
Возврат
Простой строковый ответ: OK если ABORT был указан и выключение было прервано. При успешном выключении ничего не возвращается, так как сервер завершается и соединение закрывается. При ошибке возвращается ошибка.
История изменений поведения
-
>= 7.0.0: Введено ожидание отстающих реплик перед завершением работы.
История
- Начиная с версии Redis 7.0.0: добавлены модификаторы
NOW,FORCEиABORT.
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/shutdown/