2014-06-05 3 views
2

Je suis déconcerté par un problème que j'ai avec mon cluster multi-datacenter cassandra. C'est un tout nouveau groupe de six nœuds (trois dans eu-ouest, trois dans us-west-2). Les groupes de sécurité sont configurés de sorte que chaque nœud puisse communiquer avec l'adresse IP externe des autres. L'adresse d'écoute est définie comme l'adresse IP VPC locale et l'adresse de diffusion est définie sur l'adresse IP publique de chaque nœud.Accord de schéma de Cassandra avec Ec2MultiRegionSnitch

Tout semble OK:

Datacenter: us-west-2 
===================== 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address  Load  Owns (effective) Host ID        Token         Rack 
UN (public ip) 121.3 KB 100.0%   b15c18bf-1689-4308-bbe2-d36d38f7c8ea -9103428429654321414      2b 
UN (public ip) 46.57 KB 100.0%   89378b79-4228-4b44-a3e3-c6d2f3bbd368 -9174198879812166340      2b 
UN (public ip) 46.58 KB 100.0%   4cbd586f-963c-4339-abaa-af313e023abe -9223053993127788404      2b 

Datacenter: eu-west 
=================== 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address  Load  Owns (effective) Host ID        Token         Rack 
UN (public ip) 46.59 KB 100.0%   2aad2d39-0099-4ae3-ae46-a1558b1b657c -9163190464402129696      1c 
UN (public ip) 98.55 KB 100.0%   94748d93-cf56-4cde-8b44-f75d17b41924 -9211541808465956929      1c 
UN (public ip) 84.5 KB 100.0%   3cdeba13-3026-4a1b-a8d1-63eef25049cb -9196529642979836746      1c 

Alors, je crée les keyspaces dont j'ai besoin.

Mais, quand je tente de me connecter mon application Thrift au cluster, je puis l'erreur suivante de Astyanax:

Caused by: com.netflix.astyanax.connectionpool.exceptions.SchemaDisagreementException: 
    SchemaDisagreementException: [host=(internal ip):9160, latency=10002(10007), 
    attempts=1] Can't change schema due to pending schema agreement 

Je suppose que cela est parce que la nouvelle keyspace ne répliquait pas correctement à l'autre nœuds, mais je ne peux pas comprendre pourquoi. Si je cours nodetool describecluster, il me donne cette (en gardant à l'esprit que j'utilise Ec2MultiRegionSnitch, mais pour une raison quelconque cela montre que DynamicEndpointSnitch):

Cluster Information: 
Name: mycluster_multiregion 
Snitch: org.apache.cassandra.locator.DynamicEndpointSnitch 
Partitioner: org.apache.cassandra.dht.Murmur3Partitioner 
Schema versions: 
    UNREACHABLE: [(public IP of this node)] 

    f9de7b22-1486-37c6-8487-801 [(list of other node public IPs)] 

Il est le même sur chaque nœud - il se considère comme injoignable. Ceci est techniquement correct. dans EC2 VPC, il n'est pas possible à un nœud de communiquer avec lui-même en utilisant son adresse IP publique, en raison de NAT. Mais, je ne suis pas sûr si cela provoque mon problème de désaccord de schéma, et si c'est le cas, je ne suis pas certain qu'il existe une solution simple.

Un aperçu apprécié!

Répondre

1

Comme décrit ici http://nsinfra.blogspot.in/2013/06/cassandra-schema-disagreement-problem.html

pouvez-vous essayer d'horloges de synchronisation en utilisant NTP?

AWS docs - Configuration Network Time Protocol (NTP) Network Time Protocol (NTP) est configuré par défaut sur les instances Amazon Linux; Cependant, une instance doit avoir accès à Internet pour que la configuration NTP standard fonctionne. Les procédures de cette section montrent comment vérifier que la configuration NTP par défaut fonctionne correctement. Si votre instance n'a pas accès à Internet, vous devez configurer NTP pour interroger un autre serveur de votre réseau privé afin de conserver l'heure exacte.

Peut être pour EC2 VPC vous devez configurer NTP pour utiliser les serveurs de temps AWS (x.amazon.pool.ntp.org)

Questions connexes