【问题标题】:Cassandra DB - Node is down and a request is made to fetch data in that NodeCassandra DB - 节点已关闭,并请求获取该节点中的数据
【发布时间】:2018-01-03 17:47:42
【问题描述】:

如果我们以没有副本节点的方式配置复制因子(数据存储在一个地方/仅节点)并且如果节点包含请求的数据已关闭,Cassandra DB 将如何处理请求?

它会不会返回任何数据或其他节点八卦并以某种方式从失败的节点(存储)中获取数据并发送所需的响应?如果数据被拾取,节点之间的数据传输是在节点宕机后立即发生(GOSSIP PROTOCOL)还是在发出请求后发生?

长期研究 GOSSIP 的发生方式和 Cassandra 的高可用性,但我想知道在“无副本”的情况下数据的可用性,因为我不想浪费额外的存储空间来应对偶尔的故障,同时,我需要可用性和无数据丢失(虽然延迟)

【问题讨论】:

    标签: cassandra-3.0 nosql


    【解决方案1】:

    我假设当您说“没有副本节点”时,您的意思是您已将复制因子设置为 1。在这种情况下,如果请求是读取,那么它将失败,如果请求是写入,它将被存储为提示,直到最大提示时间,并且将被重放。如果节点关闭的时间超过提示时间,则该写入将丢失。 Hinted Handoff: repair during write path

    通常,在 C* 集群中只有一个数据副本与 C* 使用方式的一些基本设计相违背,并且是一种反模式。数据复制是使用 C* 的正常和预期的一部分,并且允许它具有高可用性方面。 RF=1 会在系统中引入单点故障,因为包含该数据的服务器可能会因各种原因(包括维护等)而中断,从而导致请求失败。

    如果您真的在寻找提供高可用性且不会丢失数据的解决方案,那么您需要增加复制因子(我通常看到的标准是 RF=3)并设置集群硬件以减少/删除潜在的单点故障。

    【讨论】:

    • 请求失败是指查询的响应是空数据还是错误?所以我假设没有系统会自动开始从故障节点的存储中恢复数据并分发,直到我们修复节点,如果不修复,数据将永远丢失。
    • 对于任何请求,查询都会导致错误,因为没有足够的副本来满足请求的一致性级别。在写入的情况下,它仍将作为提示存储。一般来说,您在这里尝试做的是一种反模式,因为 C* 依赖于数据复制,因为它是高可用性机制
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2020-05-15
    • 2018-11-01
    • 2013-12-29
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多