我的项目要求是这样的。我们使用多数据中心(DC)cassandra集群。在写入群集期间,我只希望LOCAL DC在其节点上执行写操作,因为我们已经根据启动写入的源将写请求路由到所需的DC。所以,我只希望LOCAL DC处理写操作而没有其他DC来执行其节点上的写操作。但后来由于跨DC的节点之间的复制,我希望在DC之间复制写入的数据。当我首先将写入限制为仅一个DC时,是否可以在DC之间进行复制。我想过为此使用DCAwareRoundRobin策略。如果我在写操作期间没有打开与位于不同DC中的REMOTE主机的连接,则稍后可以在DC之间进行数据复制。为什么我肯定需要在所有DC中复制数据是因为在从集群读取数据期间,我们希望从读取请求所依赖的任何DC读取数据,而不一定是LOCAL。
答案 0 :(得分:3)
是的,这绝对有可能。具有前缀" LOCAL _"的一致性级别允许将数据写入单个数据中心并异步复制到其他数据中心。但在这种情况下,只保证最终的一致性,这意味着由于异步复制,写入的数据不会立即出现在其他数据中心。如果您需要在数据中心之间保持一致性,那么您应该使用带有前缀" EACH"的一致性级别,但它会显着影响延迟。
如果您需要在单个数据中心中对写入请求进行强一致性,则应满足以下规则(nodes_written + nodes_read)> number_of_replicas,例如,如果每个数据中心有3个副本,则应使用LOCAL_QUORUM一致性级别(2 + 2> 3)执行读取和写入请求。如果最终的一致性足够,可以使用LOCAL_ONE。
There is类似案例在"地理位置场景"部分。