代码之家  ›  专栏  ›  技术社区  ›  kalaolani

为什么nodetool刷新需要重新启动Cassandra 2.2.8?[已关闭]

  •  0
  • kalaolani  · 技术社区  · 7 年前

    文档中明确指出,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刷新用于重新加载新放置的sstable1。

    此时,使用local\u one一致性从每个节点查询的数据显示每个节点的sstable1和sstable2结果。

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

    重新启动集群后,一切正常,正如预期的那样。

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

    我的启动和停止C*过程如下。。。 开始系统控制启动casssandra。服务

    停止 nodetool禁用八卦 nodetool禁用 nodetool禁用二进制 nodetool排放 nodetool stopdemon<=应为错误 系统控制停止casssandra。服务

    .... 当然,重新启动是停止还是开始。:)

    提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  0
  •   kalaolani    7 年前

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

    问题摘要。。。

    1. 创建快照
    2. 恢复快照,nodetool刷新,日志中无错误
    3. 未替换sstables(虚拟数据[不是逻辑删除或提交日志问题])
    4. 由于缺少sstable文件(不在创建的快照中),后续快照失败
    5. 重新启动C*后,将替换sstables,并且新快照不再对任何丢失的sstable文件(不在创建的快照中)产生错误

    我的结论是,C*2.2.8有一个bug,而2.2.11没有。此外,由于Datastax不再支持C*,因此避免将非DSE的内容信任他们。他们不能像Apache那样被信任。