Cassandra QUORUM写一致性级别和多个DC

时间:2017-06-02 22:20:19

标签: cassandra

我对QUORUM如何在多个DC情况下选择要写入的节点感到有些困惑。
例如,假设我有一个3 DC集群,每个DC有3个节点,复制因子是2,因此实现QUORUM所需的副本数量是3.注意:这只是一个帮助我制定的例子我的问题,而不是实际的配置 我的问题如下:在写入的情况下,这三个副本将如何分布在我的集群中的所有DC上?是否所有3个副本都可能在同一个DC中结束?

2 个答案:

答案 0 :(得分:2)

复制是在密钥空间级别定义的。例如,

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

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

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

另一方面,在Cassandra中,RF = 2与RF = 1一样好。为了简化,让我们设想一个3节点单DC情况。 RF = 2时,有两个数据副本,为了达到法定数((RF = 2)/ 2 + 1),2个节点需要确认写入。因此,两个节点总是必须可用。即使一个节点发生故障,写入也会开始失败。事件另一个节点可以在此处获取提示,但是具有仲裁的读取必然会失败。 因此,在这种情况下,节点故障的容错等于零。

  

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

答案 1 :(得分:1)

一致性级别确定在向客户端应用程序返回确认之前写入必须成功的副本数

  

即使在低一致性级别,写入仍然会发送到写入密钥的所有副本,甚至是其他数据中心的副本。一致性级别仅确定响应它们接收写入所需的副本数量。

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

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