【问题标题】:Cassandra multi-DC:write on LOCAL and read from any DCCassandra 多 DC:在 LOCAL 上写入并从任何 DC 读取
【发布时间】:2018-12-27 02:54:31
【问题描述】:

我们使用多数据中心 (DC) cassandra 集群。在写入集群期间,我只希望 LOCAL DC 在其节点上执行写入,因为我们已经仅根据启动写入的源将写入请求路由到所需的 DC。因此,我只希望 LOCAL DC 处理写入,而不希望其他 DC 在其节点上执行写入。但后来由于跨 DC 节点之间的复制,我希望写入的数据能够跨 DC 复制。当我首先将写入限制为仅一个 DC 时,是否可以跨 DC 进行复制?如果我在写入操作期间未打开与位于不同 DC 中的远程主机的连接,那么以后是否可以在 DC 之间进行数据复制。为什么我肯定需要所有 DC 中的数据副本,因为在从集群读取数据期间,我们希望从读取请求所在的任何 DC 读取数据,而不一定是 LOCAL。

有没有人可以解决这个问题?

【问题讨论】:

  • 写后会立即读吗?您关闭 dcs 之间的连接多长时间?
  • @Laxmikant:根据我写的情况,目前还没有这样的要求。第二个问题我不明白。你能详细说明一下吗?谢谢
  • 当您说您希望本地 dc 执行写入时,我假设您将使用写入 CL 作为 LOCAL_ONE 或 LOCAL_QUORAM ..我对吗?现在,如果您还使用 LOCAL 读取一致性级别,那么在读取数据时,如果未复制数据,您可能会获得陈旧的数据。您计划达到何种读写一致性级别?你每个直流电的射频是多少?这两个参数将决定一致性。
  • @Laxmikant:我不确定在我的案例中应用哪个一致性级别,我只是希望我的计划能够很好地执行。你知道哪个 CL 适合描述部分中的上述标准吗?
  • 这个问题没有单一的答案,它取决于用例,但一般来说,大于复制因子 (N) 的一致性级别 (R+W) 将为您提供一致的结果

标签: apache datastax cassandra-3.0


【解决方案1】:
  1. 如果您只想在本地 DC 中执行写入,您可能需要使用 Local_Quorum 一致性。
  2. 检查您想要这些限制的键空间定义。它应该在两个 DC 中都具有“网络拓扑”类和 RF。像这样的东西: ALTER KEYSPACE <Keyspace_name> WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2}; 它指出,在满足一致性后,Cassandra 会将写入传播到另一个 DC。

  3. 如果读取不限于一个 DC,请使用 Quorum 一致性,但请注意这可能会增加位延迟,因为 Cassandra 还必须从其他数据中心读取数据。

【讨论】:

  • hi payal ..考虑你的例子:'dc1':3,'dc2':2;在这种情况下,写入一致性 = local-quorum(即 2)和读取一致性 = quorum(即 3)并不能保证您将始终获得最新数据。请注意,这里 R+W =5 不大于 N =5,因此不是强一致性。举个例子: 1. 数据写入 dc2 ...并在 dc1 上读取,然后才能从 dc2 复制到 dc1。 .你会得到陈旧的数据..
  • 那是我的错。我是认真的,但在写作时我想我做错了。感谢您指出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 2014-08-22
  • 2019-09-13
  • 2020-10-06
相关资源
最近更新 更多