如何使用cqlsh将Cassandra连接到本地主机?

26

我将rpc_port设置为公共IP地址,现在我可以从外部服务器成功连接到Cassandra。

但是,使用cqlsh在Cassandra服务器本身上无法连接。

我遇到的错误如下:

 Connection error: Could not connect to localhost:9160

有没有配置我可以更改,以便我能够从服务器本身连接?

14个回答

21
  1. 检查cassandra.yaml文件中rpc_port :所在的行,默认情况下应该是= 9160
  2. 登录托管cassandra的机器
  3. 尝试执行cqlsh 127.0.0.1 9160命令:无论如何都应该能够成功
  4. 尝试执行cqlsh [主机IP] 9160命令:如果可以成功,则表示cassandra可以从局域网访问,否则只能从localhost 127.0.0.1进行访问。

5
谢谢您指明方向,实际上在我的情况下,我发现了 start_rpc: false,将其设置为 true 就解决了问题。 - Custodio

9
请考虑更改/etc/cassandra.yaml:
# Whether to start the thrift rpc server.
start_rpc: false

为了

start_rpc: true

实际上,我有这样一个选项和这样一个问题。 - Szymon Roziewski

9

您需要通过在中定义的rpc_address连接到Cassandra。例如,我使用cqlsh 10.0.80.49 9160


Daniel - 我正在尝试在Google Cloud上运行Cassandra并想要使用外部IP。我在rpc_address中指定了外部地址,但在尝试启动Cassandra时出现错误 - `INFO [main] 2019-12-17 19:00:37,251 Server.java:159 - Starting listening for CQL clients on /xx.xx.xxx.xx: 9042 (unencrypted)...在启动期间遇到异常(java.lang.IllegalStateException):无法绑定端口9042在x.x.x.x.x上。 java.lang.IllegalStateException:无法在x.x.x.x.x上绑定端口9042。你知道我可能做错了什么吗? - Manu Chadha
抱歉,根据您的描述,我不知道问题出在哪里。也许可以尝试Cassandra用户邮件列表或其他社区支持论坛? - Daniel Compton

8

如果你在Cassandra日志中看到以下内容:

INFO  [main] 2015-07-21 12:06:27,426 CassandraDaemon.java:406 - Not starting RPC server as requested. Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it

然后只需打开终端并执行以下命令:
$ nodetool enablethrift

INFO消息中所述,现在应该可以正常工作。当我的系统升级到cassandra 2.2.0时遇到了这个问题。


5

如果您使用的是OSX

brew install cassandra

首先启动Cassandra。

cassandra

启动Cassandra 通过CQL shell连接

cqlsh 127.0.0.1

enter image description here


4

或许先通过bin/cassandra -f在本地计算机上启动cassandra?


3
由于您告诉它只监听<public IP>,因此它不会在127.0.0.1上进行侦听。将侦听地址更改为0.0.0.0以侦听所有地址(如果可能的话,可以省略此步骤,因为这通常是默认设置)。请参见Listening Sockets .NET tutorial或任何其他套接字教程,以了解套接字绑定的基本知识。
更新(@c45556037):
请注意,listen_address 是其他节点用来连接到此节点的地址(这是一个误导性的名称)。rpc_address 是实际要绑定到本地的地址。这个区别在2.0文档中并不清楚,更好的解释可以在1.0文档中找到。

4
但是来自DataStax的Cassandra说不要在.yaml文件中将0.0.0.0设置为监听地址?为什么呢? - Gibbs
当我这样做时,Cassandra会抛出一个错误。这并不被推荐。 - Uzer
@JonathanKelsey,如果没有更多的细节,你的评论并不是很有帮助。 - ivan_pozdeev
1
好的,这会在Cassandra 2.1.5.469中导致错误。一个典型的yaml文件将对监听地址有以下注释:“将其设置为0.0.0.0总是错误的。” 或者从Cassandra Apache FAQ中我们可以看到这个注意事项:“Cassandra是基于gossip的分布式系统。ListenAddress也是“联系我地址”,即它告诉其他节点要在哪里找到它。告诉其他节点“在我的任何地址上联系我”是一个坏主意;如果集群中的不同节点为您选择了不同的地址,则会发生糟糕的事情。” 简而言之,这只是错误的建议。 - Uzer
@JonathanKelsey 嗯,看到第二部分了吗?它明确告诉你要设置rpc_address而不是listen_address - ivan_pozdeev

1
我在启动 cqlsh 时遇到了相同的情况。在启动 cassandra 时,我遇到了以下错误。
在终端中只输入 ----cassandra----。
它将显示所有的 JAR 和日志文件。如果终端挂起,只需从中逃脱,然后输入 cqlsh。然后它将进入 cassandra cli。
这对我有用。

0

请考虑更改 /etc/cassandra-env.sh 文件:

JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
not "true" but "false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"

sudo service cassandra restart

使用sudo服务重新启动Cassandra。


0

使用此命令

sudo service cassandra start

启动Cassandra,然后使用

cqlsh command

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接