使用NetworkTopologyStrategy配置replication_factor引发ConfigurationException问题求助
问题分析与解决
这个问题我碰到过不少次,根源在于你搞混了Cassandra两种复制策略的配置规则——咱们一步步来理清楚:
错误核心原因
你的错误信息已经说得很直白了:replication_factor是SimpleStrategy专属的配置参数,并不适用于NetworkTopologyStrategy。你在创建keyspace时,把两种策略的配置参数混在一起用,Cassandra自然会抛出ConfigurationException。
两种复制策略的正确用法
Cassandra的复制策略分两种,对应不同的集群场景,配置方式完全不同:
1. SimpleStrategy(单数据中心场景)
如果你的Cassandra集群只有一个数据中心,就用这个策略,直接通过replication_factor指定整个集群的副本数量。比如你原本想设置3个副本,正确的语句应该是:
CREATE KEYSPACE university WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'};
2. NetworkTopologyStrategy(多数据中心场景)
如果你的集群有多个数据中心,就需要用这个策略,必须为每个数据中心单独指定副本数(参数名是数据中心的名称,要和集群实际配置的DC名一致)。比如你的集群有两个DC分别叫DC1和DC2,想在DC1放3个副本、DC2放2个,语句应该是:
CREATE KEYSPACE university WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': 3, 'DC2': 2};
小提示
如果你不确定自己集群的实际数据中心名称,可以执行nodetool status命令查看,输出结果里的Datacenter字段就是你需要用的名称。
内容的提问来源于stack exchange,提问作者Suriya Kumar
相关产品推荐
相关产品推荐

