是否可以在具有多个数据中心的Cassandra群集中使用“本地”键空间

时间:2019-04-09 19:35:06

标签: cassandra kubernetes

是否可以通过在密钥空间复制定义中不包括另一个数据中心来防止密钥空间同步到另一个数据中心? 显然不是这样。

在我自己的测试中,我在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上复制!我在做什么错了?

2 个答案:

答案 0 :(得分:3)

Cassandra复制策略控制数据的放置位置,但是实际模式(表/数据中心/等的存在)是全局的。

如果创建仅位于一个DC中的密钥空间,则所有其他DC仍将在其架构中看到该密钥空间,甚至将目录结构放在磁盘上,尽管不会将任何数据复制到这些主机。

答案 1 :(得分:2)

您没有指定如何在Kubernetes中部署Cassandra集群,但是看起来DC-WEST中的节点可能被配置为说它们是DC-EAST

我将检查ConfigMapDC-WEST中的有状态集合。也许它具有DC-EAST(?)的cassandra-rackdc.properties值。有关cassandra-rackdc.properties文件here的更多信息。