【问题标题】:Cassandra Data Centers and Cluster(s) Ring(s) relationCassandra 数据中心和集群环关系
【发布时间】:2022-11-09 06:52:07
【问题描述】:

我有一个 Cassandra 集群,在 2 个数据中心中有 8 个节点,分别在 DC1 和 DC2 中有 4-4 个节点。

我创建了一个键空间:

CREATE KEYSPACE mykeyspace 
  WITH REPLICATION = { 
   'class' : 'NetworkTopologyStrategy', 
   'DC1' : 2,
   'DC2' : 2,
  };

据我了解,DC1 和 DC2 都将拥有所有数据,换句话说,如果整个 DC1 离线,DC2 将能够提供所有数据。

问题

我们应该说基于前面的事实,DC1 和 DC2 本身就是一个“完整”的环吗? (关于整个哈希 -2^63-1 .. +2^63 将由 DC1 上的节点呈现,DC2 也是如此)

我为什么要问这个?

我的回答是否定的,这仍然是一个集群,所以一个环,不管有两个节点子集包含所有数据。然而,许多图像和插图用两个“圆圈”表示两个数据中心中的节点,这暗示了两个“环”一词。 (显然不是两个集群)

参见例如:

DataStax: Multiple datacenter write requests

PS:如果可能,请不要将一致性级别带到图片中。我了解节点间通信工作流程取决于操作是写入还是读取,还取决于一致性级别。

一个取决于答案的实际问题:

在 DC1 num_tokens: 256 中表示所有节点,在 DC2 num_tokens: 32 中表示所有节点。如果 8 个节点在一个令牌环中,这些数字将彼此相关,但如果 DC1 和 DC2 是两个独立的令牌环,则这些数字(256 和 32)彼此无关......

【问题讨论】:

    标签: cassandra replication


    【解决方案1】:

    简短的回答是:两个 DC 都有 2 个副本。然后为您的数据创建 4 个副本。

    Cassandra 足够聪明,可以理解您的拓扑结构并分发数据。

    在机架之间分配数据(机架感知)也很重要,因为 Cassandra 将在每个机架中写入一个副本。然后,您将确保您的数据得到传播,并且您可以松动多达 6 个节点而不会丢失数据(考虑到所有具有上述复制因子的键空间)。

    DC1
    - rack1
    -- 2 nodes
    - rack2
    -- 2 nodes
    
    DC2
    - rack1
    -- 2 nodes
    - rack2
    -- 2 nodes
    

    最后,您可以在 DC 之间拥有不同的 num_tokens。它不会影响复制因子。 如果可以查看 doc,建议使用较小的值。 https://cassandra.apache.org/doc/latest/cassandra/getting_started/production.html

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 2017-01-01
      • 2015-03-25
      • 2013-06-11
      • 2016-03-24
      • 2018-07-15
      • 2015-03-17
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多