cqlsh 控制台中的 NoHostAvailable 错误

NoHostAvailable error in cqlsh console

我后来能够摆脱这个错误,但我不确定我所做的是否正确。 1)

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

之后执行create table and select table。这会在控制台中引发 "NoHostAvailable:" 错误。

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

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

如果我有一个默认的 datacenter1,它就可以工作。我不明白为什么它只在我给 datacenter1 时才起作用。请帮忙

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

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

我在尝试访问在键空间中创建的 table 时遇到了同样的问题,复制策略为 NetworkTopologyStrategy。

后来发现的原因是replicas不可用,因为我是本地用的

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

希望对您有所帮助。

您只能在您的 cassandra 集群中指定 present/configured 的数据中心。

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

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

第一步,您可以尝试:

'class':'SimpleStrategy'

要检查您的代码,请排除策略 class!

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

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