根据到Datastax文档,这是来自一致性级别表的屏幕截图

EACH_QUORUM和仲裁有什么区别?Each和all DC是相同的AFAIK。法定人数行规定如下:
某种程度的失败是可能的。
为什么?如果每个DC中有一个节点被关闭?同样的适用于EACH_QUORUM,对吗?为什么EACH_QUORUM没有某种程度的失败,因为它是ALL_QUORUM而不是全部?
这两个级别具有相同的共同点(AFAIK):
发布于 2020-01-06 20:12:49
仲裁和EACH_QUORUM之间的区别如下。
假设集群中有6个节点--2个DC,每个3个节点,两个DC都有RF=3 (所有节点都有所有数据)。
仲裁和EACH_QUORUM值相同=4 (6/2 + 1)。但是,哪些节点可以作出轻微的响应。EACH_QUORUM拥有较少的满足条件的组合。
仲裁需要4个节点来响应,但需要任何节点的组合。例如,可能来自本地DC的3个节点和来自远程DC的1个节点响应。那完全没问题。
现在,对于QUORUM_EACH,每个DC必须有一个仲裁响应。这意味着来自每个DC的2个节点必须在这种情况下做出响应,这就是它(每个DC中的2个节点与此无关)。来自本地dc的3个节点和来自远程DC的1个节点不限定为远程DC中的1个节点不是该dc的仲裁。
让我们将集群节点数改为7,而不是6。DC1有4个节点,DC2有3个节点。DC1 RF =4和DC2 RF =3(所有节点都有数据)。这里的乐趣从射频中的奇数总数开始。
虽然我不确定“失败”这个词,但我可以看到某些情况下,这可能是有问题的。
对于仲裁,4个节点需要响应(7/2 +1= 4) --任意4个节点--包括来自本地/较大DC的所有节点响应的场景(本例中为DC1)。如果最新的数据是在DC2上呢?在这种情况下,您可能会得到不希望的结果。
对于QUORUM_EACH,需要响应5个节点( DC1 = 4/2+1 = 3,DC2仲裁= 3/2+1 =2 ==>总计= 5)。在这种情况下,您将强制cassandra从两个DC返回数据--以及来自每个DC的仲裁级别,这将给您带来好的结果。
再次,我在我的头脑中试图确定额外的“失败”可能与法定人数v.s. QUORUM_EACH和我不能在我的头顶看到它。看起来,在不可用的节点中,具有奇数节点计数的QUORUM_EACH似乎不那么灵活,因为每个DC中的仲裁必须响应来自任何DC的任意节点的仲裁数。我可以看到法定人数可能会给你带来不良的结果(以上解释)。
发布于 2020-01-06 20:12:32
需要考虑的一件事是仲裁与复制因子(RF)相关,这将决定每个数据中心可以脱机并允许完成事务的节点数量。这意味着,如果每个DC中有一个节点被关闭,这并不一定会导致不一致或失败的查询。
为此,请使用公式
NodesNeededForQuorum = ReplicationFactor / 2 + 1记得把结果算一下。
下面的场景可能更容易演示这种区别:假设在每个数据中心中有2个RF为3的DC;如果使用QUORUM,则需要来自任何DC的至少4个节点才能处理查询,可以是来自每个DC的2个,来自DC1的3个,来自DC2的1个,或来自DC1的1个,来自DC2的3个。对于EACH_QUORUM,它还需要4个节点能够回答问题,但每个DC只需要两个节点。
如果有3个DC,RF为3,则QUORUM将由来自任意DC的5个节点完成,而EACH_QUORUM将需要6个节点(每个DC需要2个)。
如果RF在DC之间是不同的,那么事情可能会更复杂,这取决于集群设计。
在使用EACH_QUORUM时,请考虑在不同DC之间通信时的延迟,如果网络通信速度慢,或者它们位于遥远的地理位置,则可能会导致查询超时。
发布于 2020-01-18 14:06:15
EACH_QUORUM与法定人数之间的差异如下:
也就是说,我们有两个DC,每个5个节点。Cassandra集群中共有10个节点,复制因子在每个DC1上为2个,在DC2上为3个。
因此,该公式是复制因子/2 +1。仲裁需要这里的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会满足请求。
https://stackoverflow.com/questions/59617657
复制相似问题