cqlsh控制台中的NoHostAvailable错误

时间:2017-01-26 17:18:12

标签: cassandra cqlsh

我之后能够摆脱这个错误,但我不确定我做了什么是正确的。 1)

CREATE KEYSPACE myKeySpace WITH replication = 
  {'class': 'NetworkTopologyStrategy', 'dc1': '1', 'dc2': '2'}
  AND durable_writes = true;

执行create table并在此之后选择table。这会在控制台中抛出“NoHostAvailable:”错误。

2)如果我将create语句更改为下面的一个,则select查询有效。

CREATE KEYSPACE myKeySpace WITH replication = 
  {'class': 'NetworkTopologyStrategy', 'datacenter1': '1', 'dc2': '2'}
  AND durable_writes = true; 

如果我有一个默认的datacenter1,它可以工作。我无法理解为什么它只在我给datacenter1时才有效。请帮忙。

5 个答案:

答案 0 :(得分:8)

执行nodetool status时会看到哪些数据中心?

您指定为密钥空间的复制因子(RF)的数据中心必须cassandra-rackdc.propertiescassandra-topology.properties文件中预定义(取决于您配置的Snitch) )。

答案 1 :(得分:1)

当我尝试使用复制策略作为NetworkTopologyStrategy访问在键空间中创建的表时遇到了相同的问题。

我后来发现的原因是由于副本不可用,因为我在本地使用它。

如果我将键空间复制策略更改为SimpleStrategy,并将Replication_factor更改为1,则错误消失了。

希望这会有所帮助。

答案 2 :(得分:0)

您只能指定cassandra群集中存在/配置的数据中心。

运行nodetool状态,为您提供集群详细信息,例如数据中心名称,机架名称等。

在通过NetworkTopologyStrategy类复制创建键空间时,使用了此处的数据中心名称。

答案 3 :(得分:0)

第一步,您可以尝试:

'class':'SimpleStrategy'

要查看您的代码,请排除策略类!

在那之后,如果没有发现任何错误,您将研究策略类。

答案 4 :(得分:0)

您首先应根据必须使用的已定义数据中心名称,在属性文件“ cassandra-rackdc.properties”(使用此属性文件的Cassandra的最新版本)中检查已定义数据中心的名称或“ cassandra-topology.properties”创建键空间时该数据中心名称。您可以在创建可以查看默认数据中心名称的键空间之前检查nodetool的状态。