我刚开始使用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,但结果始终相同-始终是连接被拒绝。
cassandra.yaml
中定义。rpc_address
设置为 0.0.0.0。listen_address
设置为节点自己的 IP。同时,在相同的 IP 上有 broadcast_rpc_address
。是否需要将 rpc_address
设置为其他值?谢谢。 - Chros1.2.3.4
,请将rpc_address设置为1.2.3.4
。重启Cassandra后,尝试连接cqlsh 1.2.3.4
。 - jnyrpc_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
,但错误仍然存在(错误出现在使用的主机IP上,而不是127.0.0.1
)。 - Chrosnative_transport_value: 9160
,但端口 9042
上的错误仍然存在。 - Chros9042
而不是8042
?如果是这样,是的 - (9160也是)。 - Chros/var/log/cassandra
目录下检查Cassandra的system.log
文件,您将发现此问题是由于rpc服务器未启动所导致的。cassandra.yaml
文件中,start_rpc
设置为false。将其设置为start_rpc: true
,然后再试一次。 start_rpc
设置为true。https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/configCassandra_yaml.htmlcassandra-env.sh
文件中取消以下注释行:
#add this if you’re having trouble connecting:
#JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>
你需要开始修复错误的地方是这里。
打开终端并按照以下简单步骤开始修复:
步骤1
使用
sudo nano /etc/cassandra/cassandra-env.sh
这个命令并查找JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=
取消注释该行,只需删除行首的#
即可。
注意:如果您从未打开过此文件以修复此错误,则会找到JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>
步骤2
现在将<public name>
替换为127.0.0.1
或服务器IP。
步骤3 保存文件并使用systemctl restart cassandra.service
重新启动cassandra(如果您没有运行服务器)。或者使用systemctl start cassandra.service
启动cassandra(如果服务器未运行)。
步骤4 使用sudo service cassandra status
或systemctl status cassandra.service
检查状态。
注意:一旦检查系统监视器中是否有cassandra正在运行。
现在尝试cqlsh
。它会起作用。
注意:nano
是编辑器,您可以使用其他您熟悉的编辑器。
native_transport_port: 9842
对于使用cqlsh连接到localhost,此端口适用于我。
cqlsh 127.0.0.1 9842
cqlsh 10.0.2.64 9160
或者
cqlsh 10.0.2.64
即使服务器正在运行,检查Cassandra日志也是个好主意。我曾经收到过完全相同的消息,并且无法对其进行任何操作,然后我发现日志中存在错误,系统实际上并未运行。
虽然有些傻,但这种情况确实会发生...
最近我从Cassandra 3.0降级到ArchLinux上的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
/etc/cassandra/conf/cassandra.yaml
(如果您安装了yum包)。 listen_address
- 您可以将其留空,它将默认为使用 eth0
网络卡绑定的主机名/第一个IP。
2. rpc_address
- 这是可选的,如果要与 listen_address
相同,请保留为空白。
3. seeds
- 这是用逗号分隔的IP地址或主机名列表的双引号字符串。这是默认硬编码为“ 127.0.0.1”,将其更改为与 list_address
相同并重新启动Cassandra服务即可使其正常工作。我曾经遇到过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
cqlsh 1.1.2.2 9160
可以正常工作。 - Chroslisten_address
、rpc_address
和broadcast_rpc_address
之间设置了某种不正确的选项...后者是2.1.x中的新设置。 我想知道listen_address
和rpc_address
设置是什么(不一定要知道值,但要知道它们与使用cqlsh的1.1.2.2 IP的关系)。 如果您再次尝试2.1.x,请将listen_address
设置为本地IP,将rpc_address
设置为0.0.0.0,并将broadcast_rpc_address
设置为外部IP。 - Aaron1.1.2.2
是主机 IP(主机只有内部 IP),其值为:listen_address: 1.1.2.2
rpc_address: 0.0.0.0
broadcast_rpc_address: 1.1.2.2
。广播地址是必需的(Cassandra 日志)。尝试了大多数组合,但都没有成功。最终不得不在 2.0.13 中删除/注释掉它,因此很可能是broadcast_rpc_address
导致了问题。不确定我还能给它哪些其他值。难道它不会在其他地方抛出错误吗? - Chros