You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scylla集群RF=2双节点数据不一致问题求助

双节点Scylla集群数据不一致问题解答

这不属于预期行为,你的副本机制理解是正确的:当keyspace的复制因子(RF)设为2时,所有写入操作会同步到两个节点,双节点的数据应该完全一致。以下是可能的原因排查和解决步骤:

可能的原因

  • 节点加入时的初始同步异常:添加节点2的过程中,初始数据同步未完成就开始接收写入,或者同步过程中出现网络中断、日志报错等问题,导致部分数据未同步。
  • Repair操作未正确执行:你执行的repair可能不是全量repair,或者执行过程中被中断,没有覆盖所有数据范围。
  • 行数统计工具的误差:你用来统计行数的工具(比如nodetool tablestats)可能存在统计偏差,比如未计入memtable中的数据(虽然你执行了flush,但仍需验证)。
  • GC或删除操作的影响:虽然gc_grace_seconds设为864000(10天),但如果节点2在加入后有大量数据被标记删除并完成GC,而节点1的GC尚未执行,不过这种情况导致近700万行的差距可能性极低。

排查与解决步骤

  1. 验证实际行数的准确性
    分别连接两个节点的cqlsh(指定节点IP:cqlsh 192.168.1.51和cqlsh 192.168.1.100),执行以下CQL命令统计实际行数:

    SELECT COUNT(*) FROM uzzstore.chunks;
    

    确认两个节点的实际查询结果是否一致,排除统计工具的误差。

  2. 执行全量Repair操作
    在任意节点执行全量repair,确保覆盖整个keyspace:

    nodetool repair -full uzzstore
    

    执行过程中不要中断,查看Scylla日志确认repair是否完成,没有报错。

  3. 检查集群日志
    查看两个节点的Scylla日志(默认路径/var/log/scylla/scylla.log),搜索repair、stream、replication相关关键词,排查同步过程中是否有错误、中断等异常信息。

  4. 检查Token分配情况
    执行nodetool ring查看集群的token范围分配,确认两个节点的token覆盖范围正常,没有重叠或缺失的情况,确保数据分片分配正确。

  5. 验证当前写入的同步性
    插入一条测试数据:

    INSERT INTO uzzstore.chunks (id, size) VALUES (textAsBlob('test-id'), 100);
    

    然后在两个节点分别查询这条数据,确认当前的写入操作是否能正常同步到节点2。

如果以上步骤执行后数据仍不一致,可能是节点加入过程中出现了不可逆的数据丢失,建议从节点1备份数据后恢复到节点2,或者将节点2移出集群后重新加入。

内容的提问来源于stack exchange,提问作者Ste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:07:30