gpt4 book ai didi

node.js - 无主机可用错误 : All host(s) tried for query failed

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:34 24 4
gpt4 key购买 nike

我在一个 EC2 实例上安装了 Cassandra,该实例包含一个具有 SimpleStrategy 和复制因子 1 的键空间。

我还让安全组中的任何地方都可以访问端口 9042。

我有一个包含以下代码的 Node.js 应用程序:

const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['12.34.567.890:9042',], keyspace: 'ks1' });

const query = 'CREATE TABLE table.name ( field1 text, field2 text, field3 counter, PRIMARY KEY (field1, field2));';

client.execute(query)
.then(result => console.log(result));

产生以下错误:

NoHostAvailableError: All host(s) tried for query failed. First host tried, 12.34.567.890:9042: DriverError: Connection timeout. See innerErrors.

我使用 cassandra-driver .

我已确保 Cassandra 正在运行。

编辑:

正如 Aaron 所建议的,我已经在客户端机器上安装了 cqlsh。当我去 cqlsh 12.34.567.890 9042 时,它返回:

Connection error: ('Unable to connect to any servers', {'12.34.567.890': error(10061, "Tried connecting to [('12.34.567.890', 9042)]. Last error: No connection could be made because the target machine actively refused it")})

正如 Aaron 所建议的,我已经在服务器上编辑了 Cassandra.yaml,并将 localhost 替换为 12.34.567.890。不过,我仍然遇到同样的错误。

最佳答案

首先,您不需要指定端口。试试这个:

const client = new cassandra.Client({ contactPoints: ['12.34.567.890'], keyspace: 'ks1' });

其次,您的 NodeJS 应用程序从哪里运行?从那里安装并运行 cqlsh,只是为了确保可以连接。您还可以使用 telnet 来确保您可以连接到 9042 上的 Node 。

此外,您将要启用身份验证和授权,并且永远再次使用SimpleStrategy。启用身份验证并使用 NetworkTopologyStrategy 构建您的键空间是需要养成的好习惯。

我刚注意到你是这样说的:

instance that contains one keystore

您是指“ key 空间”还是使用客户端到 Node SSL?如果是这样,您将需要调整连接代码以提供与 Node keystore 中的证书相匹配的 SSL 证书。

如果您仍然遇到问题,下一步就是确保您连接到正确的 IP 地址。 Grep 您的 cassandra.yaml 以查看:

$ grep "_address:" conf/cassandra.yaml
listen_address: 192.168.0.2
broadcast_address: 10.1.1.4
# listen_on_broadcast_address: false
rpc_address: 192.168.0.2
broadcast_rpc_address: 10.1.1.4

如果已配置,您将需要使用“广播”地址。这些不同的地址通常适用于同时拥有内部和外部 IP 地址的部署。

$ grep "_address:" conf/cassandra.yaml
listen_address: localhost
# broadcast_address: 1.2.3.4
# listen_on_broadcast_address: false
rpc_address: localhost
# broadcast_rpc_address: 1.2.3.4

如果您看到类似这样的输出,则表示 Cassandra 正在监听您的本地 IP 127.0.0.1。在这种情况下,您甚至不需要指定它。

grep "_address:" cassandra.yaml returns exactly what you wrote in the second quote (with the localhost). Is it good or I need to change it?

需要更改它。否则,它将只接受 127.0.0.1 上的连接,这将不允许该 Node 之外的任何东西连接到它。

Then what should I write there? I guess Cassandra is not supposed to be aware to the IP address of the machine that hosting it.

实际上,主要问题是 Cassandra 非常知道它在哪个 IP 上。由于您正在尝试连接 12.34.567.890(我知道这不是真实 IP),因此您绝对应该使用它。

如果您的每个实例都具有内部和外部 IP 地址,则只需指定广播地址。通常,内部地址被指定为 rpc 和 listen,而外部地址成为广播地址。但是如果您的实例只有一个 IP,那么您可以将广播地址注释掉。

关于node.js - 无主机可用错误 : All host(s) tried for query failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51799946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com