插入数据时出错:NoHostAvailable:
Error during inserting data: NoHostAvailable:
我尝试学习 Apache Cassandra 的基础知识。我在 https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_music_service_c.html
找到了这个简单的应用示例
所以我创建了一个键空间,然后我创建了一个 table,现在我正在尝试向数据库中添加一些数据。
但是当我尝试插入数据时出现错误:"NoHostAvailable:" 就是这样。没有更多信息。
到目前为止,我已尝试更新 python 驱动程序 (),但没有成功。
我做错了什么?还是cqlsh的问题?
好的。我找到了答案。 NetworkTopologyStrategy 不适用于单个节点上的 运行。在 SimpleStrategy 上更改复制策略后,一切都开始工作了。
刚遇到同样的问题。检查密钥空间的复制设置,如果使用 NetworkTopologyStrategy,请确保 dc 名称正确。
对我来说,它发生在其中一个实例发生故障时。重新启动第二个实例,错误消失了。但是在模式 table 中,我看到我的键空间的拓扑结构很简单。这令人困惑。
让我们在这里净化空气...
您绝对 可以在单节点配置中使用NetworkTopologyStrategy
。我目前在我的本地安装了五个版本的 Cassandra,它们都是这样配置的,而且它们工作得很好。
尽管如此,它并不像使用 SimpleStrategy
那样简单,因此需要采取一些步骤:
首先在 cassandra.yaml
中设置 GossipingPropertyFileSnitch
:
endpoint_snitch: GossipingPropertyFileSnitch
这告诉 Cassandra 使用 cassandra-rackdc.properties
文件来命名逻辑数据中心和机架:
$ cat conf/cassandra-rackdc.properties | grep -v "#"
dc=dc1
rack=rack1
如果您有一个新集群,您可以更改这些集群。如果您有现有集群,最好保留它们。但是您需要引用 dc
名称,因为在您的键空间定义中需要它。
现在,如果您这样定义键空间:
CREATE KEYSPACE Whosebug WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '1'};
这样配置,NetworkTopologyStrategy
就可以正常使用了
对此会有不同的看法,但我不建议使用 SimpleStrategy
。练习在本地使用 NetworkTopologyStrategy
是个好主意。我之所以这样说,是因为我看到了相反的情况:人们不小心将 SimpleStrategy
键空间部署到生产中的 MDHA 集群中,然后想知道为什么他们配置的应用程序一致性无法得到满足。
当具有该插入所需的分区范围的节点关闭时,有时会发生这种情况。请通过以下命令检查您的所有节点,然后再次尝试 运行 查询。
节点工具状态
nodetool descriccluster.
要将复制策略(从 NetworkTopologyStrategy)更改为 SimpleStrategy(适用于单节点)运行 以下查询:
ALTER KEYSPACE yourkeyspaceName WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} ;
我尝试学习 Apache Cassandra 的基础知识。我在 https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_music_service_c.html
找到了这个简单的应用示例所以我创建了一个键空间,然后我创建了一个 table,现在我正在尝试向数据库中添加一些数据。
但是当我尝试插入数据时出现错误:"NoHostAvailable:" 就是这样。没有更多信息。
到目前为止,我已尝试更新 python 驱动程序 (
我做错了什么?还是cqlsh的问题?
好的。我找到了答案。 NetworkTopologyStrategy 不适用于单个节点上的 运行。在 SimpleStrategy 上更改复制策略后,一切都开始工作了。
刚遇到同样的问题。检查密钥空间的复制设置,如果使用 NetworkTopologyStrategy,请确保 dc 名称正确。
对我来说,它发生在其中一个实例发生故障时。重新启动第二个实例,错误消失了。但是在模式 table 中,我看到我的键空间的拓扑结构很简单。这令人困惑。
让我们在这里净化空气...
您绝对 可以在单节点配置中使用NetworkTopologyStrategy
。我目前在我的本地安装了五个版本的 Cassandra,它们都是这样配置的,而且它们工作得很好。
尽管如此,它并不像使用 SimpleStrategy
那样简单,因此需要采取一些步骤:
首先在 cassandra.yaml
中设置 GossipingPropertyFileSnitch
:
endpoint_snitch: GossipingPropertyFileSnitch
这告诉 Cassandra 使用 cassandra-rackdc.properties
文件来命名逻辑数据中心和机架:
$ cat conf/cassandra-rackdc.properties | grep -v "#"
dc=dc1
rack=rack1
如果您有一个新集群,您可以更改这些集群。如果您有现有集群,最好保留它们。但是您需要引用 dc
名称,因为在您的键空间定义中需要它。
现在,如果您这样定义键空间:
CREATE KEYSPACE Whosebug WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '1'};
这样配置,NetworkTopologyStrategy
就可以正常使用了
对此会有不同的看法,但我不建议使用 SimpleStrategy
。练习在本地使用 NetworkTopologyStrategy
是个好主意。我之所以这样说,是因为我看到了相反的情况:人们不小心将 SimpleStrategy
键空间部署到生产中的 MDHA 集群中,然后想知道为什么他们配置的应用程序一致性无法得到满足。
当具有该插入所需的分区范围的节点关闭时,有时会发生这种情况。请通过以下命令检查您的所有节点,然后再次尝试 运行 查询。
节点工具状态
nodetool descriccluster.
要将复制策略(从 NetworkTopologyStrategy)更改为 SimpleStrategy(适用于单节点)运行 以下查询:
ALTER KEYSPACE yourkeyspaceName WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} ;