是否可以通过在密钥空间复制定义中不包括另一个数据中心来防止密钥空间同步到另一个数据中心? 显然不是这样。
在我自己的测试中,我在GCP中设置了两个Kubernetes集群,每个集群都用作Cassandra数据中心。每个k8s集群都有3个节点。
我首先设置了数据中心DC-WEST,并使用以下代码创建了密钥空间演示:
CREATE KEYSPACE demo WITH replication = {‘class’: ‘NetworkTopologyStrategy’, ‘DC-WEST’ : 3};
然后,我设置数据中心DC-EAST,而不添加任何使用键空间。
要加入两个数据中心,我修改了Cassandra StatefulSet YAML中的CASSANDRA_SEEDS
环境变量,以包括两个数据中心的种子节点(我使用主机网络)。
但是在那之后,我注意到密钥空间demo
已同步到DC-EAST,即使密钥空间在复制中仅具有DC-WEST。
cqlsh> select data_center from system.local
... ;
data_center
-------------
DC-EAST <-- Note: this is from the DC-EAST datacenter
(1 rows)
cqlsh> desc keyspace demo
CREATE KEYSPACE demo WITH replication = {'class': 'NetworkTopologyStrategy', 'DC-WEST': '3'} AND durable_writes = true;
因此,我们在DC-EAST中看到demo
键空间,该键空间只能在DC-WEST上复制!我在做什么错了?
答案 0 :(得分:3)
Cassandra复制策略控制数据的放置位置,但是实际模式(表/数据中心/等的存在)是全局的。
如果创建仅位于一个DC中的密钥空间,则所有其他DC仍将在其架构中看到该密钥空间,甚至将目录结构放在磁盘上,尽管不会将任何数据复制到这些主机。
答案 1 :(得分:2)