在 Cassandra 1.0 文档中,他们有一篇文章很好地解释了这一点:About Replication in Cassandra。
我假设您有两个(逻辑?)数据中心。假设您在一个 DC 中有两个机架,而在另一个 DC 中有最后一个机架,并且在每个 RACK 上您有 2 个节点。您将在拓扑文件中定义这些,如下所示:
server1IP=DC1:RACK1
server2IP=DC1:RACK1
server3IP=DC2:RACK1
server4IP=DC2:RACK1
server5IP=DC2:RACK2
server6IP=DC2:RACK2
如果您想要有 3 个数据副本(每个逻辑机架一个),那么您将定义您的密钥空间以使用 NetworkTopologyStrategy,并为每个 DC 设置复制设置,如下所示:
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};
PropertyFile 告密者也是“机架感知”的,因此当发生写入时,它将确保数据的一个副本位于 DC1 中的 RACK1 的节点上,并且每个 RACK 上都有一个副本在DC2。根据您所说的,拥有三个逻辑数据中心可能是有意义的,每个数据中心都有一个机架。
您还应该查看this doc in the "Choosing Keyspace Replication Options" section,它进一步解释了如何配置复制。
编辑:
如果我使用 CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION =
{'class':'NetworkTopologyStrategy',replicationfactor:3}。将要
这复制到所有三个机架?
我不确定。但是我发现的每个例子都是关于使用 NetworkTopologyStrategy 只有一个 DC 来定义键空间的复制策略,具体命名 DC 而不是说明“复制因子”。甚至我链接的文档也指出:
NetworkTopologyStrategy 将您的副本数量作为选项
想要每个数据中心。即使对于单个数据中心(或单个节点)
集群,您可以使用此副本放置策略,只需定义
一个数据中心的副本数。
因此,假设您将 DC 命名为 DC1,它将如下所示:
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}
如果您这样做了,并且在该 DC 下定义了您的三个机架,这会将一个副本复制到所有三个机架。