为什么nodetool刷新需要重启Cassandra 2.2.8?

时间:2017-12-20 00:05:53

标签: cassandra refresh nodetool

文档明确指出nodetool刷新会将新放置的SSTable加载到系统而不重新启动。简单的环境...... 6个节点集群,2个DC,每个DC 3个节点,所讨论的密钥空间是每个DC的RF3。是的......我使用的是C * 2.2.8,目前我无能为力。这绝不会在单节点集群或双节点集群上横向移动[当然没有使用网络策略] ......当然。 :)

  1. 在完全修复,架构稳定且不变的测试键空间上创建快照。快照文件夹中存在预期的硬链接。
  2. 将数据添加到列族并刷新该数据,从而产生两个sstables。快照硬连接到sstable1,备份现在有一个与flush建立的sstable2的硬链接。
  3. 通过CQLSH截断数据,或清除磁盘文件。
  4. 快照文件被复制或硬链接到数据目录。两种方法都会产生相同的行为。这导致数据目录中只有sstable1。
  5. 所有缓存都无效...仅使用密钥缓存。 [或不]
  6. nodetool flush用于证明内存中没有任何内容。 [或不]
  7. nodetool refresh用于重新加载新放置的sstable1。
  8. 此时,使用local_one一致性从每个节点查询的数据显示每个节点的sstable1和sstable2结果。

    如果尝试快照(或修复...因为修复前的快照),它无法尝试对不存在的sstable2进行快照。

    重新启动群集后,一切都很好并且符合预期。

    与nodetool drain相比,nodetool是否为C * 2.2.8刷新了错误?

    我的开始和停止C *过程如下...... start ... systemctl start casssandra.service

    ...停止 nodetool disablegossip nodetool disablethrift nodetool disablebinary nodetool drain nodetool stopdaemon< =期待错误 systemctl stop casssandra.service

    ....当然重启是一个停止的开始。 :)

    提前谢谢。

1 个答案:

答案 0 :(得分:0)

我在Datastax repo中使用C * 2.2.8。现在,我正在使用Apache repo中的Apache C * 2.2.11,我无法再重现这个问题。

问题摘要......

  1. 创建快照
  2. 恢复快照,nodetool刷新,日志中没有错误
  3. sstables未被替换(幻像数据[不是墓碑或提交日志问题])
  4. 后续快照因缺少sstable文件(创建的快照中没有)而失败
  5. 重新启动C *后,sstables被替换,新的快照不再为任何丢失的sstable文件(不在创建的快照中)产生错误。
  6. 我的结论是C * 2.2.8有一个bug而2.2.11没有。此外,由于Datastax不再支持C *,因此请避免将其信任任何非DSE的内容。他们不像Apache那样受信任。