web-dev-qa-db-fra.com

Impossible de se connecter à cassandra - NoHostAvailableException

Je sais qu'il y a plusieurs discussions sur la NoHostAvailableException mais elles ne fournissent tout simplement pas de solution à mon problème.

Je ne parviens pas à me connecter à Cassandra avec le pilote Datastax Java Cassandra. Je reçois l'erreur:

com.datastax.driver.core.exceptions.NoHostAvailableException: Tous Hôte (s) essayé (s) pour la requête ayant échoué (essayé: [/54.221.241.107])

Je suis sûr que la configuration est correcte. J'ai défini la configuration dans cassandra.yaml:

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

Mon installation Cassandra est une installation standard sur une instance EC2 sur AWS. J'ai configuré AWS pour autoriser le port 9042.

Cassandra s'exécute sur Windows Server 2008 R2 et j'ai également configuré le pare-feu sur une connexion entrante et sortante sur 9042.

Mon code ressemble à ceci:

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

Je ne sais plus quoi faire car j'ai toujours cette erreur. Aucune suggestion?

17
user2280013

Vérifiez votre fichier casssandra.yaml. Native_transport utilise la même adresse que l'attribut rpc_address. S'il est lié à une autre adresse que "54.221.241.107", vous obtiendrez ce problème. Essayez de le régler sur 

rpc_address: 0.0.0.0 

ou pour

rpc_address: 54.221.241.107  

et voir si ça aide. Gardez à l'esprit que ec2-ips peut changer au redémarrage.

Je suppose que cela est lié à l'ip interne de l'ec-2. Et n'oubliez pas d'ajouter une certaine sécurité si vous ouvrez votre base de données au public de cette façon :-)

28
polve

Changerpublic IP to private IP

  • Si votre cassandra est dans EC2, vous devez configurer une adresse IP privée dans yaml Configurationsrpc_address: PRIVATE_IP

  • Si votre programme client (application Java utilisée pour connecter cassandra) est également dans EC2, vous devez ajouter une adresse IP privée dans votre code.addContactPoint("PRIVATE_IP").build();.

  • Si votre cassandra est dans EC2 et votre application cliente dans EC2 (signifie que l'application client Java de votre réseau local), vous devez configurerprivate IP in yaml configurationsetpublic IP in your Java app

Ensuite, le point important est de mentionnernative_transport_port: 9042, autoriseraccess for port 9042etFirewall configurations. Je pense que ces choses vous avez fait correctement. Et assurez-vous également que vous avez correctement configuré votre point de terminaison snitchendpoint_snitch: Ec2Snitchdans votre fichier yaml. J'espère que cela fonctionnera si vous suivez ces étapes ....

7
Jaya Ananthram

Je suis également tombé sur cette question récemment. Mon environnement était différent et la raison était également différente . Nous avons utilisé SpringBoot 1.5.3.RELEASE comme bibliothèque parente et Pilote Datastax cassandra version 3.3.0:

        <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 bibliothèque Netty héritée de POM parent de SpringBoot et Datastax s'est disputée. Après avoir exclu Netty, l'erreur est partie.

1
blandger

Accéder à Cassandra à l’aide du pilote Java dépend en grande partie de la version du pilote et de ses dépendances. La dernière chose qui a fonctionné pour moi a été de prendre les lib (jars) fournies avec le téléchargement du serveur. Dans mon cas c'était des fenêtres. Mais je suis sûr que les billes tar Linux auront également le pilote et les dépendances en eux. prenez les fichiers jar livrés lors du téléchargement du serveur et utilisez-les dans le chemin d'accès aux classes de votre client Java au lieu de télécharger les pilotes séparément d'Internet

0
Vahees

Avait le même problème.Later a découvert que la version du pilote et la version de CQL n'étaient pas compatibles.Obtenez le dernier pilote 3.0 selon le tableau de compatibilité

http://www.datastax.com/dev/blog/Java-driver-2-1-2-native-protocol-v3

0
Darshan Shah