【问题标题】:Cassandra cqlsh Unable to connect to any servers - 127.0.0.1:9160 (closed)> is already closedCassandra cqlsh 无法连接到任何服务器 - 127.0.0.1:9160(关闭)> 已关闭
【发布时间】:2015-01-16 06:12:30
【问题描述】:

我在 OSX 上安装了 Cassandra。 尝试从 /bin/ 运行 cqlsh 时,出现以下错误:

> Connection error: ('Unable to connect to any servers', {'127.0.0.1':
> ConnectionShutdown('Connection <AsyncoreConnection(4522252560)
> 127.0.0.1:9160 (closed)> is already closed',)})

我在安装 Cassandra 时遇到了困难,我使用了 brew install cassandra,从 datastax 安装了 DSE,并从 Apache 下载了二进制文件。

【问题讨论】:

    标签: cassandra cqlsh


    【解决方案1】:

    我认为问题是由于之前的安装未正确卸载造成的。我的用户.cassandra 目录有一些默认配置,这肯定是针对不同版本的,并且阻止了 cqlsh 启动。

    rm -Rf ~/.cassandra
    

    之后,我就可以正常运行cqlsh了。

    $ bin/cqlsh
    Connected to Test Cluster at 127.0.0.1:9042.
    [cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
    Use HELP for help.
    cqlsh> 
    

    【讨论】:

    • 我也遇到过这个问题,刚刚得知它实际上是我创建并配置为使用旧端口 9160 的 ~/.cassandra 目录中的 cqlshrc 文件。
    • +1 @catpaws 可能是正确的,因为它是默认的 .cqlshrc 文件。修复它的工作做得很好。仅供参考,从 2.1.1 开始,cqlsh 能够获取特定(或自定义).cqlshrc 文件,这在处理多个安装/版本时很有用:issues.apache.org/jira/browse/CASSANDRA-7131
    • 卸载似乎有很大缺陷。我不得不删除一些东西。谢谢你,因为它解决了我的问题。
    • 谢谢。您为我节省了几个小时的故障排除时间
    • 在同样的情况下,我面临同样的问题,但解决方案对我没有帮助。有人对此有想法吗?
    【解决方案2】:

    Cassandra-2.1 使用 9042 作为 cqlsh 端口。在此连接它是默认端口。如果您想在 9160 端口上连接,则通过设置环境变量 CQLSH_PORT 和 CQLSH_HOST 来更改它,但要设置它,您必须将 rpc_port 从默认的 9160 更改到任何其他港口。

    【讨论】:

      【解决方案3】:

      我在尝试使用 cqlsh 5.0.1 连接到 Cassandra 2.0.1 版本时遇到了这个问题 [cqlsh 4.1.1 |卡桑德拉 2.0.11.83 | CQL 规范 3.1.1 | ] [cqlsh 5.0.1 |卡桑德拉 2.1.2 | CQL 规范 3.2.0]

      这只是错误“连接错误:('无法连接到任何服务器'”的原因之一。

      当我使用兼容 Cassandra 2.0.1 的 cqlsh 客户端时,我能够连接到集群。

      希望这有助于找到根本原因。

      【讨论】:

        【解决方案4】:

        我把自己弄得一团糟,所以如果其他人遇到这种情况,这就是我的情况:

        1. 我按照这个教程 http://www.datastax.com/2012/01/working-with-apache-cassandra-on-mac-os-x (这有点过时了)。
        2. 我已经安装好一切,一切正常 - 一切都很好。然后我决定下载 Datastax Enterprise 工具来试用一下
        3. 在安装过程中遇到错误,但安装成功。再次按照上面的教程,尝试运行 ./datastax-agent 程序,但失败了。决定把它打包,所以在他们的安装文件夹中运行他们的卸载程序。
        4. 尝试返回原始 cassandra 文件夹(我在第 2 步中所做的工作)并运行“sudo ./cassandra”,然后我开始收到 JMX 错误(消息“无法绑定 JMX,Cassandra 是否已经在运行?”)将我带到这个关于更改端口的链接(不是真正解决问题,而是解决它)run two cassandra versions in the same machine
        5. 让服务器服务在新端口下运行,但在尝试与客户端连接时“sudo ./cqlsh”不起作用(会出现“Error=none”或未找到目标)。
        6. 做了上面提到的@Peter 的删除步骤,然后再试一次,还是不行。
        7. 决定回去看看我在步骤 4 中更改的原始端口 cassandra 使用的是什么Who is listening on a given TCP port on Mac OS X?
        8. 确定 JAVA.app 挂在它上面,因此在 Activity Monitor 中将其杀死。
        9. 再次重新运行上面提到的删除命令@Peter,并决定下载稳定版本 (v2.0.13) 而不是开发版本,并再次从第 1 步开始浏览教程。
        10. 退出并重新打开终端。 Ran "sudo ./cassandra" - 在标准端口下完美运行。打开另一个终端窗口并运行“sudo ./cqlsh”,这也正常工作。

        我相信在 Java 挂在默认端口 9042(可能来自 DataStax 安装错误)、~/.cassandra/cqlshrc 中的版本/主机/端口设置以及使用 cassandra 的开发版本之间,这些都让我感到不适。

        【讨论】:

        • 听起来像是一场有趣的 Cassandra 战斗。但是,是的,我的类似经历只是遵循任何可能使其工作的指南,这只是在深入挖掘自己。我想,你可以重启你的电脑。要找出谁在监听端口 9042,您可以运行:sudo lsof -i -n -P | grep TCP | grep 9042 并终止该进程 kill -9 51014 其中 51014 是之前的进程 ID。找出 Java 进程正在运行的另一个技巧是 jpsps aux | grep javaps aux | grep cassandra
        • 谢谢。在我的案例中,我发现 Apache 正在监听,因为我同时使用了 Cassandra PHP 驱动程序和 Python 驱动程序。这不可能吗?我的意思是您也可以将多个 MySQL 连接连接到同一台服务器,对吧?
        【解决方案5】:

        我在从终端连接 Cassandra 时遇到问题

        [

        然后我尝试使用 /usr/local/Cellar/ 进行连接

        [

        然后调用 cassandra。然后打开一个新终端并输入 cqlsh 启动 Cassandra。

        希望这也适用于解决 Cassandra 问题。

        【讨论】:

          【解决方案6】:

          我在 DSE-5.0 中通过编辑以下文件解决了这个问题:

          vi ~/.cassandra/cqlshrc 
          

          并在下面编辑配置为我正在运行的机器的当前 IP 地址 (192.168.1.6)。就我而言,这是我的 MacBook。

          [connection]
          hostname = 192.168.1.6
          port = 9042
          ; factory = cqlshlib.kerberos_ssl.kerberos_ssl_transport_factory
          
          ; [kerberos]
          ; hostname = 192.168.1.6
          ; service = cassandra
          ; optional
          ; principal = bill/cassandra-admin@foo.example.com
          

          我希望它会对某人有所帮助。

          谢谢,

          陈丹

          【讨论】:

            【解决方案7】:

            只需在 cassandra.yaml 中添加/修改以下内容:

             rpc_address: 127.0.0.1
             seeds: "127.0.0.1"
             listen_address: 127.0.0.1
            

            请注意,所有这些字段中的值必须相同。 这意味着,如果您指向静态 IP,则应使用相同的 IP。如果你只是指向 localhost,那么 localhost 必须在所有字段中使用。

            【讨论】:

            • 谢谢!就我而言,种子设置为“127.0.0.1”。将其更改为与 listen_address 相同的 IP 地址。
            【解决方案8】:

            运行cassandra 帮助我解决了问题:

            > cassandra
            Cassandra 3.0 and later require Java 8u40 or later.
            

            和:

            > java -version
            java version "1.7.0_95"
            OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)
            OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
            

            安装 Java 8 后它工作了。

            【讨论】:

              【解决方案9】:

              我在使用 SSL 配置的 Cassandra 时遇到了同样的问题。 cqlsh --ssl 解决连接正确。

              【讨论】:

              • 它要求一个证书:Validation is enabled; SSL transport factory requires a valid certfile to be specified. Please provide path to the certfile in [ssl] section as 'certfile' option in /Users/myuser/.cassandra/cqlshrc (or use [certfiles] section) or set SSL_CERTFILE environment variable.
              【解决方案10】:

              安装 java jdk 并在环境变量中设置 JAVA_HOME 或在命令提示符中设置 JAVA_HOME = java 路径。

              之后

              运行 cassandra.bat

              如果您遇到任何错误,它将显示日志

              【讨论】:

              • cassandra.bat 适用于 Windows
              【解决方案11】:

              好吧,我遇到了同样的问题,这就是我在 Mac 上所做的。

              $cd /usr/local/Cellar/cassandra/3.10_1/bin/     
              

              或安装 cassandra 的任何位置。

              $cassandra 
              

              这会初始化本地系统中的所有配置以启动 cassandra。

              $./cqlsh 
              

              这可以让你进入 cql 查询模式。

              【讨论】:

              • 我收到此错误Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(61, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
              • 不,我实际上最终没有使用 Cassandra
              • cassandra 命令只会启动一个 cassandra 集群。它不会初始化任何本地配置。
              【解决方案12】:

              您需要从 install_location 的 bin 目录启动 Cassandra。 例如,此命令将在前台启动 Cassandra:

              $ ./cassandra -f
              

              然后打开另一个终端选项卡(command + t)并运行 cqlsh

              $ ./cqlsh
              

              【讨论】:

                【解决方案13】:

                确保脚本 cqlsh.py 中的 DEFAULT_HOST = '127.0.0.1' 指向您完成 cassandra 安装的节点 IP。 就我而言,我已经在 10.160.1.5 上安装了 cassandra,编辑了上面的文件并开始工作。

                【讨论】:

                  【解决方案14】:

                  运行 cqlsh 为我收到此错误,但从 cassandra 目录运行 bin/cqlsh 有效。

                  【讨论】:

                    【解决方案15】:

                    我遇到了同样的问题。我运行了 cassandra.bat --> 这似乎已经启动了服务器。然后我打开一个新的命令提示符(以管理员身份运行),将目录更改为 cassandra/bin 位置。当我运行命令 cqlsh 时,瞧,它起作用了!

                    【讨论】:

                      【解决方案16】:

                      Java 8 移动到Java 11 后,我遇到了同样的错误。从 https://github.com/nosan/embedded-cassandra/issues/21 开始,Apache Cassandra 尚不支持 java 11。

                      将系统当前的java版本恢复到Java 8解决了这个问题。

                      【讨论】:

                      • 我在安装 Java 8 和 11 时遇到了类似的问题。我删除了 11,一切都开始工作了。
                      【解决方案17】:

                      我只需重新启动 cassandra sudo systemctl restart cassandra 即可解决此问题

                      【讨论】:

                        【解决方案18】:

                        在 MacOSX 的情况下,它可以运行

                        cassandra 
                        

                        而不是通过brew services start cassandra 运行它。

                        【讨论】:

                          猜你喜欢
                          • 2016-01-05
                          • 2016-12-17
                          • 2014-12-01
                          • 2015-03-17
                          • 2023-04-06
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-02-16
                          • 2018-10-23
                          相关资源
                          最近更新 更多