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

时间:2015-01-03 19:37:44

标签: cassandra datastax cqlsh network-interface

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

但是当我尝试使用" 192.x.x.x"连接到它的cqlsh时从另一台机器上,我收到错误说

连接错误:('无法连接到任何服务器',{' 192.xxx':错误(111,"尝试连接到[(' ; 192.xxx',9042)]。上次错误:拒绝连接")})

这是什么原因?我该如何解决?

8 个答案:

答案 0 :(得分:18)

远程Cassandra节点可能没有绑定到外部网络接口,而是绑定到环回节点(这是默认配置)。您可以通过远程计算机上的“telnet thecassandrahost 9042”来确保这一点,它不应该工作。

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

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

答案 1 :(得分:5)

设置此文件所在的config参数。可能是/etc/cassandra/cassandra.yaml

cassandra.yaml

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

然后,重启服务。

答案 2 :(得分: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 pc_address=0.0.0.0)

<强> 2.restart

./bin/cassandra

案例:我遇到了一个问题,我无法远程访问cassandra当我使用java访问时cassandra

答案 3 :(得分:2)

我遇到了同样的问题。我在这篇文章中回答。不幸的是,我没有运气让它发挥作用。我做了一些研究。它现在有效。这是我的改变。

  • 环境 VirtualBox上的Ubuntu Server 16.04.3 LTS, DSE版本5.1

  • 安装DSE

我正在安装DSE,请点击此页面 https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/install/installGUIdse.html

  • 转到/etc/dse/cassandra/cassandra.yaml
  • 改变种子&#39;从127.0.0.1到{seriver ip} exp。我的是172.20.10.9
  • listen_address 在DSE 5.1官方文档中说“从不指定0.0.0.0;这总是错的。&#39; 我做的是评论&#39; listen_address&#39;设置
  • &#39; rpc_address&#39;从localhost更改为0.0.0.0
  • &#39; broadcast_address&#39;更改为服务器IP。我的是172.20.10.9
  • &#39; broadcast_rpc_address&#39;更改为服务器IP
  • 重启dse等几分钟,它正在改变。如果仍然无法正常工作,请重启机器。

这是我的登录时间15秒。 `ubuntu08 @ ubuntu08:〜$ nodetool status nodetool:无法连接到&#39; 127.0.0.1:7199&#39; - ConnectException:&#39;连接被拒绝(连接被拒绝)&#39;。 ubuntu08 @ ubuntu08:〜$ nodetool status

错误:该节点还没有system_traces,可能仍然是bootstrapping ubuntu08 @ ubuntu08:〜$ nodetool status

数据中心:SearchGraphAnalytics

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

  • 我可以通过运行&c; cqlsh 172.20.10.9&#39;来自本地或其他机器。

这是Cassandra https://docs.datastax.com/en/developer/java-driver/3.3/manual/address_resolution/

的另一份文件

答案 4 :(得分:0)

即使在我设置RPC_ADDRESS后,它也不适用于我,直到我设置了-e CASSANDRA_START_RPC=true选项。

在我的情况下,它始终设置为false。我已经尝试过Ubuntu,Docker和Cassandra。

答案 5 :(得分:0)

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

rpc_address:0.0.0.0

验证以下值是否与以下相同(通常是默认值)

<强> start_native_transport:真

native_transport_port:9042

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

  1. 从CentOS菜单中的“系统/管理/防火墙”访问防火墙
  2. 在“其他端口”下添加端口

答案 6 :(得分:0)

我遇到了同样的问题,不允许收听0.0.0.0,并且Cassandra在具有桥接网络的VM上运行。我发现的解决方案是让虚拟机使用SSH本身,通过端口将桥接网络接口上的端口转发到localhost:

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-user创建SSH密钥并通过.ssh / authorized_keys信任它。

答案 7 :(得分:-1)

我有同样的问题 我编辑cassandra.yaml设置listen_address和roc_address作为ip地址解决问题。