【问题标题】:Can't connect to cassandra node from different host无法从其他主机连接到 cassandra 节点
【发布时间】:2015-03-01 18:24:22
【问题描述】:

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

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

连接错误: ('Unable to connect to any servers', {'192.xxx': error(111, "尝试连接到 [('192.xxx', 9042)]。最后一个错误:连接被拒绝")})

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

【问题讨论】:

    标签: cassandra datastax cqlsh network-interface


    【解决方案1】:

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

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

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

    【讨论】:

    • 当我使用 0.0.0.0 时,我得到 rg.apache.cassandra.exceptions.ConfigurationException: listen_address cannot be a wildcard address (0.0.0.0)!在 system.log
    • 这取决于您使用的 cassandra 版本。如您所见here,在 v 2.0 中允许使用通配符。如果您使用的是其他版本,请使用您的远程地址。
    • 是否有任何其他更改可以为 java 驱动程序获得相同的结果?
    • 如果没有网络问题,Java 驱动程序应该能够连接(集群的每个节点都必须可访问)。如果集群的每个节点都能看到彼此,请使用“nodetool status”进行检查。
    • 是的,服务器只有一个适配器!所有其他服务器都支持 0.0.0.0(JBoss 等)。为什么 datastax 的人如此特别?如果他们的产品很好,也许他们可以。
    【解决方案2】:

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

    cassandra.yaml

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

    然后,重启服务。

    【讨论】:

    • 在我的情况下,我还必须编辑 -seed_provider 字段中的种子:“10.131.33.51”而不是 127.0.0.1,其中 10.131.33.51 是运行 Cassandra 的机器的地址我的情况。在您的设置中使用您机器的 IP 地址。
    【解决方案3】:

    1.更新:./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.重启

    ./bin/cassandra
    

    案例:我在使用java访问cassandra时遇到无法远程访问cassandra的问题

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          在 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 菜单中的“系统/管理/防火墙”访问防火墙
          2. 在“其他端口”下添加端口

          【讨论】:

            【解决方案7】:

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

            • 环境 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
            • 将“种子”从 127.0.0.1 更改为 {server ip} exp。我的是 172.20.10.9
            • listen_address 在 DSE 5.1 官方文档中说“从不指定 0.0.0.0;总是错的。 我所做的是注释掉“listen_address”设置
            • 'rpc_address' 从 localhost 更改为 0.0.0.0
            • “广播地址”更改为服务器 IP。我的是 172.20.10.9
            • 'broadcast_rpc_address' 更改为服务器 ip
            • 重新启动 dse 等待几分钟,它正在改变。如果还是不行,重启机器。

            这是我 15 秒后的日志。 `ubuntu08@ubuntu08:~$ nodetool 状态 nodetool:无法连接到“127.0.0.1:7199” - ConnectException:“连接被拒绝(连接被拒绝)”。 ubuntu08@ubuntu08:~$ nodetool 状态

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

            数据中心:SearchGraphAnalytics

            状态=上/下 |/ 状态=正常/离开/加入/移动 -- 地址加载令牌拥有主机 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/ 的另一份文件

            【讨论】:

              【解决方案8】:

              我遇到了同样的问题,我不被允许收听 0.0.0.0 并且 Cassandra 正在使用桥接网络的 VM 上运行。我找到的解决方案是让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 信任它。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-11-27
                • 2019-08-31
                • 2017-05-06
                • 2018-05-08
                • 1970-01-01
                • 2016-12-10
                • 2018-08-15
                相关资源
                最近更新 更多