cassandra datastax-java-driver

apache cassandra



No se puede conectar a cassandra-NoHostAvailableException (5)

Sé que hay varios subprocesos sobre la NoHostAvailableException pero simplemente no proporcionan una solución a mi problema.

No puedo conectarme a Cassandra con el controlador Datastax Java Cassandra. Me sale el error:

com.datastax.driver.core.exceptions.NoHostAvailableException: Todos los hosts intentaron realizar una consulta (intentó: [/54.221.241.107])

Estoy seguro de que la configuración es correcta. He configurado la configuración en cassandra.yaml:

start_native_transport: true # port for the CQL native transport to listen for clients on native_transport_port: 9042

Mi instalación de Cassandra es una instalación estándar en una instancia de EC2 en AWS. He configurado AWS para permitir el puerto 9042.

Cassandra se ejecuta en Windows Server 2008 R2 y también configuré el firewall para la conexión entrante y saliente en 9042.

Mi código se parece a lo siguiente:

cluster = Cluster.builder() .withPort(9042) .addContactPoint("54.221.241.107").build();

Ya no sé qué hacer ya que siempre recibo este error. ¿Alguna sugerencia?


Cambiar public IP to private IP .

  • Si su cassandra está en EC2, necesita configurar una IP privada en las configuraciones rpc_address: PRIVATE_IP .

  • Si su programa cliente (la aplicación java utilizada para conectar cassandra) también está en EC2, debe agregar una IP privada en su código .addContactPoint("PRIVATE_IP").build(); .

  • Si su cassandra está en EC2 y su aplicación cliente está fuera de EC2 (significa aplicación java cliente en su red local), necesita configurar private IP in yaml configurations e public IP in your java app

Luego, un punto importante es mencionar native_transport_port: 9042 , permitir el access for port 9042 y las Firewall configurations . Creo que estas cosas las hiciste correctamente. Y también asegúrese de haber configurado correctamente su punto final snitch endpoint_snitch: Ec2Snitch en su archivo yaml. Espero que funcione si sigues estos pasos ...


El acceso a Cassandra utilizando el controlador java depende en gran medida de la versión del controlador y las dependencias del controlador. Lo último que funcionó para mí fue tomar las lib (jarras) que se incluyen en la descarga del servidor. En mi caso eran las ventanas. Pero estoy seguro de que las bolas de alquitrán de Linux también tendrán el controlador y las dependencias en ellas. tome los frascos enviados en la descarga del servidor y utilícelos en el classpath de su cliente Java en lugar de descargar los controladores por separado de Internet


Revise su archivo casssandra.yaml. Native_transport utiliza el mismo enlace de dirección que rpc_address. Si está vinculado a otra dirección que no sea "54.221.241.107", obtendría este problema. Intenta configurarlo para

rpc_address: 0.0.0.0

o para

rpc_address: 54.221.241.107

y ver si ayuda. Tenga en cuenta que ec2-ips puede cambiar en los reinicios.

Mi conjetura es que está vinculado a la ip interna de la ec-2. Y recuerde agregar algo de seguridad si está abriendo su base de datos al público de esta manera :-)


También me topé con ese tema recientemente. Mi entorno era diferente y la razón también era diferente. Utilizamos SpringBoot 1.5.3.RELEASE como biblioteca principal y la versión 3.3.0 del controlador Cassandra de Datastax :

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> ............ <dependencies> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.3.0</version> <exclusions> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-handler</artifactId> </exclusion> </exclusions> </dependency> .......

La biblioteca Netty heredada del POM principal de SpringBoot y Datastax se ha enfrentado. Después de excluir a Netty el error desapareció.