Кассандра: замененные узлы отображаются в Nodetool GossipInfo и Nodetool Status

Мы используем Cassandra 3.9.0. Недавно у нас были некоторые проблемы с 1 узлом. Этот узел был поврежден при достижении 100% использования диска.

Один из подходов заключается в том, чтобы заменить узел новым узлом в соответствии со следующей инструкцией, предоставленной Datastax. https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsReplaceNode.html

После того, как замена сделана в Test Env, когда мы делаем состояние nodetool для нового узла, старый узел не отображается. Но при выполнении из других узлов обнаруживается старый мертвый узел. Точно так же, когда gossipinfo nodetool выполняется в существующих узлах, отличных от нового входящего узла, ссылка на старый узел найдена.

Как показано ниже, мы заменяем a2 на a4

Status=Up/Down
/ State=Normal/Leaving/Joining/Moving
--  Address     Load  Tokens  Owns(effective)  Host ID  Rack
UN  x.x.x.a1  4.52 GiB   256      72.0%       HOSTID1  rack1
DN  x.x.x.a2  4.56 GiB   256      77.5%       null     rack1
UN  x.x.x.a3  4.33 GiB   256      76.9%       HOSTID3  rack1
UN  x.x.x.a4  5.59 GiB   256      73.6%       HOSTID4  rack1

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

UN  x.x.x.a1  4.52 GiB   256      100.0%    HOSTID1  rack1
UN  x.x.x.a3  4.33 GiB   256      100.0%    HOSTID3  rack1
UN  x.x.x.a4  5.59 GiB   256      100.0%    HOSTID4  rack1

Есть какой-нибудь рекомендуемый способ решить эту ситуацию?

2 ответа

На этой странице документа описан процесс, немного отличающийся от того, который я использую для замены узлов, и, похоже, не упоминается о его выполнении nodetool decommission или же nodetool removenode, Я не хочу делать какие-либо предположения о вашем кластере (например, вы можете использовать несколько DC), но я полагаю, что вам придется выполнить одну из этих команд, чтобы кластер удалил мертвый узел из топологии.

Похоже, что вы уже остановили экземпляр, на котором работал "мертвый узел", вы не сможете запустить nodetool decommission от него. Вместо этого я бы рекомендовал перейти на другой узел, который все еще видит его как часть кластера, и запустить nodetool removenode, Команда принимает UUID мертвого узла в качестве аргумента, так что вы можете найти это через nodetool status пройти.

Команда выполняется долго, поэтому я рекомендую запустить ее в screen или же tmux сессия. Вы можете проверить прогресс, запустив nodetool removenode -- status, Команда перераспределяет токены, которые мертвый узел владел, другим узлам кластера.

РЕДАКТИРОВАТЬ Просто хочу уточнить, что то, что я имел в виду под процессом, описанным в документе, который вы опубликовали, отличается от моего, я имел в виду именно запуск нового узла с -Dcassandra.replace_address=address_of_dead_node вариант. В любом случае, если узел не работает и не может вернуться в кластер, запуск nodetool removenode на его UUID.

Другой вариант, который вы должны попробовать, это заменить тот же узел, если на нем все в порядке. Я имел в виду замену собственного узла в этом случае без перемещения диапазона для данных, и он будет иметь тот же диапазон и будет передавать данные из других узлов в соответствии с диапазоном токенов.

Другие вопросы по тегам