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

Can't connect to cassandra node from different host

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

但是当我尝试使用“192.x.x.x”从另一台机器连接到它的 cqlsh 时,我收到一条错误消息

连接错误:('Unable to connect to any servers', {'192.x.x.x': error(111, "Tried connecting to [('192.x.x.x', 9042)]. Last error: Connection refused")})

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

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

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

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

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

cassandra.yaml

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

然后,重启服务。

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的问题

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

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

在我的例子中,它总是设置为 false。我已经用 Ubuntu、Docker 和 Cassandra 试过了。

在 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. 在“其他端口”下添加端口

我遇到了同样的问题。我正在关注此 post 中的答案。不幸的是,我没有运气让它发挥作用。我做了一些研究。它现在有效。这是我的零钱。

  • 环境 Ubuntu VirtualBox 上的服务器 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
  • 将 'seeds' 从 127.0.0.1 更改为 {seriver ip} exp。我的是 172.20.10.9
  • listen_address 在 DSE 5.1 官方文档中说 'Never specify 0.0.0.0; it is always wrong.' 我所做的是注释掉 'listen_address' setting
  • 'rpc_address' 从本地主机更改为 0.0.0.0
  • 'broadcast_address' 更改为服务器 IP。我的是 172.20.10.9
  • 'broadcast_rpc_address'更改服务器ip
  • 重启 dse 等待几分钟,它正在改变。如果还是不行,重启机器。

这是我 15 秒后的日志。 `ubuntu08@ubuntu08:~$ 节点工具状态 nodetool:无法连接到“127.0.0.1:7199”- ConnectException:'Connection refused (Connection refused)'。 ubuntu08@ubuntu08:~$ 节点工具状态

错误:节点还没有 system_traces,可能仍在引导 ubuntu08@ubuntu08:~$ 节点工具状态

数据中心:SearchGraphAnalytics

状态=Up/Down |/ 状态=Normal/Leaving/Joining/Moving -- 地址加载令牌拥有主机 ID 机架 UN 10.0.0.44 278.51 KiB 32 ? 19db0016-df63-4470-9921-f3b5fe4e9341 机架 1 `

  • 我可以通过 运行 'cqlsh 172.20.10.9' 从本地或其他机器访问。

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

我遇到了同样的问题,不允许我收听 0.0.0.0,而 Cassandra 运行正在具有桥接网络的 VM 上运行。我找到的解决方案是让 VM 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'

此外,因为这应该在启动时发生,所以您必须为虚拟机用户创建一个 SSH 密钥并通过 .ssh/authorized_keys.

信任它。