如果我们以不存在副本节点的方式配置复制因子(数据仅存储在一个位置/节点中),并且如果节点包含请求的数据已关闭,那么Cassandra DB将如何处理请求?
它是否会返回没有数据或其他节点闲聊并以某种方式从失败的节点(存储)中获取数据并发送所需的响应?如果拾取数据,节点关闭后(GOSS)协议会在发出请求后立即发生节点之间的数据传输吗?
长期以来一直在研究GOSSIP如何发生以及Cassandra的高可用性,但是在“No Replicas”的情况下想知道数据的可用性,因为我不想为偶尔的故障浪费额外的存储,同时,我需要可用性和无数据丢失(虽然延迟)
答案 0 :(得分:0)
我假设当你说有#34;没有副本节点"你的意思是你已经设置了复制因子= 1。在这种情况下,如果请求是Read,则它将失败,如果请求是写入,它将作为提示存储,直到最大提示时间,并将被重放。如果节点关闭的时间超过提示时间,则该写入将丢失。 Hinted Handoff: repair during write path
通常,只有C *集群中的单个数据副本与C *的基本设计相悖,并且是反模式。数据复制是使用C *的正常和预期部分,并且是允许其高可用性方面的因素。 RF = 1会导致单点故障进入系统,因为包含该数据的服务器可能由于各种原因(包括维护等)导致请求失败。
如果您真的在寻找提供高可用性且无数据丢失的解决方案,那么您需要增加复制因子(我通常看到的标准是RF = 3)并以减少的方式设置群集硬件/删除潜在的单点故障。