【问题标题】:Setting replication factor in Network Topology在网络拓扑中设置复制因子
【发布时间】:2018-06-15 05:01:32
【问题描述】:

如果我有 2 个数据中心,dc1 和 dc2,其中 dc1 包含 2 个节点,dc2 包含 1 个节点;如果我希望每个节点都有 2 个副本,我将如何在键空间中定义复制因子。例如我会设置 dc1:2, dc2: 1 还是 dc1: 3, dc2:3

【问题讨论】:

  • 一个节点不能有多个副本。如果您想要一个 DC 中的两个副本,那么您需要在该 DC 中至少两个节点。
  • 我能否将数据中心的复制因子设置为高于其中的节点数,即假设我有 2 个数据中心。 dc1 有 3 个节点,dc2 有 2 个节点,所以我可以将复制因子设置为 dc1:4、dc2:1 吗?
  • 你可以,但这无济于事。另外,在一致性级别 ALL 上完成的任何操作都会导致您的读/写失败。在原始问题的 1 个节点上的 2 个副本方案中,对于在 LOCAL_QUORUM 完成的任何操作,您的读/写操作都将失败。
  • 对不起,如果我为愚蠢的问题而烦恼,但我想了解在读取查询的情况下,一致性是否意味着给定数量的副本节点可以访问/回复查询或确实这意味着给定数量的副本节点正在为查询提供“相同”的结果?我不明白您在上面所说的,在一致性级别 ALL 上完成的任何操作都会导致读/写失败。

标签: cassandra cassandra-3.0


【解决方案1】:

在 NetworkTopologyStragegy 中,您可以设置所需的每个数据中心的副本数。以您为例:

CREATE KEYSPACE demo
  WITH REPLICATION = { 
   'class' : 'NetworkTopologyStrategy', 
   'dc1' : 1,
   'dc2' : 1 
  } ;

这将确保您的集群中有两个数据副本。 NetworkTopolgyStragegy 将在 dc1 中放置一个副本,在 dc2 中放置一个副本。当然,这会将更多数据放在 dc2 中的单个节点上,因为它必须保存来自两个 dc1 节点的所有数据。

【讨论】:

  • 考虑到令牌值和复制因子,我无法理解数据的存储方式。请帮帮我。在您的示例中,当我们向表中添加一行时,该行将被发送到其令牌与主键的哈希值匹配的那个节点。除此之外,将在 dc 1 中创建 1 个副本,在 dc2 中创建 1 个副本。它是否正确。以这种方式,数据将总共有 3 个副本。或者它总共只有 2 个副本。当我们将零定义为其中一个数据中心的复制因子时,情况又如何呢?节点会存储任何数据吗?
  • 我也对副本一词的使用感到困惑。我在这里读到stackoverflow.com/a/27124394/5701173,即使是原件也被称为复制品!
  • 另外,我可以将数据中心的复制因子设置为高于其中的节点数,即假设我有 2 个数据中心。 dc1 有 3 个节点,dc2 有 2 个节点,所以我可以将复制因子设置为 dc1:4、dc2:1 吗?
  • 在我的示例中,您总共将拥有两个副本。 Cassandra 使用在键空间上定义的术语复制因子,并简单地定义您的键空间应保留多少数据副本。 RF=2 意味着每条数据都存储在两个节点上,RF=3 三个节点,依此类推——没有“主要”数据。 NTS 在数据中心分发这些副本。您可以为数据中心设置 RF=0,然后这个 dc 根本不会保存数据。
猜你喜欢
  • 1970-01-01
  • 2012-03-01
  • 2014-10-14
  • 2011-03-31
  • 2011-05-08
  • 2022-07-05
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
相关资源
最近更新 更多