可用exception:may not 有足够的副本来处理一致性级别

cyvaqqii  于 2021-06-14  发布在  Cassandra
关注(0)|答案(2)|浏览(343)

我正在我的机器(Windows7)上使用Cassandra1.2.4。
我的dc1有3个节点,在我的机器上。我只使用一个dc(我的机器)。我确实保持了复制因子=2和“hconsistencylevel.one”。但是,当其中一个节点关闭时,我尝试读取或写入db时,会出现错误-“可能没有足够的副本来处理一致性级别”。我的印象是,当我们将一致性级别保持为“一”时,即使有一个节点启动,写入/读取也应该不会出错。但我有个错误。有人能纠正我在这里做错了什么吗。我确实在google上搜索过,但是没有得到太多关于这个错误的帮助,尽管这个错误是非常相关的。我想让读/写发生在节点故障的情况下。下面是我的代码。

String keySpaceName="kspace";
String clusterName="Test Cluster";
String columFamilyName="ktable";
String host="127.0.0.1:9160,127.0.0.2:9161,127.0.0.3:9162";
int replicationFactor=2;

CassandraHostConfigurator cassandraHostConfigurator = new   
CassandraHostConfigurator(host);
Cluster cluster = HFactory.getOrCreateCluster(clusterName,cassandraHostConfigurator);
KeyspaceDefinition keyspaceDef = cluster.describeKeyspace(keySpaceName);

ConfigurableConsistencyLevel configurableConsistencyLevel = new 
ConfigurableConsistencyLevel();
Map<String, HConsistencyLevel> clmap = new HashMap<String, HConsistencyLevel>();

// Define CL.ONE for ColumnFamily "ktable"
clmap.put(columFamilyName, HConsistencyLevel.ONE);
configurableConsistencyLevel.setReadCfConsistencyLevels(clmap);
configurableConsistencyLevel.setWriteCfConsistencyLevels(clmap);

if(keyspaceDef==null)   
{
KeyspaceDefinition newKeyspace = HFactory.createKeyspaceDefinition(
keySpaceName, ThriftKsDef.DEF_STRATEGY_CLASS,replicationFactor, null);
cluster.addKeyspace(newKeyspace, true);
}
Keyspace keyspace = HFactory.createKeyspace(keySpaceName, cluster,  
configurableConsistencyLevel);

StringSerializer ss = StringSerializer.get();
ColumnFamilyTemplate<String, String> cft = new ThriftColumnFamilyTemplate<String,  
String>(keyspace, columFamilyName, ss, ss);
ColumnFamilyUpdater<String, String> updater = cft.createUpdater("xkey");
UUID uid = new UUID();
updater.setValue("id",Long.toString(uid.getClockSeqAndNode()),ss);
updater.setValue("name", "Catherine", ss);
updater.setValue("state", "GA", ss);
cft.update(updater);
dced5bon

dced5bon1#

尝试将复制因子更改为群集中没有可用的节点…它可以从此类故障中生存…在我的示例中,rf=5时,5节点群集可以从2节点故障中生存,rf=4时,5节点群集可以从1节点故障中生存,rf=3时,5节点群集只能从1节点故障中生存。。。。
我不确定这种方法是否有效,但这应该总是工作(即射频=节点数)任何来自Maven的建议将不胜感激。。。

odopli94

odopli942#

将复制因子更改为1,即已设置的节点数。我在练习这些例子时也犯了同样的错误。

相关问题