在新的 cassandra 数据中心同步键空间

Synchronizing keyspaces in new cassandra datacenter

我对潜在场景有疑问,想知道我们的假设是否正确。 (将 cassandra 3.x 与 DSE 5.x 结合使用)

我们从 docs 了解到,为了向集群添加新的(新鲜的)数据中心,我们需要像这样临时设置 ReplicationFactor:

{'class' : 'NetworkTopologyStrategy', 'DC1' : 3, 'DC2' : 0 }

其中 DC1 是当前 运行ning 数据中心,DC2 是我们要添加的数据中心。 该测试帮助我们了解了数据从现有直播环流到全新直播环的影响。

现在进入我们的假设场景,即能够开始复制最初只复制到一个 DC 的密钥空间,现在保存到其他当前 运行ning DC。

创建键空间时:

CREATE KEYSPACE Foo WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'US' : 2, 'EU' : 0};

然后,当业务需求发生变化时:

ALTER KEYSPACE Foo WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'US' : 2, 'EU' : 2};

在所有 DC 都为 0 的应用程序中定义所有新键空间是否被认为更安全,以便可以在某些时候修改该值。并且更改该复制因子是否足以触发密钥空间流式传输到其他数据中心 - 或者我们是否还需要 运行 nodetool rebuild?

公认的做法是简单地不为您不希望将特定密钥空间复制到的 DC 定义复制因子。我不认为如果你按照自己的方式去做,就不会发生任何不好的事情,但我觉得 定义它会是更安全的方式。

would changing that replication factor be enough to trigger the streaming of the keyspace to the other datacenters - or do we also need to run nodetool rebuild?

改变键空间的复制因子将告诉所有未来对该键空间的写入也转到新的数据中心。但是,要将现有数据复制到新数据中心,您 必须 运行 一个 nodetool repairnodetool rebuild.