Как удалить мертвый узел из кластера Кассандры? - PullRequest
8 голосов
/ 21 декабря 2011
  1. У меня есть кластер кассандры из 12 узлов на EC2.
  2. Из-за некоторой ошибки мы полностью потеряли один узел. Я имею в виду, что машина больше не существует.
  3. Итак, я создал новый экземпляр EC2 с другим ip и тем же токеном, что и у мертвого узла, и у меня также была резервная копия данных на этом узле, поэтому он отлично работает
  4. Но проблема в том, что мертвые узлы ip по-прежнему отображаются как недоступный узел в кластере описаний.
  5. Поскольку этот узел (экземпляр EC2) больше не существует, я не могу использовать вывод из эксплуатации nodetool или nodetool disablegossip

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

Ответы [ 2 ]

7 голосов
/ 01 ноября 2014

У меня была такая же проблема, и я решил ее с помощью 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 мертвы и находятся в другой сети. Они были изменены на 0,91 и 0,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

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

6 голосов
/ 21 декабря 2011

Обычно при замене узла вы хотите установить токен нового узла на (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 на каждом узле

Это в основном инструкции pre 1.0 для замены мертвого узла дополнительным ходом токена.

...