Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.
Symptôme
Les pods Cassandra ne démarrent pas dans l'une des régions d'une configuration Apigee hybrid multirégionale. Lors de l'application du fichier overrides.yaml
, les pods Cassandra ne démarrent pas correctement.
Messages d'erreur
- Le message d'erreur suivant s'affiche dans les journaux du pod Cassandra :
Exception (java.lang.RuntimeException) encountered during startup: A node with address 10.52.18.40 already exists, cancelling join. use cassandra.replace_addrees if you want to replace this node.
L'avertissement suivant peut s'afficher dans l'état du pod Cassandra :
Causes possibles
Ce problème est généralement observé dans le scénario suivant :
- Le cluster d'exécution Apigee est supprimé dans l'une des régions.
- Une tentative de réinstallation du cluster d'exécution Apigee est effectuée dans la région avec la configuration de l'hôte source Cassandra dans le fichier
overrides.yaml
, comme décrit dans la section Déploiement multirégional sur GKE et GKE On-Prem - La suppression du cluster d'exécution Apigee ne supprime pas les références dans le cluster Cassandra. Ainsi, les références obsolètes des pods Cassandra du cluster supprimé seront conservées. Par conséquent, lorsque vous essayez de réinstaller le cluster d'exécution Apigee dans la région secondaire, les pods Cassandra indiquent que certaines adresses IP existent déjà. En effet, les adresses IP peuvent être attribuées à partir du même sous-réseau que celui utilisé précédemment.
Cause | Description |
---|---|
Références obsolètes aux pods de régions secondaires supprimés dans le cluster Cassandra | La suppression du cluster d'exécution Apigee dans la région secondaire n'entraîne pas la suppression des références aux adresses IP des pods Cassandra dans la région secondaire. |
Cause : références obsolètes aux pods de régions secondaires supprimés dans le cluster Cassandra
Diagnostic
- Le message d'erreur dans les journaux du pod Cassandra
A node with address 10.52.18.40 already exists
indique qu'il existe une référence obsolète à l'un des pods Cassandra des régions secondaires avec l'adresse IP10.52.18.40
. Pour le valider, exécutez la commandenodetool status
dans la région principale.Exemple de résultat :
L'exemple ci-dessus montre que l'adresse IP
10.52.18.40
associée aux pods Cassandra de la région secondaire est toujours répertoriée dans le résultat. - Si le résultat contient des références obsolètes aux pods Cassandra dans la région secondaire, cela signifie que la région secondaire a été supprimée, mais que les adresses IP des pods Cassandra de la région secondaire ne sont pas supprimées.
Solution
Procédez comme suit pour supprimer les références obsolètes des pods Cassandra du cluster supprimé :
- Connectez-vous au conteneur et connectez-vous à l'interface de ligne de commande Cassandra en suivant les étapes décrites dans la section Créer le conteneur client.
- Une fois que vous êtes connecté au conteneur et connecté à l'interface Cassandra
cqlsh
, exécutez la requête SQL suivante pour répertorier les définitionskeyspace
actuelles :select * from system_schema.keyspaces;
Exemple de résultat montrant les espaces de clés actuels :
Dans le résultat suivant,
Primary-DC1
fait référence à la région principale etSecondary-DC2
à la région secondaire.bash-4.4# cqlsh 10.50.112.194 -u admin_user -p ADMIN.PASSWORD --ssl Connected to apigeecluster at 10.50.112.194:9042. [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. admin_user@cqlsh> Select * from system_schema.keyspaces; keyspace_name | durable_writes | replication -------------------------------------+----------------+-------------------------------------------------------------------------------------------------- system_auth | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kvm_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kms_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} system_distributed | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} cache_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} rtc_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} quota_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_traces | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} (11 rows)
Comme vous pouvez le constater,
keyspaces
fait référence à la fois àPrimary-DC1
et àSecondary-DC2
, même si le cluster d'exécution Apigee a été supprimé dans la région secondaire.Les références obsolètes à
Secondary-DC2
doivent être supprimées de chacune des définitionskeyspace
. - Avant de supprimer les références obsolètes dans les définitions
keyspace
, utilisez la commande suivante pour supprimer l'intégralité de l'installation Apigee hybrid, à l'exception d'ASM (Istio) et decert-manager
à partir deSecondary-DC2
. Pour en savoir plus, consultez la section Désinstaller l'environnement d'exécution hybride.apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
- Supprimez les références obsolètes à
Secondary-DC2
de chacun deskeyspaces
en modifiant la définitionkeyspace
.ALTER KEYSPACE system_auth WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kvm_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kms_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_distributed WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE perses WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE cache_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE rtc_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE quota_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_traces WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
- Vérifiez que les références obsolètes à la région
Secondary-DC2
ont été supprimées de tous leskeyspaces
en exécutant la commande suivante :select * from system_schema.keyspaces;
- Connectez-vous à un pod Cassandra de
Primary-DC1
et supprimez les références aux UUID de tous les pods CassandraSecondary-DC2
. Les UUID peuvent être obtenus à partir de la commandenodetool status
comme décrit précédemment dans la section Diagnostic.kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash nodetool -u admin_user -pw ADMIN.PASSWORD removenode UUID_OF_CASSANDRA_POD_IN_SECONDARY_DC2
- Vérifiez qu'aucun pod Cassandra de
Secondary-DC2
n'est présent en exécutant à nouveau la commandenodetool status
. - Installez le cluster d'exécution Apigee dans la région secondaire (
Secondary-DC2
) en suivant la procédure décrite dans la section Déploiement multirégional sur GKE et GKE On-Prem.
Vous devez collecter des informations de diagnostic
Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez Google Cloud Customer Care :
- L'ID de projet Google Cloud
- Nom de l'organisation Apigee Hybrid
- Fichiers
overrides.yaml
des régions principale et secondaire, masquant les informations sensibles - État du pod Kubernetes dans tous les espaces de noms des régions principale et secondaire :
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un vidage Kubernetes
cluster-info
provenant des régions principale et secondaire :# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
- Le résultat des commandes
nodetool
ci-dessous, provenant de la région principale.export u=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.user}' | base64 -d` export pw=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.password}' | base64 -d` kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw info 2>&1 | tee /tmp/k_nodetool_info_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw describecluster 2>&1 | tee /tmp/k_nodetool_describecluster_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw failuredetector 2>&1 | tee /tmp/k_nodetool_failuredetector_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw status 2>&1 | tee /tmp/k_nodetool_status_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gossipinfo 2>&1 | tee /tmp/k_nodetool_gossipinfo_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw netstats 2>&1 | tee /tmp/k_nodetool_netstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw proxyhistograms 2>&1 | tee /tmp/k_nodetool_proxyhistograms_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw tpstats 2>&1 | tee /tmp/k_nodetool_tpstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gcstats 2>&1 | tee /tmp/k_nodetool_gcstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw version 2>&1 | tee /tmp/k_nodetool_version_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw ring 2>&1 | tee /tmp/k_nodetool_ring_$(date +%Y.%m.%d_%H.%M.%S).txt
Références
- Déploiement multirégional Apigee Hybrid sur GKE et GKE On-Prem
- Documentation Kubernetes
- Commande Cassandra
nodetool status