我在Cassandra中有一个4节点设置,并决定使用以下配置,但ppl说这将与3节点设置相同,所以有人可以给我一个亮点并说出原因,
Nodes = 3, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1
Nodes = 4, Replication Factor = 3, Write Consistency = 3, Read Consistency = 1
根据我的理解,Nodes = 4,提供两个节点故障,将RF作为' 3'但是人们说在4节点设置中RF = 2将与RF = 3相同,你能解释一下原因吗?
谢谢, 哈利
答案 0 :(得分:4)
你的问题有点不清楚,因为我认为你没有正确构建这个问题。但我会尝试解释一些可以帮助你理解它的观点。
节点= 4,提供两个节点故障,将RF设置为“3”
是有益的
RF - >将保留多少份数据(行)。 (有多少服务器或节点将保留相同的行/数据)。
CL - >确认需要多少个节点才能让客户端知道/通知写/读操作是否成功。这意味着至少提到CL的节点数量(例如:如果CL是2个至少2个节点)必须确认/确保他们已成功写入数据或从这些副本中读取数据(等待所有必需的副本返回(协调器节点的结果)并合并结果(如果不同节点具有相同数据的不同更新,则保留最新数据)并成功将结果返回给客户端。
注意:如果RF = CL,那么您使用的CL等同于ALL。
所有是最高级别的一致性级别(数据肯定是最新的,但如果单个副本已关闭则无法使用)
情景1:
Nodes = 3, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1
对于写操作:
由于您使用了最高级别的写入CL(RF和写入CL值相同),因此这将是单点故障的情况。所有必需的副本必须处于活动状态,以确认客户端已在两个节点中成功写入数据。
对于读取操作:
阅读CL是ONE。因此,如果一个副本关闭,它可以存活。因为只有一个副本需要将结果返回给客户端。它可能是旧数据(如果数据更新仍未传播到此节点,但最终会保持一致),但读取将成功。
情景2:
Nodes = 3, Replication Factor = 3, Write Consistency = 2, Read Consistency = 1
对于写操作:
当节点数= RF时,所有数据都将被复制到所有节点中(100%拥有)。它将在一个节点/副本中存活下来。
对于读取操作: 如果两个副本都关闭,它可以存活。
场景3:
Nodes = 4, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1
对于写操作:
与方案1相同。
对于读取操作:
与方案1相同。
情景4:
Nodes = 4, Replication Factor = 3, Write Consistency = 3, Read Consistency = 1
对于写操作:
与方案1相同。
对于读取操作:
与方案2相同。
相关链接:
Understand cassandra replication factor versus consistency level
有关详情,请点击 DataStax Doc 。
如果您担心节点故障情况(读取或写入请求失败),节点数无关紧要。
假设您有3/4/5个节点,如果RF为3且CL为QUORUM(3/2 + 1~2),则群集可以容忍1个副本节点关闭。请阅读上面链接中的About the QUORUM level
部分。
如果您有更多节点,则群集可以处理更多数据或在节点之间正确加载和分发数据。但请求失败的情况将是相同的。
节点= 3,复制因子= 3,写入一致性= 2,读取 一致性= 1
节点= 4,复制因子= 3,写入一致性= 2,读取 一致性= 1
节点= 5,复制因子= 3,写入一致性= 2,读取 一致性= 1
当RF为3且Write和Read CL分别为2和1时,群集可以容忍一个副本用于写入,两个副本用于读取操作。我希望这会对你有所帮助。