无法从 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

无法从python连接到mysql

在 dockerized 环境中无法从 Flask 连接到 Kafka

无法使用 mysql-connector-python 连接到 localhost,错误 1130