在具有多个数据中心的cassandra集群中是否可能有“本地”键空间

在具有多个数据中心的cassandra集群中是否可能有“本地”键空间,cassandra,kubernetes,Cassandra,Kubernetes,我是否可以通过在密钥空间复制定义中不包括另一个数据中心来防止密钥空间同步到另一个数据中心? 显然,情况并非如此 在我自己的测试中,我在GCP中设置了两个Kubernetes集群,每个集群都用作Cassandra数据中心。每个k8s群集有3个节点 我首先设置了数据中心DC-WEST,并使用以下方法创建了一个密钥空间演示: 使用replication={'class':'NetworkTopologyStrategy','DC-WEST':3}创建键空间演示 然后我设置了数据中心DC-EAST,没有

我是否可以通过在密钥空间复制定义中不包括另一个数据中心来防止密钥空间同步到另一个数据中心? 显然,情况并非如此

在我自己的测试中,我在GCP中设置了两个Kubernetes集群,每个集群都用作Cassandra数据中心。每个k8s群集有3个节点

我首先设置了数据中心DC-WEST,并使用以下方法创建了一个密钥空间演示: 使用replication={'class':'NetworkTopologyStrategy','DC-WEST':3}创建键空间演示

然后我设置了数据中心DC-EAST,没有添加任何use键空间

为了连接这两个数据中心,我修改了CASSANDRA_SEEDS环境变量(位于CASSANDRA StatefulSet YAML中),以包含来自我使用主机联网的两个数据中心的种子节点

但是在那之后,我注意到keyspace演示被同步到DC-EAST,即使keyspace在复制中只有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中看到了演示键空间,它应该只在DC-WEST上复制!我做错了什么?

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


我会检查DC-WEST中的状态集。可能它具有cassandra-rackdc.properties的DC-EAST值。有关cassandra-rackdc.properties文件的详细信息。

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


我会检查DC-WEST中的状态集。可能它具有cassandra-rackdc.properties的DC-EAST值。有关cassandra-rackdc.properties文件的更多信息。

cassandra复制策略控制数据的放置位置,但表/数据中心/etc的实际架构是全局的


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

Cassandra复制策略控制数据的放置位置,但是表/数据中心/etc的实际模式是全局的


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

感谢您的回复。我想这是我的误解。我的错误印象是,如果一个键空间只在某个DC中复制,那么其他DC将看不到它。现在我有了正确的理解,我可以结束这个问题了。谢谢。顺便说一句,我有一个后续问题。假设我有应用程序数据,我想通过DCs复制以获得高可用性,但我也有本地用户数据,我想对本地DC保密,而不能从其他DC访问,我该怎么做?我可以用一个多DC cassandra群集来实现这一点,还是需要在每个DC中本地运行其他cassandra群集?复制因子是按键空间设置的,特权可以按键空间设置,因此为多DC键空间创建一个用户,并为单个DC用例创建一个不同的用户。感谢您的回复。我想这是我的误解。我的错误印象是,如果一个键空间只在某个DC中复制,那么其他DC将看不到它。现在我有了正确的理解,我可以结束这个问题了。谢谢。顺便说一句,我有一个后续问题。假设我有应用程序数据,我想通过DCs复制以获得高可用性,但我也有本地用户数据,我想对本地DC保密,而不能从其他DC访问,我该怎么做?我可以用一个多DC cassandra群集来实现这一点,还是需要在每个DC中本地运行其他cassandra群集?复制因子是按键空间设置的,特权可以按键空间设置,因此为多DC键空间创建一个用户,并为单个dc用例创建不同的用户。我通过statefulset yaml中的CASSANDRA_dc环境变量设置数据中心名称,并确认为每个dc正确设置了dc名称。真正的问题是我对卡桑德拉如何工作的误解,杰夫的回答解释了这一点。谢谢。我通过statefulset yaml中的CASSANDRA_DC环境变量设置了数据中心名称,并确认为每个DC正确设置了DC名称。真正的问题是我对卡桑德拉如何工作的误解,杰夫的回答解释了这一点。谢谢