не могу заменить мертвый узел cassandra, потому что его не существует в сплетнях

Один из узлов в кластере cassandra умер.

Я везде использую cassandra 2.0.7.

Когда я делаю статус nodetool, это то, что я вижу (настоящие адреса были заменены поддельными 10 сетями)

[root@beta-new:/opt] #nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens  Owns   Host ID                               Rack
UN  10.10.1.94  171.02 KB  256     49.4%  fd2f76ae-8dcf-4e93-a37f-bf1e9088696e  rack1
DN  10.10.1.98     ?          256     50.6%  f2a48fc7-a362-43f5-9061-4bb3739fdeaf  rack1

Я попытался получить идентификатор токена для нижнего узла, выполнив кольцевую команду nodetool, выполнив поиск IP и выполнив команду -1, чтобы получить начальный.

[root@beta-new:/opt] #nodetool ring | grep 10.10.1.98 | head -1
10.10.1.98     rack1       Down   Normal  ?               50.59%              -9042969066862165996

Затем я начал следовать этой документации о том, как заменить узел:

[http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_replace_node_t.html?scroll=task_ds_aks_15q_gk%5d%5b1%5d

Поэтому я установил cassandra на новый узел, но не запускал его.

Установите следующие параметры:

cluster_name: 'Jokefire Cluster'
seed_provider:
      - seeds: "10.10.1.94"
listen_address: 10.10.1.94
endpoint_snitch: SimpleSnitch

И установите начальный токен новой установки как токен -1 узла, который я пытаюсь заменить в cssandra.yaml:

initial_token: -9042969066862165995

И убедившись, что данных еще нет в: /var/lib/cassandra

Я запустил базу данных:

[root@web2:/etc/alternatives/cassandrahome] #./bin/cassandra -f -Dcassandra.replace_address=10.10.1.98

Документация, на которую я ссылаюсь выше, говорит об использовании директивы replace_address в командной строке, а не cassandra-env.sh, если у вас есть установка tarball (что мы делаем), а не установка пакета.

После того, как я запускаю его, cassandra выходит из строя со следующим сообщением:

Exception encountered during startup: Cannot replace_address /10.10.10.98 because it doesn't exist in gossip

Итак, на данный момент мне интересно, пропустил ли я какие-либо шаги или есть что-то еще, что я могу попробовать заменить этот мертвый узел cassandra?


person bluethundr    schedule 01.06.2014    source источник


Ответы (2)


Случайно ли остальная часть вашего кластера была перезапущена после сбоя узла? Большая часть слуховой информации не сохраняется после полного перезапуска, поэтому у вас может действительно не быть слуховой информации для неработающего узла.

Об этой проблеме сообщалось как об ошибке CASSANDRA-8138, и ответ был следующим:

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

Таким образом, вместо того, чтобы заменять свой узел, вам нужно удалить отказавший узел из кластера и запустить новый. Если использовать vnodes, это довольно просто.

Узнайте идентификатор узла отказавшего узла (из другого узла в кластере).

nodetool status | grep DN

И удалить его из кластера:

nodetool removenode (node ID)

Теперь вы можете очистить каталог данных отказавшего узла и загрузить его как совершенно новый.

person Marc Fielding    schedule 03.02.2015

Некоторые менее известные проблемы замены мертвых узлов Cassandra были отражены в приведенной ниже ссылке на основе моего опыта:

https://github.com/laxmikant99/cassandra-single-node-disater-recovery-lessons

person Laxmikant    schedule 12.03.2018