我是否可以通过在密钥空间复制定义中不包含另一个数据中心来阻止密钥空间同步到另一个数据中心?显然,情况并非如此。
在我自己的测试中,我在gcp中建立了两个kubernetes集群,每个集群都充当一个cassandra数据中心。每个k8s集群有3个节点。
我首先设置了数据中心dc west,并使用以下内容创建了一个keyspace演示: CREATE KEYSPACE demo WITH replication = {‘class’: ‘NetworkTopologyStrategy’, ‘DC-WEST’ : 3};
然后我建立了数据中心dc east,没有添加任何use键空间。
为了连接这两个数据中心,我修改了 CASSANDRA_SEEDS
cassandra statefulset yaml中的环境变量包含来自两个数据中心的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;
所以我们看到在华盛顿东部 demo
只能在华盛顿西部复制的密钥空间!我做错什么了?
2条答案
按热度按时间ymdaylpp1#
cassandra复制策略控制数据的放置位置,但实际的模式(表/数据中心/etc的存在)是全局的。
如果您创建一个只存在于一个dc中的键空间,那么所有其他dc仍将在其架构中看到该键空间,甚至将在磁盘上创建目录结构,尽管不会将任何数据复制到这些主机。
ha5z0ras2#
您没有指定如何在kubernetes中部署cassandra集群,但它看起来像
DC-WEST
可以配置为DC-EAST
.我会检查configmap中的状态集
DC-WEST
. 也许它有DC-EAST
的值cassandra-rackdc.properties
(?). 更多关于cassandra-rackdc.properties
在这里归档。