cassandra 中的 4 节点设置与 3 节点设置相同

4 node setup in cassandra is as same as 3 node setup

我在 Cassandra 中有一个 4 节点设置,并决定采用以下配置,但有人说这与 3 节点设置相同,所以有人可以给我一个提示并说明原因吗,

Nodes = 3, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1
Nodes = 4, Replication Factor = 3, Write Consistency = 3, Read Consistency = 1

根据我的理解,节点 = 4,提供两个节点故障,将 RF 设置为“3”是有益的,但人们说 RF = 2 与 4 节点设置中的 RF = 3 相同,你能解释一下为什么吗?

谢谢, 哈利

你的问题有点不清楚,因为我认为你没有正确构建问题。但我会尝试解释一些有助于您理解它的要点。

Nodes = 4, provide the two node failure, It is beneficial to have RF as '3'

  1. 节点数不是读/写失败的计算因素。 RF(复制因子)和 CL(一致性级别)是 read/write 失败的决定因素(如果所需的副本或节点已关闭)。

RF -> 将保留多少份数据(行)。 (有多少服务器或节点将保持不变row/data)。

CL -> 确认需要多少个节点才能让客户端 know/inform write/read 操作成功。这意味着至少有 CL 提到的节点数(例如:如果 CL 为 2,则至少有 2 个节点)必须 acknowledge/ensure 它们已成功写入数据或从这些副本读取数据(等到所有必需的复制 return 结果到协调节点)并合并结果(如果不同节点对相同数据有不同的更新,则保留最新数据)并成功 return 结果到客户端。

注意:如果RF = CL,那么你已经使用了相当于ALL的CL。

ALL 是最高级别的一致性级别(数据肯定是最新的,但如果单个副本宕机则不可用)

场景一:

Nodes = 3, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1

写操作:

因为你使用了最高级别的write CL(RF和write CL值相同),那么这就是单点故障的情况。所有必需的副本都必须处于活动状态,以确认客户端数据已成功写入两个节点。

读操作:

读取 CL 为 ONE。所以它可以在一个副本宕机时存活下来。因为只有一个副本需要 return 结果给客户端。可能是旧数据(如果数据的更新还没有传播到这个节点,但最终会保持一致),但是读取会成功。

场景二:

Nodes = 3, Replication Factor = 3, Write Consistency = 2, Read Consistency = 1

写操作:

由于节点数 = RF,所有数据将被复制到所有节点(100% 拥有)。它会在 node/replica 下存活下来。

读操作: 两个replicas down了还能存活

场景三:

Nodes = 4, Replication Factor = 2, Write Consistency = 2, Read Consistency = 1

写操作:

同场景一

读操作:

同场景一

场景 4:

Nodes = 4, Replication Factor = 3, Write Consistency = 3, Read Consistency = 1

写操作:

同场景一

读操作:

与场景 2 相同。

相关Link:

Understand cassandra replication factor versus consistency level

详情请看DataStax Doc.

已编辑

如果您担心节点故障情况(读取或写入请求失败),节点数并不重要。

假设你有3/4/5个节点,如果RF为3,CL为QUORUM(3/2 + 1 ~ 2),集群可以容忍1个副本节点宕机。请阅读上面 link 的 About the QUORUM level 部分。

如果您有更多节点,集群可以处理更多数据或在节点之间适当地加载和分发数据。但是请求故障转移场景将是相同的。

Nodes = 3, Replication Factor = 3, Write Consistency = 2, Read Consistency = 1

Nodes = 4, Replication Factor = 3, Write Consistency = 2, Read Consistency = 1

Nodes = 5, Replication Factor = 3, Write Consistency = 2, Read Consistency = 1

由于 RF 为 3,Write 和 Read CL 分别为 2 和 1,因此集群可以容忍一个副本停机进行写入操作,两个副本停机进行读取操作。希望对你有帮助。