Один из узлов в кластере 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
Затем я начал следовать этой документации о том, как заменить узел:
Поэтому я установил 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?