【问题标题】:Cassandra cqlsh - connection refusedCassandra cqlsh - 连接被拒绝
【发布时间】:2015-05-21 05:28:38
【问题描述】:

我刚刚开始使用 Cassandra (datastax),版本 2.1.3 和 cqlsh 版本 5.0.1。

Cassandra 启动良好,集群立即运行。

Cqlsh 不工作(在任何节点上)并发出以下错误:

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

我尝试使用主机自己的 ip、其他主机 ip、不同的端口启动 cqlsh,但结果仍然相同 - 总是连接被拒绝。

【问题讨论】:

  • 考虑到我,并在此处提供的帮助下,无法解决 2.1.3(诚然仍在开发中)的问题,我用 2.0.13(稳定)重新配置了服务器。 Cqlsh 仍然给出 localhost:9160 错误(尽管将 rpc_address 指定为主机)但它通过在启动时手动指定 ip 来工作cqlsh 1.1.2.2 9160
  • 基于您降级到 2.0.13 并且可以正常工作的事实,我猜您在 listen_addressrpc_addressbroadcast_rpc_address 之间进行了某种不正确的设置...后一种设置是 2.1.x 的新设置。我很想知道listen_addressrpc_address 设置(不一定是值,而是它们与cqlsh 使用的1.1.2.2 IP 的关系)。如果您再次尝试 2.1.x,请将 listen_address 设置为您的本地 IP,将 rpc_address 设置为 0.0.0.0,将 broadcast_rpc_address 设置为您的外部 IP。
  • 在此设置的情况下,1.1.2.2 是主机 IP(主机只有一个内部 IP),其值为:listen_address: 1.1.2.2rpc_address: 0.0.0.0broadcast_rpc_address: 1.1.2.2。广播地址是必需的(cassandra 日志)。尝试了大多数组合,但没有一个证明是富有成效的。最终不得不为 2.0.13 删除/注释它,所以很可能是 broadcast_rpc_address 造成了问题。不确定我可以给它哪些其他价值。它不会在其他任何地方引发错误吗?

标签: cassandra cqlsh


【解决方案1】:

您需要在您尝试连接的节点上编辑cassandra.yaml 并设置rpc_addresslisten_address 的节点IP 地址并重新启动Cassandra。

rpc_address 是 Cassandra 监听客户端呼叫的地址。

listen_address 是 Cassandra 监听其他 Cassandra 节点的地址。

【讨论】:

  • 它们在cassandra.yaml 中定义。 rpc_address 设置为 0.0.0.0 listen_address 设置为节点自己的 ip。也有broadcast_rpc_address在与监听地址相同的IP。是否需要将 rpc_address 设置为其他内容?谢谢
  • 尝试将rpc_address设置为节点的ip
  • 试过了。在127.0.0.1 上产生完全相同的连接被拒绝错误。
  • 假设 Cassandra 所在服务器的 ip 是 1.2.3.4。将 rpc_address 设置为 1.2.3.4。重新启动卡桑德拉。那就试试cqlsh 1.2.3.4
  • 感谢您的帮助 - 我重新配置了 2.0.13(稳定),它最终工作了
【解决方案2】:

尝试将rpc_address改为指向节点的IP而不是0.0.0.0,并在连接cqlsh时指定IP,好像IP是10.0.1.34,rpc_port保留默认值9160那么以下应该可以工作:

cqlsh 10.0.1.34 9160 

或者:

cqlsh 10.0.1.34 

还要确保在 /etc/cassandra/cassandra.yaml 配置文件中将 start_rpc 设置为 true。

【讨论】:

  • rpc_port 尚未定义,但它似乎默认为 9042,而不是 9160。已尝试链接rpc_address,但错误仍然相同(而不是127.0.0.1,错误出现在所使用的主机IP上)。
  • 根据文档,rpc_port 的默认值为 9160 ,但听起来 cqlsh 在最新的 Cassandra 版本中使用了 cassandra.yaml 中的 native_transport_port 属性的值,该值具有 9042 默认值。能否为 native_transport_port 指定任何空闲端口并检查错误是否发生变化?
  • 已定义 native_transport_value: 9160 但端口 9042 上的错误仍然相同
  • 是的,每次更改后 cassandra 都会重新启动。你的意思是端口9042而不是8042?在这种情况下,是的 - (如 9160)。
  • 感谢您的帮助 - 我重新配置了 2.0.13(稳定),它最终工作了
【解决方案3】:

如果您在/var/log/cassandra 中检查system.log 文件中的cassandra,您会发现出现此问题是因为rpc 服务器 尚未启动。

默认情况下,start_rpccassandra.yaml 文件中设置为 false。将其设置为start_rpc: true,然后重试。

从 Cassandra 3.0 开始,start_rpc 默认设置为 true。 https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/configCassandra_yaml.html

