Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza la documentazione di
Apigee Edge.
Sintomo
I pod Cassandra non si avviano in una delle regioni in una configurazione ibrida Apigee in più regioni. Quando applichi il file overrides.yaml
, i pod di Cassandra non vengono avviati correttamente.
Messaggi di errore
- Nei log dei pod di Cassandra osserverai il seguente messaggio di errore:
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.
Nello stato del pod Cassandra potresti osservare il seguente avviso:
Cause possibili
Questo problema si verifica solitamente nel seguente scenario:
- Il cluster di runtime Apigee viene eliminato in una delle regioni.
- Viene effettuato un tentativo di reinstallare il cluster di runtime Apigee nella regione con la configurazione dell'host di origine Cassandra nel file
overrides.yaml
, come descritto in Deployment su più regioni su GKE e GKE On-Prem. - L'eliminazione del cluster di runtime Apigee non rimuove i riferimenti nel cluster Cassandra. Di conseguenza, verranno conservati i riferimenti inattivi dei pod Cassandra nel cluster eliminato. Per questo motivo, quando tenti di reinstallare il cluster di runtime Apigee nella regione secondaria, i pod Cassandra si lamentano dell'esistenza di determinati indirizzi IP. Questo perché gli indirizzi IP possono essere assegnati dalla stessa subnet utilizzata in precedenza.
Causa | Descrizione |
---|---|
Riferimenti inattivi ai pod delle regioni secondarie eliminati nel cluster Cassandra | L'eliminazione del cluster di runtime Apigee nella regione secondaria non rimuove i riferimenti agli indirizzi IP dei pod Cassandra nella regione secondaria. |
Causa: riferimenti inattivi ai pod delle regioni secondarie eliminati nel cluster Cassandra
Diagnosi
- Il messaggio di errore nei log del pod Cassandra
A node with address 10.52.18.40 already exists
indica che esiste un riferimento inattivo a uno dei pod Cassandra della regione secondaria con indirizzo IP10.52.18.40
. Per convalidarlo, esegui il comandonodetool status
nella regione principale.Esempio di output:
L'esempio precedente mostra che l'indirizzo IP
10.52.18.40
associato ai pod Cassandra della regione secondaria è ancora elencato nell'output. - Se l'output contiene i riferimenti inattivi ai pod Cassandra nella regione secondaria, indica che la regione secondaria è stata eliminata, ma gli indirizzi IP dei pod Cassandra nella regione secondaria non vengono rimossi.
Risoluzione
Esegui questi passaggi per rimuovere i riferimenti inattivi dei pod Cassandra del cluster eliminato:
- Accedi al container e connettiti all'interfaccia a riga di comando di Cassandra seguendo i passaggi descritti in Creare il container client.
- Dopo aver eseguito l'accesso al container e stabilito la connessione all'interfaccia
cqlsh
di Cassandra, esegui questa query SQL per elencare le definizioni attuali dikeyspace
:select * from system_schema.keyspaces;
Esempio di output che mostra gli spazi delle chiavi attuali:
Nell'output seguente,
Primary-DC1
si riferisce alla regione principale eSecondary-DC2
alla regione secondaria.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)
Come puoi vedere,
keyspaces
si riferisce sia aPrimary-DC1
che aSecondary-DC2
, anche se il cluster di runtime Apigee è stato eliminato nella regione secondaria.I riferimenti inattivi a
Secondary-DC2
devono essere eliminati da ciascuna definizione dikeyspace
. - Prima di eliminare i riferimenti inattivi nelle definizioni di
keyspace
, utilizza il comando seguente per eliminare l'intera installazione ibrida di Apigee, tranne ASM (Istio) ecert-manager
daSecondary-DC2
. Per maggiori informazioni, consulta Disinstallare il runtime ibrido.apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
- Rimuovi i riferimenti inattivi a
Secondary-DC2
da ogni elementokeyspaces
modificando la definizione dikeyspace
.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'};
- Verifica che i riferimenti inattivi alla regione
Secondary-DC2
siano stati rimossi da tutti ikeyspaces
eseguendo questo comando:select * from system_schema.keyspaces;
- Accedi a un pod Cassandra di
Primary-DC1
e rimuovi i riferimenti agli UUID di tutti i pod Cassandra diSecondary-DC2
. Gli UUID possono essere ottenuti dal comandonodetool status
come descritto in precedenza in Diagnostica.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
- Verifica che non siano presenti pod Cassandra di
Secondary-DC2
eseguendo di nuovo il comandonodetool status
. - Installa il cluster di runtime Apigee nella regione secondaria (
Secondary-DC2
) seguendo i passaggi in Deployment in più regioni su GKE e GKE On-Prem.
Raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza clienti Google Cloud:
- L'ID del progetto Google Cloud
- Il nome dell'organizzazione Apigee ibrida
- I file
overrides.yaml
provenienti sia dalla regione principale sia da quella secondaria, mascherando le informazioni sensibili - Stato dei pod Kubernetes in tutti gli spazi dei nomi delle regioni primarie e secondarie:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un dump di
cluster-info
di Kubernetes dalla regione principale e secondaria:# 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/*
- L'output dei comandi
nodetool
seguenti dalla regione 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
Riferimenti
- Apigee ibrido Deployment multiregionale su GKE e GKE On-Prem
- Documentazione di Kubernetes
-
Comando
nodetool status
Cassandra