无法连接到cassandra - NoHostAvailableException

use*_*013 18 cassandra datastax-java-driver

我知道有几个线程,NoHostAvailableException但他们根本不提供我的问题的解决方案.

我无法使用Datastax Java Cassandra Driver连接到Cassandra.我收到错误:

com.datastax.driver.core.exceptions.NoHostAvailableException:尝试查询的所有主机都失败了(试过:[/54.221.241.107])

我确信配置是正确的.我在cassandra.yaml中设置了配置:

start_native_transport: true 
# port for the CQL native transport to listen for clients on 
native_transport_port: 9042 
Run Code Online (Sandbox Code Playgroud)

我的Cassandra安装是AWS上EC2实例的标准安装.我已将AWS配置为允许端口9042.

Cassandra在Windows Server 2008 R2上运行,我还在9042上将防火墙配置为入站和出站连接.

我的代码如下所示:

cluster = Cluster.builder()
  .withPort(9042)
  .addContactPoint("54.221.241.107").build();
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办,因为我总是得到这个错误.有什么建议?

pol*_*lve 30

检查你的casssandra.yaml文件.native_transport使用与rpc_address相同的地址绑定.如果它绑定到"54.221.241.107"之外的另一个地址,您将遇到此问题.尝试将其设置为

rpc_address: 0.0.0.0 
Run Code Online (Sandbox Code Playgroud)

或者

rpc_address: 54.221.241.107  
Run Code Online (Sandbox Code Playgroud)

并看看它是否有帮助.请记住,ec2-ips可能会在重新启动时发生变化.

我的猜测是与ec-2的内部ip绑定.如果以这种方式向公众开放数据库,请记住添加一些安全性:-)

  • 我在EC2上遇到了同样的问题,将rpc地址设置为0.0.0.0修复了它. (2认同)

Jay*_*ram 7

改变public IP to private IP.

  • 如果您的cassandra在EC2中,则需要在yaml配置中配置专用IP rpc_address: PRIVATE_IP.

  • 如果您的客户端程序(用于连接cassandra的Java应用程序)也在EC2中,那么您应该在代码中添加专用IP .addContactPoint("PRIVATE_IP").build();.

  • 如果你的cassandra在EC2中并且你的客户端应用程序在EC2之外(意味着你本地网络中的客户端java应用程序),你需要配置private IP in yaml configurationspublic IP in your java app

然后重点是提及native_transport_port: 9042,允许access for port 9042Firewall configurations.我认为你做的这些事情是正确的.并确保您已endpoint_snitch: Ec2Snitch在yaml文件中正确配置了端点小调.我希望你按照这些步骤行事......