2017-07-27 57 views
0

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

它会返回没有数据或其他节点八卦,并以某种方式从失败的节点(存储)中获取数据并发送所需的响应?如果数据被拾取,节点之间的数据传输是否会在节点关闭(GOSSIP协议)或请求完成后立即发生?

对GOSSIP的发生和Cassandra的高可用性进行了长时间的研究,但由于我不想浪费额外的存储空间来偶尔发生故障,所以想知道“无副本”情况下数据的可用性。需要可用性和没有数据丢失(虽然延迟)

回答

0

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

一般来说,只有C *集群中有一个数据副本才会违背一些如何使用C *的基本设计,并且是反模式。数据重复是使用C *的正常和期望的部分,并且是其高可用性方面的原因。 RF = 1会导致系统出现单点故障,因为包含该数据的服务器可能因各种原因(包括维护等)导致请求失败。

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

+0

通过请求失败你的意思querie的回应将是空的数据或错误?因此,我假设没有系统会自动开始从故障节点的存储中恢复数据并分发,直到我们修复节点,如果不修复,数据将永远丢失。 –

+0

对于任何请求,查询都会导致错误,因为没有足够的副本满足请求的一致性级别。在写入的情况下,它仍将作为提示存储。一般来说,你在这里试图做的是反模式,因为C *依靠数据复制来实现高可用性机制 – bechbd