我对潜在的情况有疑问,想知道我们的假设是否正确 . (使用带有DSE 5.x的cassandra 3.x)
我们从docs中了解到,为了向集群添加新的(和新的)数据中心,我们需要临时设置ReplicationFactor,如下所示:
{'class' : 'NetworkTopologyStrategy', 'DC1' : 3, 'DC2' : 0 }
其中DC1是当前运行的数据中心,DC2是我们要添加的数据中心 . 此测试帮助我们了解从现有的现场铃声到全新的现场铃声的数据流的影响 .
现在我们假设的情况是,能够开始复制最初只复制到一个DC的密钥空间,现在保存到其他当前运行的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
?
1 回答
接受的做法是简单地不为DC定义复制因子,如果你按照自己的方式做的话,你认为会发生任何不好的事情,但我觉得没有定义它会是更安全的方式 .
更改密钥空间上的复制因子将告知将来对该密钥空间的所有写入也将转到新数据中心 . 但是,要将现有数据复制到新数据中心,您必须运行
nodetool repair
或nodetool rebuild
.