Cassandra cqlsh - 连接被拒绝

时间:2015-03-18 12:20:26

标签: cassandra cqlsh

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

Cassandra启动良好,群集立即投入使用。

Cqlsh无效(在任何节点上)并发出以下错误:

  

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

我尝试使用主机自己的ip启动cqlsh,其他主机ip,不同的端口但结果保持不变 - 始终连接被拒绝。

20 个答案:

答案 0 :(得分:15)

尝试将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。

答案 1 :(得分:14)

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

rpc_address是Cassandra侦听客户端调用的地址。

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

答案 2 :(得分:4)

这是因为cassandra中的一些预配置。要解决此问题,{{item onButtonClick="someActionHandledInTheParent"}}文件中有以下注释行:

cassandra-env.sh

您必须开始修复错误。

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

<强>步骤1

使用

#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=即可。

注意:如果您从未打开此文件来修复此错误,那么您会发现#

<强>步骤-2 现在将JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>替换为<public name>

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

步骤4 使用systemctl start cassandra.servicesudo service cassandra status检查状态。

注意:检查系统监控是否cassandra是否在那里运行。

立即尝试systemctl status cassandra.service。它会工作。

注意: cqlsh是编辑器,您可以使用其他感兴趣的编辑器。

答案 3 :(得分:4)

如果在 / var / log / cassandra 中检查 system.log 文件中的cassandra,您会看到出现此问题,因为 rpc服务器< / strong>尚未开始。

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

至少在Cassandra 3.0中, start_rpc 默认设置为true。 https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/configCassandra_yaml.html

答案 4 :(得分:3)

在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,一切都恢复了工作:)

答案 5 :(得分:2)

诊断的首要步骤是检查Cassandra日志。

找出该过程,命令行参数中会提示您日志文件在哪里。

ps aux | grep cassandra

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

确保配置的三项内容和配置的主机/ ip相同。

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

参考:

答案 6 :(得分:2)

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

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

答案 7 :(得分:2)

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

native_transport_port: 9842

对于使用cqlsh连接到localhost,此端口适用于我。

cqlsh 127.0.0.1 9842

答案 8 :(得分:1)

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

service cassandra status

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

我得到的错误:

cassandra dead but pid file exists

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

答案 9 :(得分:1)

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

cqlsh 10.0.2.64 9160 

OR

cqlsh 10.0.2.64

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

答案 10 :(得分:1)

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

答案 11 :(得分:0)

尝试telnet到指定的地址。就我而言,有一个阻止我的防火墙。

答案 12 :(得分:0)

我遇到了与Cassandra 3.11.0相同的问题,无论何时我改变了rpc的地址或者监听地址cqlsh都不会工作。我必须将相同的本地IP添加到ServerRequest mockReq = mock(ServerRequest.class); Mockito.doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { System.out.println("Running first time"); Object[] arguments = invocation.getArguments(); ResponseInterface inter = (ResponseInterface) arguments[2]; Object obj = "Already taken"; inter.OnSuccess(obj); return null; } }).when(mockReq).InformationRequest(ArgumentMatchers.anyMap(),anyString(),ArgumentMatchers.<ServerInterface>any());

经过多次反复试验后,我的工作cassandra.yml就像这样:

seeds

答案 13 :(得分:0)

确保您还将“种子”设置为您在“listen_address”

提供的地址

答案 14 :(得分:0)

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

解决方案是将Cassandra降级为3.0

  1. 下载Cassandra rpm
  2.   卷曲-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. service cassandra start
    3. service cassandra status #check cassandra status
    4.   

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

      1. cqlsh #start cassandra

答案 15 :(得分:0)

要解决[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]的这一问题,必须在start_native_transport: true文件中设置cassandra.yaml

要进行验证,

  • 尝试在一个选项卡中打开tailf /var/log/cassandra/system.log文件
  • 更新cassandra.yaml
  • 重新启动cassandra sudo 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)...

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

我试图在网络驱动器上运行它。所以我增加了cqlsh中的1并且它有效。

答案 18 :(得分:0)

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

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

cqlsh IP地址9042

如果启用身份验证和授权,则必须使用此命令放置用户/密码。

答案 19 :(得分:0)

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

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

cqlsh 10.31.79.1 -u cassandra -p cassandra