这是根据 Datastax 文档从一致性级别表中截取的屏幕截图:
EACH_QUORUM 和 QUORUM 有什么区别?
Each
和 all
DC 是相同的 AFAIK。在 QUORUM 行中说明以下内容:
可能会出现某种程度的失败
为什么?如果每个 DC 中都有一个节点出现故障?这同样适用于 EACH_QUORUM 对吗?为什么 EACH_QUORUM 没有某种程度的失败,因为它是 ALL_QUORUM 而不是 ALL?
两个级别有相同的共同点(据我所知):
QUORUM 和 EACH_QUORUM 的区别如下。
假设您的集群中有 6 个节点 - 2 个 DC,每个 DC 有 3 个节点,两个 DC 的 RF=3(所有节点都有所有数据)。
QUORUM 和 EACH_QUORUM 值相同 = 4 (6/2 + 1)。然而,哪些节点可以响应略有不同。 EACH_QUORUM 满足条件的组合较少。
QUORUM 需要 4 个节点来响应,但可以是任意节点组合。例如,可能来自本地 DC 的 3 个节点和来自远程 DC 的 1 个节点做出响应。那就完全没问题了。
现在,使用 EACH_QUORUM,每个 DC 都必须有法定人数响应。意思是,在这种情况下,每个 DC 的 2 个节点必须响应,仅此而已(每个 DC 中的哪 2 个节点是不相关的)。来自本地 DC 的 3 个节点和来自远程 DC 的 1 个节点不符合条件,因为远程 DC 中的 1 个节点不是该 DC 的法定人数。
让我们将集群节点数更改为 7 而不是 6。DC1 有 4 个节点,DC2 有 3 个节点。 DC1 RF = 4 且 DC2 RF = 3(所有节点再次拥有数据)。这就是 RF 中奇数总数的乐趣开始的地方。
虽然我不确定“失败”这个词,但我可以看到在某些情况下这可能会出现问题。
对于 QUORUM,4 个节点需要响应 (7/2 + 1 = 4) - 任何 4 个节点 - 包括来自本地/较大 DC 的所有节点响应的情况(本例中为 DC1)。如果最新数据位于 DC2 上怎么办?在这种情况下,您可能会得到不良结果。
使用 EACH_QUORUM,需要 5 个节点响应(DC1 的法定人数 = 4/2+1 = 3,DC2 的法定人数 = 3/2+1 = 2 ==> 总计 = 5)。在这种情况下,您将强制 Cassandra 从两个 DC 返回数据 - 以及每个 DC 的 QUORUM 级别,这应该会给您带来良好的结果。
我再次在脑海中尝试确定 QUORUM 与 QUORUM 可能会出现哪些额外的“失败”。 EACH_QUORUM,但我根本看不到它。看起来如果有的话,具有奇数节点数的 EACH_QUORUM 在不可用的节点中不太灵活,因为每个 DC 中的法定人数必须响应。来自任何 DC 的任意法定数量的节点。我可以看到 QUORUM 可能会给您带来不良结果(如上所述)。
需要考虑的一件事是,QUORUM 与复制因子(RF)相关,这将决定每个数据中心可以离线并允许完成事务的节点数量。这意味着如果每个 DC 中有一个节点发生故障,这并不一定会导致不一致或查询失败。
为此,请使用公式:
NodesNeededForQuorum = ReplicationFactor / 2 + 1
记得对结果进行四舍五入。
使用以下场景可能更容易证明差异:假设每个数据中心有 2 个 DC,RF 为 3;如果您使用
QUORUM
,则任何 DC 中至少需要 4 个节点才能处理查询,每个 DC 可以有 2 个节点,DC1 可以有 3 个节点,DC2 有 1 个节点,或者 DC1 有 1 个节点,DC2 有 3 个节点。
使用 EACH_QUORUM
,还需要 4 个节点能够应答,但每个 DC 中应该只有 2 个节点。
如果您有 3 个 DC,RF 为 3,则任何 DC 的 5 个节点都可以满足
QUORUM
,而 EACH_QUORUM
将需要 6 个节点(每个 DC 2 个节点)。
如果 DC 之间的 RF 不同,事情可能会更加复杂,这取决于集群设计。
使用 EACH_QUORUM 时,请考虑在不同 DC 内通信时的延迟,如果网络通信速度较慢,或者它们位于较远的地理位置,则可能会出现查询超时。
EACH_QUORUM 和 QUORUM 之间的区别如下:-
即我们有 2 个 DC,每个 DC 有 5 个节点。 Cassandra 集群中共有 10 个节点,每个 DC1 上的复制因子为 2,DC2 上的复制因子为 3。
所以公式是复制因子/2 +1。 QUORUM 这里需要 5(2+3)/2 +1= 3 个节点(2 个节点可以响应 DC1 的请求,但 3 个节点可以响应 DC2 的请求)来确认协调节点。
EACH_QUORUM 这里需要 2/2 +1 = 2 和 3/2 +1 =2 个节点必须在每个 DC 上向协调器节点确认。
https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
可能会出现某种程度的故障有时 DC1 的某些节点不会响应,然后数据不会复制并且可以观察到故障,但其他 DC2 将满足请求。