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é!