2017-06-02 48 views
1

我对QUORUM写入选择多个DC情况下写入的节点有点困惑。
例如,假设我有一个3 DC群集,每个DC中有3个节点,并且复制因子为2,因此实现QUORUM所需的副本数量为3.注意:这仅仅是一个示例我制定了我的问题,而不是实际的配置。
我的问题如下:在编写的情况下,如何将这3个副本分布在群集中的所有DC上?所有3个副本都可能在同一个DC中结束吗?Cassandra QUORUM编写一致性级别和多个DC

+0

是的,有可能数据是从同一个DC读取/写入的。如果您认为在多个DC的情况下应该使用QUORUM或不使用QUORUM。但是,在后台节点修复过程将开始,它将使用每个数据中心的最新值更新节点。 – Bigby

回答

1

一致性水平确定在其上写必须确认返回给客户端应用程序

即使在低浓度水平之前成功副本的数量,写仍发送给所有副本的书面关键,甚至是其他数据中心的复制品。一致性级别只是确定需要多少副本来响应他们收到的写入。

来源:http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html

所以如果设置一致性级别设置为QUORUM。我假定每个DC的RF都是2.所以QUORUM是3. 因此,所有的写操作仍然发送每个DC的所有副本(3 * 2 = 6节点)并等待3节点成功后,它将发送确认到客户端

1

复制是在关键空间级别定义的。因此,例如,

create keyspace test with replication = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 2, 'DC2' : 2, 'DC3' : 2 }; 

正如你可以清楚地看到每个DC将持有该密钥空间的两个数据副本,而不是更多。您可以将同一群集中的另一个密钥空间定义为仅在一个DC中复制,而不是在另一个DC中复制。所以它的灵活性。

现在为了保持一致性,每个DC有3个DC和RF = 2,您有6个数据副本。根据Quorum的定义,这6位成员中的大多数(即RF/2 + 1)在声明写入成功之前需要确认写入。所以4个节点需要响应这里的法定人数写,这4个成员可能是来自任何DC的节点的组合。记住计算法定人数的复制品数量,而不是总数。 DC中的节点。

在附注中,在Cassandra中,RF = 2与RF = 1一样好。为了简化,让我们设想一个3节点的单个DC情况。当RF = 2时,有两个数据副本,并且为了实现法定数((RF = 2)/ 2 + 1),2个节点需要确认写入。所以两个节点总是必须可用。即使一个节点出现故障,写入也将开始失败。事件另一个节点可以在这里提示,但你的法定读取肯定会失败。 在这种情况下,节点故障的容错等于零。

您可以使用local_quorum加速写入而不是仲裁速度。它在速度上牺牲了一致性。欢迎来到“最终一致性”

+0

同意。 OP应该在这里使用LOCAL_QUORUM。 – Aaron

相关问题