【讨论】:

    【解决方案4】:

    这是因为 cassandra 中的一些预配置。为了解决这个问题,cassandra-env.sh 文件中有以下注释行:

    #add this if you’re having trouble connecting:
    #JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>
    

    你必须从哪里开始修复错误。

    打开终端并使用以下简单步骤开始修复:

    第一步

    使用

    sudo nano /etc/cassandra/cassandra-env.sh

    此命令并搜索JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=,只需删除附加在行首的#,即可取消注释该行。

    注意:如果您从未打开此文件来修复此错误,那么您会发现JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=&lt;public name&gt;

    第 2 步 现在将&lt;public name&gt; 替换为127.0.0.1

    第 3 步 保存文件并使用 systemctl restart cassandra.service 重新启动 cassandra(如果服务器尚未运行)。或者使用 systemctl start cassandra.service 启动 cassandra(如果服务器没有运行)。

    Step-4 使用sudo service cassandra statussystemctl status cassandra.service 检查状态。

    注意:一旦检查系统监视器是否 cassandra 在那里运行。

    现在试试cqlsh。它会起作用的。

    注意:nano 是您可以使用其他您熟悉的编辑器的编辑器。

    【讨论】:

    • 太棒了,我的 cassandra 现在处于活动状态但仍然 cqlsh ('无法连接到任何服务器', {'127.0.0.1': error(111, "尝试连接到 [('127.0.0.1', 9042)]. 最后一个错误:连接被拒绝")})
    【解决方案5】:

    在 /etc/cassandra/cassandra.yaml 中查找 native_transport_port 默认为 9842。

    native_transport_port: 9842
    

    为了使用 cqlsh 连接到 localhost,这个端口对我有用。

    cqlsh 127.0.0.1 9842

    【讨论】:

      【解决方案6】:

      如果服务器正在运行,最好检查 cassandra 日志。我收到了完全相同的消息并且无法对此做任何事情,然后我发现日志中有错误并且系统实际上无法正常工作。

      很傻,我知道,但可能会发生......

      【讨论】:

        【解决方案7】:

        最近在 ArchLinux 上从 Cassandra 3.0 降级到 Cassandra 2.2 后遇到了同样的问题。

        与上述解决方案不同,我的问题不在 .cassandra 中,但 3.0 版将其配置保留在 /var/lib/cassandra 目录中。

        以下命令解决了我的问题:

        sudo rm -R /var/lib/cassandra
        sudo rm -R /var/log/cassandra
        sudo rm -R /usr/share/cassandra
        

        然后我安装了 cassandra,一切都恢复正常了 :)

        【讨论】:

          【解决方案8】:

          尝试更改rpc_address指向节点的IP而不是0.0.0.0并在连接到cqlsh时指定IP,好像IP是10.0.2.64并且rpc_port保留默认值9160那么以下应该工作:

          cqlsh 10.0.2.64 9160 
          

          cqlsh 10.0.2.64
          

          还要确保在 /etc/cassandra/cassandra.yaml 配置文件中将 start_rpc 设置为 true。

          【讨论】:

            【解决方案9】:

            诊断的第一步也是最重要的一步是检查 Cassandra 日志。

            找出进程,命令行参数中会有提示告诉你日志文件在哪里。

            ps aux | grep cassandra

            就我而言,它位于默认位置 /etc/cassandra/conf/cassandra.yaml(如果您安装了 yum 软件包)。

            确保三样东西都配置好,并且配置了相同的host/ip。

            1. listen_address - 您可以将其留空,它将默认为主机名/第一个 IP 与 eth0 网卡绑定
            2. rpc_address - 这是可选的,如果您希望它与 listen_address 相同,请留空
            3. seeds - 这是一个以逗号分隔的 IP 地址或主机名列表的双引号字符串。这默认为硬编码的“127.0.0.1”,将其更改为与 list_address 相同,然后重新启动 Cassandra 服务使其对我有用。

            参考资料:

            【讨论】:

            • 非常感谢,我认为种子是最终让这一切正常工作的原因。我还必须将 start_rpc 设置为 true。当我只想使用开箱即用地在 localhost 上愉快地工作的本机客户端进行连接时,为什么我必须打开 rpc 是非常不直观的。
            【解决方案10】:

            尝试将native_transport_protocol 更改为端口9160(如果它设置为9160 以外的任何值;它可能指向9042)。检查您的日志并查看 cassandra 在哪个端口上侦听 CQL 客户端?

            【讨论】:

            • 我不知道它会有什么不同,但有一个更正是native_transport_port而不是native_transport_protocol
            【解决方案11】:

            我在使用 Cassandra 3.11.0 时遇到了同样的问题,任何时候我更改 rpc 的地址或监听地址 cqlsh 都不起作用。我必须将相同的本地 ip 添加到 seeds

            所以经过反复试验,我的工作 cassandra.yml 最终变成了这样:

            class-name: org.apache.cassandra.locator.SimpleSeedProvider
            parameters: 
                -seeds: "192.168.0.30"
            
            listen_adress: 192.168.0.30
            rpc_address: 192.168.0.30
            

            【讨论】:

              【解决方案12】:

              对我来说,事实证明该服务根本没有运行。 检查与

              service cassandra status
              

              如果您遇到与我相同或其他类型的错误,那么乱用 IP 地址根本无法解决您的问题。

              我得到的错误:

              cassandra dead but pid file exists
              

              编辑:这是我的问题的解决方案:https://stackoverflow.com/a/46743119/3881406

              【讨论】:

                【解决方案13】:

                遇到此问题,[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4] 必须在 cassandra.yaml 文件中设置 start_native_transport: true

                为了验证,

                • 尝试在一个选项卡中打开tailf /var/log/cassandra/system.log 文件
                • 更新cassandra.yaml
                • 重启cassandrasudo service cassandra restart

                在日志文件中显示。

                INFO  [main] 2019-03-15 19:53:06,156 Server.java:156 - Starting listening for CQL clients on /10.139.45.34:9042 (unencrypted)...
                

                【讨论】:

                  【解决方案14】:

                  我试图在网络驱动器上运行它。所以我在 cqlsh 中增加了client_timeout,它起作用了。

                  【讨论】:

                    【解决方案15】:

                    确保您还将“种子”设置为您在“listen_address”提供的地址

                    【讨论】:

                      【解决方案16】:

                      尝试远程登录到给定的地址。就我而言,有一个防火墙阻止了我。

                      【讨论】:

                        【解决方案17】:

                        当我安装 Cassandra 3.11.1 时,我遇到了这个问题。我检查了 /var/log/cassandra/cassandra.log 发现了这个错误 启动过程中遇到异常......这是一个错误并且已经报告。原帖链接https://issues.apache.org/jira/browse/CASSANDRA-14173.

                        解决办法是将Cassandra降级到3.0

                        1. 下载 Cassandra rpm

                        卷曲 -O https://www.apache.org/dist/cassandra/redhat/30x/cassandra-3.0.15-1.noarch.rpm

                        wget https://www.apache.org/dist/cassandra/redhat/30x/cassandra-3.0.15-1.noarch.rpm

                        1. rpm -ivh cassandra-3.0.15-1.noarch.rpm
                        2. 服务 cassandra 启动
                        3. service cassandra status # 检查 cassandra 状态

                        cassandra (pid 2322) 正在运行...

                        1. cqlsh # 启动 cassandra

                        【讨论】:

                          【解决方案18】:

                          cqlsh --cqlversion="3.4.0" 在 127.0.0.1:9042 连接到测试集群。 [cqlsh 5.0.1 |卡桑德拉 3.0.9 | CQL 规范 3.4.0 |原生协议 v4]

                          试试上面的命令。它对我有用。

                          【讨论】:

                          • cqlsh --cqlversion="3.4.0" 连接错误: ('无法连接到任何服务器', {'127.0.0.1:9042': error(61, "尝试连接到[( '127.0.0.1', 9042)]. 最后一个错误:连接被拒绝")})
                          【解决方案19】:

                          首先,您需要检查端口 9042 是否打开,然后检查以下内容,例如 rpc_address 和 listen_address。您应该设置服务器自己的 IP 地址而不是 0.0.0.0 或 127.0.0.1。

                          如果一切正常,请运行以下命令连接 cqlsh。

                          cqlsh IP地址9042

                          如果您启用身份验证和授权,您必须使用此命令输入用户/密码。

                          【讨论】:

                            【解决方案20】:

                            检查 cassandra.yaml 文件中的 IP 地址是否正确。大多数情况下,错误是由于您系统的 IP 地址以及用户名和密码不正确造成的。

                            这样做之后,通过命令启动 cqlsh :-

                            cqlsh 10.31.79.1 -u 卡桑德拉 -p 卡桑德拉

                            【讨论】:

                              【解决方案21】:

                              检查 CASSANDRA_HOME 环境变量指向的内容。我有一个旧版本的 cassandra 。我已重置为我升级的 3.11.6 安装并开始工作。

                              【讨论】:

                                【解决方案22】:

                                另一种没有提到接收the Unable to connect to any servers 错误的情况是Client-to-Node Encryptioncassandra.yaml 文件的client_encryption_options 块中启用。

                                在这种情况下,您需要添加 --ssl 标志才能连接:

                                cqlsh --ssl.

                                【讨论】:

                                  猜你喜欢
                                  • 2016-07-26
                                  • 2019-07-16
                                  • 2023-03-15
                                  • 2018-06-12
                                  • 2020-07-09
                                  • 2018-02-11
                                  • 1970-01-01
                                  • 2021-03-29
                                  相关资源
                                  最近更新 更多