【问题标题】:HUnavailableException:May not be enough replicas present to handle consistency levelHUnavailableException:可能没有足够的副本来处理一致性级别
【发布时间】:2014-02-18 01:57:10
【问题描述】:

我在我的机器(Windows 7)上使用 Cassandra 1.2.4。

我的 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);

【问题讨论】:

  • 你能粘贴'show schema;'的模式输出吗?在 cassandra-cli 中?是否有可能在您的脚本以复制因子 1 运行之前创建了密钥空间?
  • @Richard - 感谢您的回复。在代码执行之前,我创建了具有复制因子“2”的键空间。使用placement_strategy ='SimpleStrategy'和strategy_options = {replication_factor:2}和durable_writes = true创建键空间kspace;我的问题是 - 即使在节点发生故障的情况下,我怎样才能成功地向 cassandra 写入/读取数据。任何帮助将不胜感激。问候,基兰。
  • 对我的问题的任何建议将不胜感激。
  • @Kiran - 运气好吗?我遇到了同样的问题。 =/

标签: windows-7 cassandra


【解决方案1】:

将您的复制因子更改为 1,即您设置的节点数。我在执行这些示例时确实遇到了同样的错误。

【讨论】:

    【解决方案2】:

    尝试将复制因子更改为集群中没有可用的节点...它可以从此类故障中幸存下来....在我的示例中,RF=5,5 节点集群可以在 2 个节点故障中幸存,RF=4, 5节点集群可以承受1节点故障,RF=3,5节点集群只能承受1节点故障....

    我不确定这种方法是否有效,但这应该始终有效(即 RF = 节点数)专家的任何建议将不胜感激...

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2019-01-19
      • 2015-11-10
      • 1970-01-01
      • 2013-08-21
      • 2020-06-07
      相关资源
      最近更新 更多