Как удалить мертвый узел из кластера Cassandra?
- У меня есть кластер Кассандры из 12 узлов на EC2.
- из-за некоторого сбоя мы полностью потеряли один из узлов.Я имею в виду, что машины больше не существует.
- поэтому я создал новый экземпляр EC2 с другим ip и тем же токеном, что и у мертвого узла, и у меня также была резервная копия данных на этом узле, поэтому он работает нормально
- но проблема в том, что IP-адрес мертвых узлов по-прежнему отображается как недостижимый узел в кластере описания.
- а что узел (экземпляр EC2) больше не существует я не могу использовать списание nodetool или nodetool disablegossip
как я могу избавиться от этого недостижимо узле
2 ответов
обычно при замене узла вы хотите установить токен нового узла в (failure node's token) - 1
и пусть он загрузочный. Начиная с 1.0 теперь есть флаг, который вы можете указать при запуске в заменить мертвый узел: "Кассандра.replace_token=".
поскольку вы уже добавили новый узел с тем же токеном, есть дополнительный шаг:
- переместить маркер нового узла к
(failure node's token) - 1
используяnodetool move
- выполнить
nodetool removetoken <failed node's token>
из одной из узлы - выполнить
nodetool cleanup
на каждом узле
это в основном pre 1.0 инструкции для замены мертвого узла дополнительным перемещением токена.
у меня была такая же проблема и я решил ее с 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 ...
, он блокирует... (см. комментарий Самарта в ответе psandord) однако он имеет побочный эффект, он помещает этот UUID в список узлов, которые необходимо удалить. Поэтому далее мы можем принудительно удалить:
nodetool removenode force
(в более старых версиях это был nodetool remove ...)
теперь узел принимает команду, она говорит мне, что он удаляет недопустимый запись:
RemovalStatus: удаление токена (-9136982325337481102). Ожидание подтверждения репликации от [/192.168.2.91, / 192.168.2.92].
мы также видим, что он общается с двумя другими узлами, и, таким образом, она занимает немного времени, но это все еще довольно быстро.
следующий a nodetool status
не показывает .Узел 201. Я повторите .202 и теперь статус чист.
после этого вы также можете запустить очистку как упомянутый в ответе psanford:
nodetool cleanup
очистка должна выполняться на всех узлах, один за другим, чтобы убедиться, что изменение полностью учтено.