Кассандра: замененные узлы отображаются в 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.
Другой вариант, который вы должны попробовать, это заменить тот же узел, если на нем все в порядке. Я имел в виду замену собственного узла в этом случае без перемещения диапазона для данных, и он будет иметь тот же диапазон и будет передавать данные из других узлов в соответствии с диапазоном токенов.