【问题标题】:Cannot connect to DataStax Enterprise cluster from Python app无法从 Python 应用程序连接到 DataStax Enterprise 集群
【发布时间】:2021-10-25 10:50:45
【问题描述】:

我在连接到托管 DataStax Cassandra 6.8 的 Centos 7.x 服务器时遇到了一些困难。

我能够在 Centos Shell 内成功连接本地,并且 nodetool 状态显示集群 Up 和 Normal。

我在 cassandra.yaml 文件中尝试过的东西 -

  1. 将listen_address 参数从localhost 更改为服务器的IP 地址。结果 -> DSE 未启动。
  2. 注释了listen_address 行。结果 -> DSE 未启动
  3. 将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通。

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: python cassandra datastax


    【解决方案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
    

    两个最可能的原因是:

    1. DSE 未运行
    2. 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"
    

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2014-02-22
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多