无法从 Python 应用程序连接到 DataStax Enterprise 集群
Posted
技术标签:
【中文标题】无法从 Python 应用程序连接到 DataStax Enterprise 集群【英文标题】:Cannot connect to DataStax Enterprise cluster from Python app 【发布时间】:2021-10-25 10:50:45 【问题描述】:我在连接到托管 DataStax Cassandra 6.8 的 Centos 7.x 服务器时遇到了一些困难。
我能够在 Centos Shell 内成功连接本地,并且 nodetool 状态显示集群 Up 和 Normal。
我在 cassandra.yaml 文件中尝试过的东西 -
-
将listen_address 参数从localhost 更改为服务器的IP 地址。结果 -> DSE 未启动。
注释了listen_address 行。结果 -> DSE 未启动
将listen_address 的参数留空。结果 -> DSE 未启动。
如上所述—— 操作系统 - CentOS 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通。
非常感谢任何帮助。
谢谢
【问题讨论】:
【参考方案1】: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
两个最可能的原因是:
-
DSE 未运行
DSE 未侦听正确 IP 上的客户端连接
您已经表明您无法启动 DSE。您需要查看默认情况下位于 /var/log/cassandra
中的日志,以获取有关其未运行原因的线索。
另一个可能的问题是您没有配置native_transport_address
(在开源Cassandra 中为rpc_address
)。您需要将其设置为客户端(您的应用程序)可以访问的 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"
【讨论】:
以上是关于无法从 Python 应用程序连接到 DataStax Enterprise 集群的主要内容,如果未能解决你的问题,请参考以下文章
Python Flask SQLAlchemy 容器无法连接到 MySQL 容器
无法从 python-ldap 连接到 Windows Server 2016 上的 ldaps
无法从 lambda 中的 python 连接到 aws redshift