我刚刚开始使用Cassandra(datastax),版本2.1.3和cqlsh版本5.0.1。
Cassandra启动良好,群集立即投入使用。
Cqlsh无效(在任何节点上)并发出以下错误:
连接错误:('无法连接到任何服务器',{' 127.0.0.1':错误(111, "尝试连接到[(' 127.0.0.1',9042)]。上次错误:拒绝连接")})
我尝试使用主机自己的ip启动cqlsh,其他主机ip,不同的端口但结果保持不变 - 始终连接被拒绝。
答案 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_address
和listen_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.service
或sudo 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相同。
listen_address
-您可以将其保留为空白,默认为使用eth0
网卡的主机名/第一个IP绑定rpc_address
-这是可选的,如果希望与listen_address
相同,请保留空白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
卷曲-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
cassandra(pid 2322)正在运行......
答案 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
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