重新添加现有DR节点时Cassandra异常问题求助
Cassandra跨DC集群恢复问题(DC1与DR1)
环境与初始配置
DC侧(dc1)
- 节点数量:3个,IP分别为
x.x.x.112、x.x.x.113、x.x.x.114 - 种子节点:
x.x.x.114(所有节点的seed_provider均包含此节点) - 节点配置文件:
cassandra-rackdc.properties:dc=dc1 rack=rack1cassandra.yaml(各节点替换对应IP):num_tokens: 16 seed_provider: - seeds: "x.x.x.114, x.x.y.114" listen_address: x.x.x.112 rpc_address: x.x.x.112 endpoint_snitch: GossipingPropertyFileSnitch
DR侧(dr1)
- 节点数量:3个,IP分别为
x.x.y.112、x.x.y.113、x.x.y.114 - 种子节点:
x.x.y.114(所有节点的seed_provider均包含此节点) - 节点配置文件:
cassandra-rackdc.properties:dc=dr1 rack=rack1cassandra.yaml(各节点替换对应IP):num_tokens: 16 seed_provider: - seeds: "x.x.x.114,x.x.y.114" listen_address: x.x.y.112 rpc_address: x.x.y.112 endpoint_snitch: GossipingPropertyFileSnitch
问题发生过程
- 因网络/基础设施问题,使用
nodetool removenode移除DR侧所有节点 - 重装并重启DR节点后,发现无法连接到集群
- 移除DC与DR两侧seed_provider中的交叉种子节点(即互相移除对方DC的种子IP)
- 当前状态:
- DC侧
nodetool gossipinfo仍能看到DR节点,部分节点显示removed状态,部分带有REMOVAL_COORDINATOR标记,但该协调节点已不在集群中 - DC侧服务正常,keyspace配置为:
CREATE KEYSPACE mykeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '3'} AND durable_writes = true; - 目标是恢复DR侧,将keyspace修改为:
ALTER KEYSPACE mykeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '3', 'dr1': '3'} AND durable_writes = true;
- DC侧
- 尝试过的操作无效:
- 重启节点
- 清理DR侧数据目录
- DR节点行为异常:
x.x.y.114自动连接到DC节点,出现在DC侧nodetool status中(尽管已无交叉种子配置)- 在DR节点
x.x.y.112执行nodetool status时,DC节点显示为DN状态,但x.x.y.114不在列表中
更新:72小时后出现的新错误
移除节点等待72小时后,将x.x.y.112加入x.x.y.114的seed_provider,启动x.x.y.114时出现schema同步错误:
ERROR [main] 2024-09-24 10:31:22,915 DefaultSchemaUpdateHandler.java:142 - 未在PT30S内收到所有已知版本的schema。可使用-Dcassandra.skip_schema_check=true跳过此检查。 ERROR [main] 2024-09-24 10:31:22,917 CassandraDaemon.java:900 - 启动过程中遇到异常 java.lang.IllegalStateException: 无法在PT30S内完成schema就绪 at org.apache.cassandra.service.StorageService.waitForSchema(StorageService.java:1140) at org.apache.cassandra.dht.BootStrapper.allocateTokens(BootStrapper.java:234) at org.apache.cassandra.dht.BootStrapper.getBootstrapTokens(BootStrapper.java:180) at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1192) at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1145) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:936) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:854) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:421) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:744) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:878) INFO [StorageServiceShutdownHook] 2024-09-24 10:31:22,919 HintsService.java:235 - 已暂停hints分发
问题诉求
如何彻底清理DR侧节点的残留集群信息,将其重新作为dr1 DC加入集群?
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

