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 ring命令获取down节点的令牌ID,grepping for IP并执行head -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
并将新安装的初始标记设置为我尝试在cssandra.yaml中替换的节点的标记-1:
initial_token: -9042969066862165995
在确定没有数据后: 的/ var / lib中/卡桑德拉
我启动了数据库:
[root@web2:/etc/alternatives/cassandrahome] #./bin/cassandra -f -Dcassandra.replace_address=10.10.1.98
我链接到上面的文档说如果你有一个tarball安装(我们这样做)而不是一个软件包安装,那么在命令行而不是cassandra-env.sh上使用replace_address指令。
启动后,cassandra失败并显示以下消息:
Exception encountered during startup: Cannot replace_address /10.10.10.98 because it doesn't exist in gossip
所以我现在想知道我是否错过了任何步骤,或者是否还有其他任何东西可以尝试替换这个死亡的cassandra节点?
答案 0 :(得分:8)
自节点故障以来,您的群集的其余部分是否已重新启动?大多数八卦信息无法在完全重启后继续存在,因此您可能真的没有关闭节点的八卦信息。
此问题被报告为错误CASSANDRA-8138,答案是:
我认为我更倾向于说一个节点死亡的边缘情况,然后一个完整的集群重启(滚动仍然可以工作)是不支持的,而不是进行这样的侵入式更改以支持更换奇怪而罕见的情况。如果发生这种情况,是时候暗杀节点并引导另一个节点。
因此,您需要从群集中删除故障节点并启动新节点,而不是替换节点。如果使用vnodes,它非常简单。
发现失败节点的节点ID(来自群集中的另一个节点)
nodetool status | grep DN
将其从群集中删除:
nodetool removenode (node ID)
现在您可以清除故障节点的数据目录,并将其作为一个全新的节点引导。
答案 1 :(得分:1)
根据我的经验,在下面的链接中捕获了一些鲜为人知的Cassandra死节点替换问题: