web-dev-qa-db-fra.com

Apache Cassandra: Impossible de bavarder avec les graines

J'ai construit le serveur Cassandra 2.0.3, puis je l'exécute. Il commence puis s’arrête avec des messages:

X:\MyProjects\cassandra\Apache-cassandra-2.0.3-src\bin>cassandra.bat >log.txt
Java.lang.RuntimeException: Unable to gossip with any seeds
        at org.Apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.Java:1160)
        at org.Apache.cassandra.service.StorageService.checkForEndpointCollision
(StorageService.Java:416)
        at org.Apache.cassandra.service.StorageService.joinTokenRing(StorageServ
ice.Java:608)
        at org.Apache.cassandra.service.StorageService.initServer(StorageService
.Java:576)
        at org.Apache.cassandra.service.StorageService.initServer(StorageService
.Java:475)
        at org.Apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.ja
va:346)
        at org.Apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon
.Java:461)
        at org.Apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.jav
a:504)

Qu'est-ce que je peux changer pour l'exécuter? 

46
Oleg

J'ai eu un problème similaire avec mon cluster Cassandra v2.0.4 exécutant un seul nœud.

Vérifiez votre cassandra.yaml et assurez-vous que vos valeurs "listen_address" et "seed" correspondent, à l'exception du fait que la valeur de seed nécessite des guillemets.

100
Mark W

Vous pouvez rencontrer ce problème si votre adresse IP privée est différente de celle publique (comme sur AWS). Par exemple, l'hôte pense que c'est "172.31.0.2" lorsqu'il est visible sous "55.70.33.10".

La solution à ce problème est la suivante:

listen_address: 172.31.0.2
broadcast_address: 55.70.33.10
22
Lukasz Kujawa

dans cassandra.yaml

  1. Assurez-vous que votre entrée cluster_name correspond sur tous les nœuds du cluster .__ (vous devrez peut-être supprimer votre stockage si vous avez changé le nom du cluster).

  2. Vérifiez que tous les nœuds peuvent s'interroger

  3. broadcast_rpc_address et listen_address doivent être définis sur l'adresse IP locale (pas sur l'hôte local ou 127.0.0.1)

  4. les semences doivent indiquer l'adresse IP de la ou des semences

7
elvingt

Si vous utilisez AWS et utilisez le Ec2MultiRegionSnitch, vous devez définir les valeurs de départ pour les adresses IP publiques plutôt que pour les adresses IP privées.

5
Sebastian Dahlgren

dans cassandra.yaml, je mets à jour la graine du nom de domaine en adresse IP. et il fonctionne.

2
Richardhe2007

J'ai eu le même problème sur Ubuntu 16.04. Je ne sais pas lequel de ces changements a fonctionné, où XXX.XXX.XXX.XXX est votre adresse IP publique à laquelle vous devez faire face. Vous trouverez ci-dessous une sélection de cassandra.yaml

seed_provider:
    # Addresses of hosts that are deemed contact points. 
    # Cassandra nodes use this list of hosts to find each other and learn
    # the topology of the ring.  You must change this if you are running
    # multiple nodes!
    - class_name: org.Apache.cassandra.locator.SimpleSeedProvider
      parameters:
          # seeds is actually a comma-delimited list of addresses.
          # Ex: "<ip1>,<ip2>,<ip3>"
          - seeds: "XXX.XXX.XXX.XXX"


listen_address: XXX.XXX.XXX.XXX
broadcast_address: XXX.XXX.XXX.XXX
broadcast_rpc_address: XXX.XXX.XXX.XXX
listen_on_broadcast_address: true
start_rpc: true
rpc_address: XXX.XXX.XXX.XXX

Je devais aussi redémarrer ma machine virtuelle pour une raison quelconque. ¯_ (ツ) _/¯

2
bluepoisondartfrog

Pour une configuration rapide d'un seul noeud sur RHEL, j'ai procédé comme suit: Obtenez des informations sur la configuration de votre interface réseau: 

