在同一台机器上发生硬件故障后更换 Cassandra 种子节点?

Replace Cassandra seed node after hardware failure on same machine?

我有两个虚拟机,每个虚拟机都托管一个 Cassandra 种子节点。我擦除一个虚拟机来模拟硬件故障。我重新安装 Cassandra 并在 cassandra-env.sh 文件的末尾添加 replace_address_first_boot(使用我的真实 IP 地址)

 JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address_first_boot=1.1.1.1"

nodetool status 在另一台机器上将此机器列为 DN

cassandra.yaml显示默认值auto_bootstrap: true

然而,Cassandra 启动失败并显示:

ERROR [main] 2022-02-24 01:43:36,546 CassandraDaemon.java:803 - Exception encountered during startup
java.lang.RuntimeException: Replacing a node without bootstrapping risks invalidating consistency guarantees as the expected data may not be present until repair is run. To perform this operation, please restart with -Dcassandra.allow_unsafe_replace=true      

如何在不使用 unsafe 标志的情况下 bootstrap 新种子机,即使它与旧种子机具有相同的 IP 地址?

不幸的是,种子节点不会在加入时流式传输。我的建议是从 cassandra.yaml 中的 seeds 中删除它的 IP。然后加入后应该就可以了

如果您仍然希望它成为种子节点,您可以随时使用自己的 IP 编辑它的 seeds 属性 并在引导完成后重新启动。

否则,如果您可以让替换节点启动(无需引导),您始终可以 运行 一个 nodetool repair 来流式传输数据。但是这里的缺点是,节点将尝试在 期间 处理请求,因此您可能需要 运行 nodetool disablebinary 来防止这种情况发生(并且当然 re-enable 完成后它)。