cassandra - 是否可以在具有多个数据中心的 cassandra 集群中拥有“本地”键空间
问题描述
我可以通过不在我的密钥空间复制定义中包含另一个数据中心来防止密钥空间同步到另一个数据中心吗?显然,事实并非如此。
在我自己的测试中,我在 GCP 中建立了两个 Kubernetes 集群,每个集群都用作 Cassandra 数据中心。每个 k8s 集群有 3 个节点。
我首先设置了数据中心 DC-WEST,并使用以下方法创建了一个键空间演示:
CREATE KEYSPACE demo WITH replication = {‘class’: ‘NetworkTopologyStrategy’, ‘DC-WEST’ : 3};
然后我设置了数据中心 DC-EAST,没有添加任何使用键空间。
为了加入两个数据中心,我修改了CASSANDRA_SEEDS
Cassandra StatefulSet YAML 中的环境变量以包含来自两个数据中心的种子节点(我使用主机网络)。
但在那之后,我注意到密钥空间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 上复制的键空间!我究竟做错了什么?
解决方案
Cassandra 复制策略控制数据的放置位置,但实际模式(表/数据中心/等的存在)是全局的。
如果您创建一个只存在于一个 DC 中的密钥空间,所有其他 DC 仍将在其架构中看到该密钥空间,甚至会在磁盘上创建目录结构,尽管不会将任何数据复制到这些主机。
推荐阅读
- powershell - 删除远程 SFTP 目录中带有模式的文件
- javascript - Vuex突变状态变量不起作用
- javascript - undefined 不是函数(评估 't.map(function(t){return u(t)})')
- crystal-lang - Lucky 框架的查询接口
- laravel - 使用 Maatwebsite 导入 Laravel Excel
- javascript - 处理图像时没有从“cmyk”到“srgb”的已知路线
- r - 如何在R中的主图表下显示指标图表
- sparql - 合并抛出错误,即使它应该抑制
- html - 如何根据屏幕缩放级别调整字体大小?
- java - SpringBoot 和 Hibernate 无法根据提供的条件检索对象列表