我在我的机器上使用Cassandra 1.2.4(Windows 7)。
我的DC1中有3个节点,位于我的机器上。我只使用一台DC(我的机器)。我确实保留了复制因子= 2和“HConsistencyLevel.ONE”。但是,当其中一个节点关闭,并且我尝试读取或写入DB时,我收到错误 - “可能没有足够的副本来处理一致性级别。”。 我的印象是,当我们将一致性级别保持为“ONE”时,即使一个节点启动,写入/读取也应该没有错误。但是我得到了这个错误。有人可以纠正我,因为我在这里做错了。我在谷歌搜索但是没有得到很多关于此错误的帮助,尽管此错误非常相关。我希望在节点发生故障时进行读/写操作。以下是我的代码。
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);
答案 0 :(得分:1)
将复制因子更改为1,即您已设置的节点数。我在练习这些例子时遇到了同样的错误。
答案 1 :(得分:0)
尝试更改复制因子等于群集中可用节点的数量...它可以从此类故障中幸存下来....在我的RF = 5的示例中,5个节点群集可以承受2个节点故障,RF = 4, 5节点集群可以存活1个节点故障,RF = 3,5个节点集群只能存活1个节点故障....
我不确定这种方法是否有效但是这应该始终有效(即RF =没有节点)任何来自专家的建议都将受到高度赞赏......