Cassandra仲裁:一致性级别

Cassandra仲裁:一致性级别,cassandra,datastax,Cassandra,Datastax,我在Cassandra有一个3个DC环,每个DC都有一个4节点集群。所以它的4个节点*3(DC)=12个节点。我正在测试当我们有Quorum一致性级别时,一些节点出现故障时Cassandra的行为。我们已将每个数据中心的复制系数设置为3。所以我们 Quorum=Floor(复制系数之和/2)+1。RF=3法定人数=5。 理论上,如果我的12节点集群中有5个节点,那么我应该很擅长读写。因此,我关闭了一个完整的数据中心DC1,并在另一个数据中心(Dc2)中关闭了3个节点。所以我在DC2中有一个节点,

我在Cassandra有一个3个DC环,每个DC都有一个4节点集群。所以它的4个节点*3(DC)=12个节点。我正在测试当我们有
Quorum
一致性级别时,一些节点出现故障时Cassandra的行为。我们已将每个数据中心的复制系数设置为3。所以我们

Quorum=Floor(复制系数之和/2)+1。RF=3法定人数=5。

理论上,如果我的12节点集群中有5个节点,那么我应该很擅长读写。因此,我关闭了一个完整的数据中心DC1,并在另一个数据中心(Dc2)中关闭了3个节点。所以我在DC2中有一个节点,整个DC3(4个节点)。我有5个节点。从理论上讲,这应该有助于我的写作在群体一致性方面取得成功。但是,当我跑的时候,我得到了

Cassandra.Unavailable异常:没有足够的副本可用于一致性1的查询(需要5个副本,但只有4个处于活动状态)


但是,我有5个节点还活着。我在这里遗漏了什么?

仲裁本身指的是同一数据中心的成员。 在你的例子中,DC3有4个。 但您要求的法定人数为5人,DC3无法提供。 这就是为什么会有“一”和“一”这样的概念

我敢肯定,即使您的所有DC节点都已启动,您也会在仲裁5中遇到相同的错误


您可以参考:

在我看来,操作应该失败,也将失败

从DC开始,您可以随时保证3个副本,RF 3

另一个DC中向上的节点有约60%的时间确定另一个副本

3+1=4

你要的是五级


5>4=>失败。

仲裁适用于整个群集,本地仲裁适用于单个数据中心。只是需要了解一些基本知识,cassandra是分布式系统,这意味着数据分布在集群中,每个节点都拥有一个主范围,同时复制其他节点的数据。这意味着负责存储一段数据的节点是唯一计算一致性的节点。在您的情况下,5个节点处于运行状态并不意味着写入或读取满足仲裁一致性,因为所有节点处于运行状态的DC肯定至少有3个节点中的数据(请记住,您的RF为3),但只有1个节点的DC将有或没有您正在查询的数据


在您的情况下,如果使用本地仲裁在所有节点都启动的情况下点击DC,您将得到正确的结果。

“仲裁本身指的是同一数据中心的成员。”不正确。您好,阿披舍克,我不确定QUORUM是否指dc内的本地组。据我所知,这是一个描述大多数人的数字。因此,如果您有6个节点,并且复制因子为4。我们得到quorum=rf/2+1=>3。如果我们设置,我们的写入一致性是quorum,那么只有在得到3个节点的确认后,写入才会成功。嗨,Aaron,我的queston是,数字3是与协调器节点一起的,还是任意3个节点?如果它是一个多dc架构,那么这个数字是如何变化的。任何链接都会有帮助。谢谢嗨,Aaron,当您创建会话以在代码中连接到cassandra集群时,您可以将一致性级别设置为您想要的任何级别。所以,我不知道为什么要继续计算默认仲裁。