【问题标题】:Cassandra "Unable to connect to any servers" via Django, while cqlsh worksCassandra通过Django“无法连接到任何服务器”,而cqlsh工作
【发布时间】:2023-04-06 18:09:01
【问题描述】:

我的 Linux 机器上有 Cassandra 3.x。 我尝试使用https://github.com/tschellenbach/Stream-Framework 连接到它

from stream_framework.feeds.cassandra import CassandraFeed

我可以通过命令行cqlsh' and usingDBeaver GUI`在端口 9042 上连接到 Cassandra。

当我尝试使用上述导入运行 Django 时,出现此错误:

cassandra.cluster.NoHostAvailable: 
('Unable to connect to any servers', 
{'::1': error(111, "Tried connecting to [('::1', 9042, 0, 0)]. 
Last error: Connection refused"), 
'127.0.0.1': error(111, 
"Tried connecting to [('127.0.0.1', 9042)]. 
Last error: Connection refused")})

编辑 3 当所有设置都为默认值时,我也得到了

 DriverException('ProtocolError returned from
 server while using explicitly set client protocol_version 2',)})

我已经四处寻找解决方案并改变了 /etc/cassandra/cassandra.yaml转:

rpc_address: 0.0.0.0 #from localhost
rpc_port: 9042 #from 9160
listen_address: 127.0.0.1 #from localhost

但它没有帮助。

关于如何解决它的任何想法?

编辑 我把事情变成了默认设置和netstat -nat | grep 9042

tcp        0      0 127.0.0.1:56524         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56528         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56522         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56558         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56516         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56514         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56560         127.0.0.1:9042          ESTABLISHED
tcp        0      0 127.0.0.1:56530         127.0.0.1:9042          ESTABLISHED
tcp6       0      0 127.0.0.1:9042          :::*                    LISTEN
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56516         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56514         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56528         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56558         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56524         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56560         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56522         ESTABLISHED
tcp6       0      0 127.0.0.1:9042          127.0.0.1:56530         ESTABLISHED

顺便说一句,nodetool status 返回

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  157.61 KB  256          100.0%            3b13b3f2-968d-4f53-8e9b-1aa4ae271c66  rack1

编辑 2
我不确定这是否是某种线索,但是当我使用 DBeaver 连接到 Cassandra 时,我只列出了一个主机:

0:0:0:0:0:0:0:1

是 IPv6 而不是 IPv4?

【问题讨论】:

  • netstat -nat | grep 9042 显示什么?
  • @Ivan,我在编辑中添加了 netstat 的结果。
  • 接下来我会尝试了解 cqlsh 使用哪个并尝试强制您的 python 应用程序执行相同操作

标签: python django cassandra stream-framework


【解决方案1】:

我发现了问题。 Cassandra 协议的 Stream-Framework 的默认设置是2 https://github.com/tschellenbach/Stream-Framework/blob/master/stream_framework/default_settings.py#L23

将其更改为 4 后,测试和应用程序将连接到 Cassandra。

编辑

更改在主项目的settings.py 中。像这样:

CASSANDRA_DRIVER_KWARGS = { 'protocol_version': 4 }

【讨论】:

  • 你在哪里改的?我面临着类似的问题
猜你喜欢
  • 2016-01-05
  • 2016-12-17
  • 2018-08-12
  • 2017-02-16
  • 2015-01-16
  • 2015-02-05
  • 2016-05-20
  • 2022-06-10
  • 2016-03-02
相关资源
最近更新 更多