无法从不同的主机连接到Cassandra节点

18

我有一台机器上运行着一个Cassandra节点。当我从同一台机器访问cqlsh时,它可以正常工作。

但是,当我尝试使用“192.x.x.x”从另一台机器连接到它的cqlsh时,出现错误,显示:

连接错误:(“无法连接到任何服务器”,{'192.x.x.x':error(111,“尝试连接到[('192.x.x.x',9042)]。最后一个错误:拒绝连接”)})

这是什么原因?我该怎么解决?

8个回答

18

可能远程Cassandra节点未绑定到外部网络接口,而是绑定到回环接口(这是默认配置)。您可以通过从远程机器上使用“telnet thecassandrahost 9042”来确保此点,它不应该起作用。

为了将Cassandra绑定到外部网络接口,您需要编辑cassandra.yaml配置文件并将属性“listen_address”和“rpc_address”设置为您的远程IP或“0.0.0.0”(并非所有版本的Cassandra都支持通配符地址)。

还要检查防火墙是否已正确配置或已禁用(sudo service iptables stop)。


1
当我使用0.0.0.0时,我遇到了rg.apache.cassandra.exceptions.ConfigurationException: listen_address不能是通配符地址(0.0.0.0)!在system.log中。 - Chamila Wijayarathna
4
这取决于您使用的Cassandra版本。如您在这里所见,v2.0允许使用通配符。如果您使用不同的版本,请使用您的远程地址。 - Nicola Ferraro
Java 驱动程序要得到相同的结果还需要进行其他更改吗? - Chamila Wijayarathna
如果没有网络问题(集群的每个节点都可以访问),Java驱动程序应该能够连接。还要使用“nodetool status”检查集群的每个节点是否看到彼此。 - Nicola Ferraro
是啊,就像服务器只有一个适配器一样!所有其他服务器都支持0.0.0.0(JBoss等)。为什么DataStax的人如此特别?如果他们的产品好的话,也许他们可以这样做。 - Alain Pannetier

5

请设置这个文件所在位置的配置参数。可能是/etc/cassandra/cassandra.yaml

cassandra.yaml

listen_address: 192.x.x.x
rpc_address: 192.x.x.x

然后,重新启动服务。


1
在我的情况下,我还需要编辑 - seeds: "10.131.33.51",而不是127.0.0.1,在“seed_provider”字段中,其中10.131.33.51是在我的情况下运行Cassandra的机器的地址。在您的设置中使用您机器的IP地址。 - Alex

4

1.Update:./conf/cassandra.yaml

rpc_address: 0.0.0.0 ("0.0.0.0" allow anywhere IP,but you can appoint an IP)

\# broadcast_rpc_address: 1.2.3.4 (Delete comment if rpc_address=0.0.0.0)

2.restart

./bin/cassandra

问题描述:我在使用Java访问Cassandra时遇到了无法远程访问Cassandra的问题。


3
我遇到了同样的问题。我正在遵循这篇文章中的答案。不幸的是,我没有成功让它工作。我做了一些研究。现在它可以工作了。这是我的更改。
环境 Ubuntu Server 16.04.3 LTS on VirtualBox, DSE version 5.1
安装DSE 我按照这个页面安装DSE https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/install/installGUIdse.html
  • 转到 /etc/dse/cassandra/cassandra.yaml
  • 将 'seeds' 从 127.0.0.1 更改为 {服务器IP},例如我的是 172.20.10.9
  • listen_address 在 DSE 5.1 官方文档中指出“永远不要指定 0.0.0.0;它总是错误的。” 我所做的是注释掉 'listen_address' 设置
  • 'rpc_address' 更改为 0.0.0.0
  • 'broadcast_address' 更改为服务器IP。我的是 172.20.10.9
  • 'broadcast_rpc_address' 更改为服务器IP
  • 重新启动 dse,等待几分钟,它正在更改。如果仍然无法工作,请重新启动机器。

这是我15秒钟内的日志。 `ubuntu08@ubuntu08:~$ nodetool status nodetool:无法连接到 '127.0.0.1:7199' - ConnectException:'连接被拒绝(Connection refused)'。 ubuntu08@ubuntu08:~$ nodetool status

错误:该节点尚未具有 system_traces,可能仍在引导过程中 ubuntu08@ubuntu08:~$ nodetool status

数据中心:SearchGraphAnalytics

状态=启动/关闭 |/ 状态=正常/离开/加入/移动 -- 地址 负载 令牌 拥有者 主机ID 机架 UN 10.0.0.44 278.51 KiB 32 ? 19db0016-df63-4470-9921-f3b5fe4e9341 rack1 `

  • 我可以通过在本地或其他计算机上运行'cqlsh 172.20.10.9'来访问。

这是Cassandra的另一个文档https://docs.datastax.com/en/developer/java-driver/3.3/manual/address_resolution/


1

我遇到了同样的问题,不允许我监听0.0.0.0,而Cassandra正在运行于桥接网络的虚拟机上。我找到的解决方案是让虚拟机通过SSH连接自己,将桥接网络接口上的端口转发到本地主机:

ssh -L 192.168.x.x:9042:127.0.0.1:9042 myvmuser@localhost

由于桥接网络卡的IP会改变(取决于运行它的开发人员的机器),因此ssh命令首先必须获取IP,以下代码段可用于此操作:

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

此外,由于这应该在启动时发生,因此您需要为vm用户创建一个SSH密钥,并通过.ssh/authorized_keys信任它。

0
即使我设置了RPC_ADDRESS,它对我仍然无效,直到我设置了-e CASSANDRA_START_RPC=true选项。
在我的情况下,它总是设置为false。我已经尝试过Ubuntu、Docker和Cassandra。

-1

在cassandra.yaml文件中设置以下配置参数(对于CentOS,它位于/etc/cassandra/default.conf)

rpc_address: 0.0.0.0

验证以下值与下面的相同(通常它们是默认值)

start_native_transport:true

native_transport_port:9042

对于CentOS的最后一步,更新防火墙配置并允许端口9042用于传入连接

  1. 从CentOS菜单中的“System / Administration / Firewall”访问防火墙
  2. 在“Other Ports”下添加端口

-2

我编辑了cassandra.yaml文件,将listen_address和roc_address设置为IP地址,解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接