Cassandra "Unable to connect to any servers" 通过 Django,而 cqlsh 工作
Cassandra "Unable to connect to any servers" via Django, while cqlsh works
我的 Linux 机器上安装了 Cassandra 3.x。
我尝试使用 https://github.com/tschellenbach/Stream-Framework
连接到它
from stream_framework.feeds.cassandra import CassandraFeed
我可以在端口 9042 上从命令行 cqlsh' and using
DBeaver GUI` 连接到 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
returns
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 吗?
我发现了问题。 Cassandra 协议的 Stream-Framework 默认设置是 2
https://github.com/tschellenbach/Stream-Framework/blob/master/stream_framework/default_settings.py#L23
将其更改为 4
后,测试和应用程序连接到 Cassandra insatnce。
编辑
更改在主项目的 settings.py
中。像这样:
CASSANDRA_DRIVER_KWARGS = {
'protocol_version': 4
}
我的 Linux 机器上安装了 Cassandra 3.x。 我尝试使用 https://github.com/tschellenbach/Stream-Framework
连接到它from stream_framework.feeds.cassandra import CassandraFeed
我可以在端口 9042 上从命令行 cqlsh' and using
DBeaver GUI` 连接到 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
returns
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 吗?
我发现了问题。 Cassandra 协议的 Stream-Framework 默认设置是 2
https://github.com/tschellenbach/Stream-Framework/blob/master/stream_framework/default_settings.py#L23
将其更改为 4
后,测试和应用程序连接到 Cassandra insatnce。
编辑
更改在主项目的 settings.py
中。像这样:
CASSANDRA_DRIVER_KWARGS = {
'protocol_version': 4
}