插入数据时出错:NoHostAvailable:

时间:2016-10-06 20:07:39

标签: cassandra cqlsh

我尝试学习Apache Cassandra的基础知识。我在https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_music_service_c.html

找到了这个简单的应用示例

所以我创建了一个键空间,然后我创建了一个表,现在我正在尝试将一些数据添加到数据库中。

但是当我尝试插入数据时,我遇到了一个错误:“NoHostAvailable:”就是这样。没有更多信息。

NoHostAvailable

到目前为止,我已尝试更新python驱动程序(NoHostAvailable exception connecting to Cassandra from python),但它无效。

我做错了什么?或者这是cqlsh的问题吗?

6 个答案:

答案 0 :(得分:4)

行。我找到了答案。 NetworkTopologyStrategy不适合在单个节点上运行。在SimpleStrategy上更改复制策略后,一切都开始起作用了。

答案 1 :(得分:1)

要将复制策略(从 NetworkTopologyStrategy )更改为 SimpleStrategy (适用于单节点),请运行以下查询:

ALTER KEYSPACE yourkeyspaceName WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} ;

答案 2 :(得分:0)

遇到了同样的问题。检查密钥空间的复制设置,如果使用NetworkTopologyStrategy,请确保DC名称正确。

答案 3 :(得分:0)

对我来说,它发生在实例之一发生故障时。重新启动第二个实例,错误消失了。但是在架构表中,我看到密钥空间的拓扑为简单。这很令人困惑。

答案 4 :(得分:0)

让我们在这里避开空气...

绝对 可以在单节点配置中使用NetworkTopologyStrategy。我目前在我的本地计算机上安装了五个版本的Cassandra,它们都是通过这种方式配置的,并且可以正常工作。

尽管如此,它并不像仅使用SimpleStrategy那样简单,因此需要采取一些步骤:

首先在GossipingPropertyFileSnitch中设置cassandra.yaml

endpoint_snitch: GossipingPropertyFileSnitch

这告诉Cassandra使用cassandra-rackdc.properties文件来命名逻辑数据中心和机架:

$ cat conf/cassandra-rackdc.properties | grep -v "#"

dc=dc1
rack=rack1

如果有新集群,则可以更改它们。如果您有现有集群,最好保留它们。但是,您需要引用dc名称,因为在键空间定义中将需要它。

现在,如果您这样定义键空间:

CREATE KEYSPACE stackoverflow WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '1'};

使用此配置,可以很好地使用NetworkTopologyStrategy

对此会有不同意见,但我不建议使用SimpleStrategy。练习习惯在本地使用NetworkTopologyStrategy是个好主意。我之所以这样说,是因为我看到了相反的情况:人们不小心将SimpleStrategy密钥空间部署到生产中的MDHA集群中,然后想知道为什么不能满足他们配置的应用程序一致性。

答案 5 :(得分:0)

有时发生故障的节点处于关闭状态,而该节点具有该插入的所需分区范围。请从以下命令检查所有节点,然后尝试再次运行查询。

节点工具状态

nodetool describecluster。