# /sbin/ifconfig -a

Il listera les interfaces et les adresses IP auxquelles ils sont attachés. Généralement, une interface "Ethernet" et un "bouclage local" seront affichés ..__ Obtenez les adresses IP associées. 

Puis éditez conf/cassandra.yaml: 

rpc_address: [Local Loopback address]
broadcast_rpc_address: [Ethernet address]
listen_address: [Local Loopback address]
broadcast_address: [Ethernet address]
listen_on_broadcast_address: true
seed_provider:
    - class_name: org.Apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "[Ethernet address]"

Ensuite, ouvrez les ports appropriés sur le pare-feu Linux, à savoir 9042, 7000 et 7001. Plus d'informations sur l'ouverture de ports sur Linux ici: http://ask.xmodulo.com/open-port-firewall-centos- rhel.html

2
Denno

Cela m'est arrivé parce que dans ma configuration, les paramètres "intial_token" étaient spécifiés (je pense parce que je viens de copier le fichier de configuration à partir d'un autre membre du cluster). Après avoir effacé le répertoire de données, commenté le réglage et redémarré le nœud, cela a bien fonctionné pour moi.

1
philipphoffmann

J'ai vécu cette erreur aujourd'hui ...

Je ne pouvais trouver aucune raison pour l'erreur autre que des problèmes de minutage.

J'ai redémarré plusieurs fois et au bout d'un moment ça colle. On dirait qu'ils s'attendent à une communication bidirectionnelle sur le canal des commérages et si cela ne se produit pas assez rapidement (ce qui me semble très peu de temps), ils laissent tomber la ligne et génèrent cette erreur.

Dans mon cas, je viens de mettre à jour mon logiciel et de redémarrer l'ordinateur. Donc, ce n'était clairement pas un problème de connexion entre les ordinateurs (j'ai des pare-feu et SSL, pour compliquer les choses) et le nœud était déjà connecté ... Donc, l'entrée que j'ai trouvée à cet égard dans datastax ne s'appliquait pas ...

https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-can-connect- to-seed-node

1
Alexis Wilke

Désactiver le pare-feu et SELINUX et réessayer

0
Dharmendra Singh

J'ai eu la même erreur. Il peut y avoir plus d'une solution. J'espère que mon erreur est ce que vous avez fait.

J'avais mon IP localhost pointant sur un nom de domaine (et je l'ai fait pour que le contexte de serveur de mon application Spring Boot soit un nom de domaine tel que www.example.com:8080 au lieu de localhost:8080 et j'avais l'entrée suivante dans mon fichier hosts sur le système Windows).

127.0.0.1 www.example.com

Pendant que mon fichier batch de cassandra cherchait localhost, il ne l’avait pas trouvée. J'ai donc fait une autre entrée pour localhost dans mon fichier hosts en tant que:

127.0.0.1  localhost

127.0.0.1  www.example.com

Après l’avoir ajouté, j’ai ouvert la nouvelle commande Invite, lancé cassandra batch à partir du répertoire cassandra bin, puis cela a fonctionné.

0
Ashish

Dans notre cas, ssl a été activé et la configuration de cassandra.yaml est satisfaisante, comme indiqué dans les commentaires ci-dessus. Nous avons ensuite activé le débogage SSL en ajoutant ci-dessous le paramètre jvm dans cassandra-env.sh -Djavax.net.debug = ssl: poignée de main

Après avoir redémarré le noeud, nous avons remarqué ci-dessous dans le fichier journal Cassandra

MessagingService-Outgoing-geo2_Host/xx.xx.xx.xx, Exception sous en attente de la fermeture javax.net.ssl.SSLHandshakeException: Fatal reçu alerte: certificate_unknown

Après une enquête plus approfondie sur les journaux de débogage ssl, nous avons appris que le certificat n’était pas valide. Après avoir résolu ce problème, le nœud a pu rejoindre le cluster.

0
Laxmikant