Как удалить мертвый узел из кластера Cassandra?

  1. У меня есть кластер cassandra из 12 узлов на EC2.
  2. Из-за какого-то сбоя мы полностью потеряли один из узлов. Я имею в виду, что этой машины больше не существует.
  3. Итак, я создал новый экземпляр EC2 с другим IP-адресом и тем же токеном, что и у мертвого узла, и у меня также была резервная копия данных на этом узле, поэтому он работает нормально.
  4. Но проблема в том, что IP-адрес мертвых узлов по-прежнему отображается как недостижимый узел в кластере описания.
  5. Поскольку этот узел (экземпляр EC2) больше не существует, я не могу использовать списание nodetool или nodetool disabledgossip.

Как мне избавиться от этого недостижимого узла


person samarth    schedule 21.12.2011    source источник


Ответы (2)


Обычно при замене узла вы хотите установить токен нового узла на (failure node's token) - 1 и позволить ему загрузиться. Начиная с версии 1.0 теперь есть флаг, который вы можете указать при запуске, чтобы заменить мертвый узел: "cassandra.replace_token= ".

Поскольку вы уже добавили новый узел с тем же токеном, есть дополнительный шаг:

  1. Переместите токен нового узла в (failure node's token) - 1 с помощью nodetool move
  2. Запустите nodetool removetoken <failed node's token> с одного из верхних узлов
  3. Запустите nodetool cleanup на каждом узле

По сути, это инструкции до версии 1.0 по замене мертвого узла дополнительным перемещением токена.

person psanford    schedule 21.12.2011
comment
Спасибо, Псанфорд. Но в моем случае я уже запустил новый узел с тем же токеном, что и у мертвого узла. Теперь кольцо в порядке и сбалансировано. Но в кластере описания он показывает мертвый узел как недостижимый. В большинстве случаев это все еще нормально, но мы загружаем данные с помощью sstableloader, а с недоступным узлом sstableloader не работает. Какое может быть возможное решение для этого? - person samarth; 22.12.2011
comment
Вам нужно очистить кольцо от знаний о старом узле. Вы можете сделать это с помощью nodetool removetoken. Ваша проблема в том, что это также удалит замещающий узел. Поэтому вам нужно переместить токен замещающего узла в токен-1, прежде чем выполнять removetoken. - person psanford; 22.12.2011
comment
Я попробовал предложенное вами решение. Мы успешно переместили новый узел. Но во время удаления мертвого узла он застревает, говоря: «Статус удаления: удаление токена (62676456546693435176060154681903071729). Ожидание подтверждения репликации от [cassandra-1/10.101.101.01' - person samarth; 26.12.2011
comment
В этом случае вы можете запустить команду nodetool removetoken force, которая скажет Cassandra не ждать подтверждения от мертвого узла. - person psanford; 02.01.2012
comment
Когда все это будет сделано, вам, вероятно, потребуется перезапустить все узлы, чтобы удалить устаревшую информацию о сплетнях. Мне не удалось это сделать, и когда я попытался выполнить усечение на CF, который мне больше не нужен, я получил сообщения об ошибках, что не все узлы были включены. Тем не менее, несмотря на то, что кольцо nodetool показало их все. Запуск nodetool gossipinfo показал, что в кластере все еще сохранились некоторые сведения о мертвых узлах. Перезапуск всех узлов исправил это. - person Brian Tarbox; 21.05.2013
comment
Я смог решить свою проблему, просто выполнив nodetool removenode ‹uuid умершего узла›, а затем nodetool переместил ‹токен нового узла с неправильным идентификатором токена›, после чего новый узел появился в нужном месте кольцо, а затем получил правильный идентификатор токена. (ДСЕ 5.2.4) - person cgseller; 22.04.2016

У меня была та же проблема, и я решил ее с помощью removenode, который не требует от вас поиска и изменения токена узла.

Сначала получите UUID узла:

nodetool status

DN  192.168.56.201  ?          256     13.1%  4fa4d101-d8d2-4de6-9ad7-a487e165c4ac  r1
DN  192.168.56.202  ?          256     12.6%  e11d219a-0b65-461e-babc-6485343568f8  r1
UN  192.168.2.91    156.04 KB  256     12.4%  e1a33ed4-d613-47a6-8b3b-325650a2bbd4  RAC1
UN  192.168.2.92    156.22 KB  256     13.6%  3a4a086c-36a6-4d69-8b61-864ff37d03c9  RAC1
UN  192.168.2.93    149.6 KB   256     11.3%  20decc72-8d0a-4c3b-8804-cc8bc98fa9e8  RAC1

Как видите, .201 и .202 мертвы и находятся в другой сети. Они были изменены на .91 и .92 без надлежащего вывода из эксплуатации и повторного ввода в эксплуатацию. Я работал над установкой сети и сделал несколько ошибок...

Во-вторых, удалите .201 с помощью следующей команды:

nodetool removenode 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac

(в старых версиях это было nodetool remove ...)

Но, как и для nodetool removetoken ..., он блокирует... (см. комментарий samarth в ответе psandord). Однако у него есть побочный эффект: он помещает этот UUID в список узлов, которые нужно удалить. Итак, затем мы можем принудительно удалить с помощью:

nodetool removenode force

(в старых версиях это было nodetool remove ...)

Теперь узел принимает команду и сообщает мне, что он удаляет недопустимую запись:

RemovalStatus: удаление токена (-9136982325337481102). Ожидание подтверждения репликации от [/192.168.2.91,/192.168.2.92].

Мы также видим, что он связывается с двумя другими узлами, которые работают, и поэтому это занимает немного времени, но все же довольно быстро.

Далее nodetool status не показывает узел .201. Повторяю с .202 и теперь состояние чистое.

После этого вы также можете запустить очистку, как указано в ответе psanford:

nodetool cleanup

Очистку следует запускать на всех узлах один за другим, чтобы убедиться, что изменение полностью учтено.

person Alexis Wilke    schedule 31.10.2014
comment
Здравствуйте, пожалуйста, у меня есть вопрос. Состояние nodetool возвращает только один узел (с ip@ 127.0.0.1) Статус=Вверх/Вниз |/ Состояние=Нормальное/Выход/Присоединение/Перемещение -- Адрес Токены загрузки Владельцы (действующие) Идентификатор хоста Стойка UN 127.0.0.1 83,05 КБ 256 100,0 % 460ddcd9-1ee8-48b8-a618-c076056aad07 стойка1 - person researcher; 17.03.2015
comment
Как я могу изменить IP-адрес? и как я могу получить список всех узлов на кольце, как вы сделали? большое спасибо. С наилучшими пожеланиями. - person researcher; 17.03.2015
comment
Найдите файл с именем cassandra.yaml и внутри файла найдите запись с именем seed_provider. В нем есть записи для IP-адресов. Затем просмотрите файлы cassandra-rackdc.properties и cassandra-topology.properties. Существует также cassandra-topology.yaml, который, я думаю, больше не используется в более новых версиях. - person Alexis Wilke; 18.03.2015
comment
Обратите внимание, что в Cassandra 2.0+ команда удаления nodetool теперь называется removenode. - person 8forty; 01.07.2015