为什么我无法连接到Cassandra?

4

我在我的笔记本上安装了基本的Cassandra配置,它已经启动并且我可以使用命令行工具连接到它,但是在Java中,以下操作失败:

Cluster cluster = new Cluster.Builder().addContactPoints("localhost").withPort(9160).build();

任何线索都将非常有帮助,谢谢!错误信息如下:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1 ([localhost/127.0.0.1] Unexpected error during transport initialization (com.datastax.driver.core.TransportException: [localhost/127.0.0.1] Channel has been closed)))
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:186)

我使用Cassandra JDBC库也没有遇到任何问题。 - Jay
1
我知道我可能听起来很蠢,但是Cassandra正在运行吗? - Chiron
1
@Chiron 这正是问题所在,它并没有起作用。@Jacob 通过使用 telnet 127.0.0.1 9160 来验证Cassandra是否正在运行。 - Lyuben Todorov
1
检查Cassandra的日志文件是否有错误和警告。 - mschenk74
1
检查Cassandra配置中的接口设置是否正确:如果您希望Cassandra侦听多个IP地址(如果您想同时使用localhost和网络连接指定的IP地址),则必须在配置中使用0.0.0.0作为IP地址。 - mschenk74
它正在运行,我提到我可以从命令行连接到它。我确实尝试了telnet这种方式。 - Jay
2个回答

6

听起来你的cassandra服务器没有运行。通过任务管理器或telnet 127.0.0.1 9160检查服务器是否正在运行。

如果你得到以下提示,则表示cassandra没有运行:

telnet: Unable to connect to remote host: Connection refused

关于jdbc库,第一条建议是使用DataStax驱动程序(你可以添加一个maven依赖项),第二条建议是...对于jdbc也使用maven。将依赖项添加到maven项目中,然后使用维基上的代码页面
依赖项:
<dependency>
    <groupId>org.apache-extras.cassandra-jdbc</groupId>
    <artifactId>cassandra-jdbc</artifactId>
    <version>1.2.5</version>
</dependency>

谢谢。我已经尝试过了。 - Jay
1
结果证明重启Cassandra解决了问题,不知道为什么,但的确起作用了。 - Jay
你有什么建议,如果Cassandra正在运行,应该检查什么?我正在使用SSH隧道,而且对于9160和9042端口,Telnet都可以正常工作,但是我仍然无法连接,无论是通过Java应用程序还是DataStax DevCenter,都会出现相同的错误(NoHostAvailable)。 - LadyWoodi
1
@LadyWoodi ssh进入服务器,尝试运行cqlsh(它在bin/目录中)。如果连接成功,则表示C*正在运行;如果无法连接,请打开cassandra.yaml文件(在conf/目录中)并检查您的listen_address,然后再次尝试从本地服务器运行./cqlsh listen_address(例如:./cqlsh 192.168.1.100)。 - Lyuben Todorov

0

请确保Cassandra正在运行!:)


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