CLUSTER
CLUSTER FORGET
CLUSTER FORGET node-id
- Доступно с версии:
- 3.0.0
- Временная сложность:
- O(1)
- Категории ACL:
-
@admin,@slow,@dangerous,
Команда используется для удаления узла, указанного его ID, из набора известных узлов узла Redis Cluster, получившего команду. Другими словами, указанный узел удаляется из таблицы узлов узла, получившего команду.
Поскольку когда узел является частью кластера, все остальные узлы, участвующие в кластере, знают о нём, для полного удаления узла из кластера необходимо отправить команду CLUSTER FORGET на все оставшиеся узлы, независимо от того, являются ли они мастерами или репликами.
Однако команда не может просто удалить узел из внутренней таблицы узлов узла, получившего команду, она также реализует список запрещённых узлов, не позволяя добавить тот же узел в качестве побочного эффекта обработки раздела сплетен пакетов сердцебиения, полученных от других узлов.
Подробности о необходимости списка запрещённых узлов
В следующем примере мы покажем, почему команда не должна просто удалять заданный узел из таблицы узлов, но также предотвращать его повторное вставление на некоторое время.
Предположим, у нас есть четыре узла: A, B, C и D. Для того, чтобы получить кластер из трёх узлов A, B, C, мы можем выполнить следующие действия:
- Перераспределить все слоты хеширования с D на узлы A, B, C.
- D теперь пустой, но по-прежнему указан в таблице узлов A, B и C.
- Мы связываемся с A и отправляем команду
CLUSTER FORGET D. - B отправляет узлу A пакет сердцебиения, где указан узел D.
- A больше не знает узел D (см. шаг 3), поэтому начинает рукопожатие с D.
- D повторно добавляется в таблицу узлов A.
Как вы можете видеть, таким образом удаление узла является хрупким, нам нужно отправить команды CLUSTER FORGET на все узлы как можно скорее, надеясь, что в то же время не обрабатываются разделы сплетен. Из-за этой проблемы команда реализует список запрещённых узлов со временем истечения для каждой записи.
Итак, что на самом деле делает команда:
- Указанный узел удаляется из таблицы узлов.
- Идентификатор удалённого узла добавляется в список запрещённых узлов на 1 минуту.
- Узел пропустит все идентификаторы узлов, указанные в списке запрещённых, при обработке разделов сплетен, полученных в пакетах сердцебиения от других узлов.
Таким образом, у нас есть окно в 60 секунд, чтобы сообщить всем узлам в кластере, что мы хотим удалить узел.
Специальные условия, не позволяющие выполнить команду
Команда не выполняется и возвращает ошибку в следующих случаях:
- Указанный идентификатор узла не найден в таблице узлов.
- Узел, получающий команду, является репликой, и указанный идентификатор узла идентифицирует его текущего мастера.
- Идентификатор узла идентифицирует тот же узел, на который мы отправляем команду.
Возврат
Простой строковый ответ: OK если команда была выполнена успешно, в противном случае возвращается ошибка.
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/cluster-forget/