无法从 Python 应用程序连接到 DataStax Enterprise 集群
Cannot connect to DataStax Enterprise cluster from Python app
我在连接到 Centos 7.x 服务器托管的 DataStax Cassandra 6.8 时遇到一些困难。
我能够在 Centos 中成功地进行本地连接 Shell 并且 nodetool 状态显示集群正常运行。
我在 cassandra.yaml 文件中尝试过的东西 -
- 将 listen_address 参数从 localhost 更改为服务器的 IP 地址。结果 -> DSE 未启动。
- 注释了 listen_address 行。结果 -> DSE 未启动
- 将listen_address的参数留空。结果 -> DSE 未启动。
如上所述-
OS - 美分OS 7
DSE 版本 - 6.8
安装方法 RPM
Python 程序 -
#cluster = Cluster()
cluster = Cluster(['192.168.1.223'])
# To establish connection and begin executing queries, need a session
session = cluster.connect()
row = session.execute("select release_version from system.local;").one()
if row:
print(row[0])
else:
print("An error occurred.")
从 python ->
抛出的异常
NoHostAvailable: ('Unable to connect to any servers', {'192.168.1.223:9042': ConnectionRefusedError(10061, "Tried connecting to [('192.168.1.223', 9042)]. Last error: No connection could be made because the target machine actively refused it")})
我的电脑和我的服务器都在同一个网络上,我可以互相 ping 通。
非常感谢任何帮助。
谢谢
https://community.datastax.com/questions/12174/ 上有人问了同样的问题,所以我在这里重新发布我的答案。
此错误表明您正在连接的节点未在 IP 192.168.1.223
和 CQL 端口 9042
上侦听 CQL 连接:
No connection could be made because the target machine actively refused it
2 个最可能的原因是:
- DSE 不是 运行
- DSE 没有在正确的 IP 上侦听客户端连接
您已经表示您无法启动 DSE。您需要查看默认情况下位于 /var/log/cassandra
中的日志,以了解为什么它不是 运行.
的线索
另一个可能的问题是您没有配置 native_transport_address
(rpc_address
在开源 Cassandra 中)。您需要将其设置为客户端(您的应用程序)可以访问的 IP 地址,否则,它将默认为 localhost
(127.0.0.1
)。
在cassandra.yaml
中,配置节点:
listen_address: private_ip
native_transport_address: public_ip
如果您只是在本地网络上进行测试,请将这两个属性都设置为服务器的 IP 地址。干杯!
[编辑] 我刚刚看到你与@Alex Ott 的对话。我在这里发布我的回复,因为它不适合发表评论。
此启动错误意味着节点无法与任何种子节点通信,因此无法加入集群:
ERROR [DSE main thread] 2021-08-25 06:40:11,413 CassandraDaemon.java:932 - \
Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any peers
如果集群中只有1个节点,请将cassandra.yaml
中的seeds
列表配置为服务器自己的IP地址:
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.1.223"
我在连接到 Centos 7.x 服务器托管的 DataStax Cassandra 6.8 时遇到一些困难。
我能够在 Centos 中成功地进行本地连接 Shell 并且 nodetool 状态显示集群正常运行。
我在 cassandra.yaml 文件中尝试过的东西 -
- 将 listen_address 参数从 localhost 更改为服务器的 IP 地址。结果 -> DSE 未启动。
- 注释了 listen_address 行。结果 -> DSE 未启动
- 将listen_address的参数留空。结果 -> DSE 未启动。
如上所述- OS - 美分OS 7 DSE 版本 - 6.8 安装方法 RPM
Python 程序 -
#cluster = Cluster()
cluster = Cluster(['192.168.1.223'])
# To establish connection and begin executing queries, need a session
session = cluster.connect()
row = session.execute("select release_version from system.local;").one()
if row:
print(row[0])
else:
print("An error occurred.")
从 python ->
抛出的异常NoHostAvailable: ('Unable to connect to any servers', {'192.168.1.223:9042': ConnectionRefusedError(10061, "Tried connecting to [('192.168.1.223', 9042)]. Last error: No connection could be made because the target machine actively refused it")})
我的电脑和我的服务器都在同一个网络上,我可以互相 ping 通。
非常感谢任何帮助。
谢谢
https://community.datastax.com/questions/12174/ 上有人问了同样的问题,所以我在这里重新发布我的答案。
此错误表明您正在连接的节点未在 IP 192.168.1.223
和 CQL 端口 9042
上侦听 CQL 连接:
No connection could be made because the target machine actively refused it
2 个最可能的原因是:
- DSE 不是 运行
- DSE 没有在正确的 IP 上侦听客户端连接
您已经表示您无法启动 DSE。您需要查看默认情况下位于 /var/log/cassandra
中的日志,以了解为什么它不是 运行.
另一个可能的问题是您没有配置 native_transport_address
(rpc_address
在开源 Cassandra 中)。您需要将其设置为客户端(您的应用程序)可以访问的 IP 地址,否则,它将默认为 localhost
(127.0.0.1
)。
在cassandra.yaml
中,配置节点:
listen_address: private_ip
native_transport_address: public_ip
如果您只是在本地网络上进行测试,请将这两个属性都设置为服务器的 IP 地址。干杯!
[编辑] 我刚刚看到你与@Alex Ott 的对话。我在这里发布我的回复,因为它不适合发表评论。
此启动错误意味着节点无法与任何种子节点通信,因此无法加入集群:
ERROR [DSE main thread] 2021-08-25 06:40:11,413 CassandraDaemon.java:932 - \
Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any peers
如果集群中只有1个节点,请将cassandra.yaml
中的seeds
列表配置为服务器自己的IP地址:
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.1.223"