为什么 nodetool refresh 需要重启 Cassandra 2.2.8?

Why does nodetool refresh require a restart of Cassandra 2.2.8?

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

  1. 在完全修复、模式稳定且不变的测试密钥空间上创建快照。快照文件夹中存在预期的硬链接。
  2. 将数据添加到列族并刷新该数据,从而产生两个 sstable。快照硬链接到 sstable1,备份现在有一个到 sstable2 的硬链接,由刷新创建。
  3. 数据被 CQLSH 截断,或者磁盘上的文件被清除。
  4. 快照文件被复制或硬链接到数据目录。两种方法都会导致相同的行为。这导致数据目录中只有 sstable1。
  5. 所有缓存都已失效...仅使用密钥缓存。 [与否]
  6. nodetool flush用于证明内存中没有任何内容。 [与否]
  7. nodetool refresh用于重新加载新放置的sstable1。

此时使用local_one一致性从每个节点查询的数据显示每个节点的sstable1和sstable2结果

如果尝试拍摄快照(或修复...,因为修复前的快照),尝试拍摄不存在的 sstable2 的快照失败。

集群重启后,一切正常,符合预期。

与 nodetool drain 相比,C* 2.2.8 的 nodetool 刷新错误吗?

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

停止... 节点工具禁用八卦 节点工具禁用节俭 节点工具禁用二进制文件 节点工具漏 nodetool stopdaemon <= 期待一个错误 systemctl 停止 casssandra.service

.....当然,重启就是停止和开始。 :)

提前致谢。

我使用的是 Datastax 存储库中的 C* 2.2.8。现在,我正在使用 Apache 存储库中的 Apache C* 2.2.11,我无法再重现此问题。

问题总结...

  1. 创建快照
  2. 还原快照,nodetool 刷新,日志中没有错误
  3. sstables 未被替换(幻像数据 [不是墓碑或提交日志问题])
  4. 由于缺少 sstable 文件(不在创建的快照中),后续快照失败
  5. 重新启动 C* 后,sstables 被替换,新快照不再为任何丢失的 sstable 文件(不在创建的快照中)产生错误

我的结论是 C* 2.2.8 有一个错误,而 2.2.11 没有。此外,由于 Datastax 不再支持 C*,因此请避免将任何非 DSE 的东西都交给他们。他们不像 Apache 那样值得信任。