Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Sintomo
I pod Cassandra non riescono ad avviarsi in una delle regioni in una configurazione ibrida Apigee multi-regione. Quando si applica il file overrides.yaml
, i pod Cassandra non si avviano correttamente.
Messaggi di errore
- Nei log del pod Cassandra vedrai 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.
Potresti notare il seguente avviso nello stato del pod Cassandra:
Cause possibili
Questo problema si verifica in genere nel seguente scenario:
- Il cluster di runtime Apigee viene eliminato in una delle regioni.
- Viene tentato di reinstallare il cluster di runtime Apigee nella regione con la configurazione dell'host seed Cassandra nel file
overrides.yaml
come descritto in Deployment in piรน regioni su GKE e GKE on-prem. - L'eliminazione del cluster di runtime Apigee non rimuove i riferimenti nel cluster Cassandra. Pertanto, i riferimenti obsoleti dei pod Cassandra nel cluster eliminato verranno conservati. Per questo motivo, quando provi a reinstallare il cluster di runtime Apigee nella regione secondaria, i pod Cassandra segnalano che alcuni indirizzi IP esistono giร . Questo accade perchรฉ gli indirizzi IP potrebbero essere assegnati dalla stessa subnet utilizzata in precedenza.
Causa | Descrizione |
---|---|
Riferimenti non aggiornati ai pod della regione secondaria 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 non aggiornati ai pod della regione secondaria eliminati nel cluster Cassandra
Diagnosi
- Il messaggio di errore nei log dei pod Cassandra
A node with address 10.52.18.40 already exists
indica che esiste un riferimento non aggiornato a uno dei pod Cassandra della regione secondaria con l'indirizzo IP10.52.18.40
. Verificalo eseguendo il comandonodetool status
nella regione principale.Esempio di output:
L'esempio riportato sopra mostra che l'indirizzo IP
10.52.18.40
associato ai pod Cassandra della regione secondaria รจ ancora elencato nell'output. - Se l'output contiene riferimenti non aggiornati ai pod Cassandra nella regione secondaria, indica che la regione secondaria รจ stata eliminata, ma gli indirizzi IP dei pod Cassandra nella regione secondaria non sono stati rimossi.
Risoluzione
Per rimuovere i riferimenti non aggiornati dei pod Cassandra del cluster eliminato:
- Accedi al contenitore e connettiti all'interfaccia a riga di comando di Cassandra seguendo i passaggi descritti in Creare il contenitore client.
- Dopo aver eseguito l'accesso al contenitore e aver eseguito la connessione all'interfaccia
cqlsh
Cassandra, esegui la seguente query SQL per elencare le definizionikeyspace
correnti:select * from system_schema.keyspaces;
Output di esempio che mostra gli spazi chiavi correnti:
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, i valori
keyspaces
fanno riferimento sia aPrimary-DC1
che aSecondary-DC2
, anche se il cluster di runtime Apigee รจ stato eliminato nella regione secondaria.I riferimenti obsoleti a
Secondary-DC2
devono essere eliminati da ciascuna delle definizioni dikeyspace
. - Prima di eliminare i riferimenti non aggiornati nelle definizioni di
keyspace
, utilizza il seguente comando per eliminare l'intera installazione ibrida di Apigee tranne ASM (Istio) ecert-manager
daSecondary-DC2
. Per ulteriori informazioni, consulta Disinstallare il runtime ibrida.helm uninstall -n APIGEE_NAMESPACE ENV_GROUP_RELEASE_NAME ENV_RELEASE_NAME $ORG_NAME ingress-manager telemetry redis datastore
Inoltre, disinstalla
apigee-operator
:helm uninstall -n APIGEE_NAMESPACE operator
- Rimuovi i riferimenti obsoleti a
Secondary-DC2
da ciascuno deikeyspaces
modificando la definizione dikeyspace
.ALTER KEYSPACE system_auth WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kvm_ORG_NAME_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kms_ORG_NAME_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_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE rtc_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE quota_ORG_NAME_apigee_hybrid_ENV_NAME_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 obsoleti alla regione
Secondary-DC2
siano stati rimossi da tutti ikeyspaces
eseguendo il seguente 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 descritti in Deployment in piรน regioni su GKE e GKE On-Prem.
Deve raccogliere informazioni di diagnostica
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e poi contatta l'assistenza clienti Google Cloud:
- L'ID progetto Google Cloud
- Il nome dell'organizzazione Apigee hybrid
- I file
overrides.yaml
sia della regione principale che di quella secondaria, mascherando eventuali informazioni sensibili - Stato dei pod Kubernetes in tutti gli spazi dei nomi delle regioni sia principali che secondarie:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un dump di kubernetes
cluster-info
sia dalle regioni principali che secondarie:# 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
riportati di seguito 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 hybrid Deployment in piรน regioni su GKE e GKE On-Prem
- Documentazione di Kubernetes
-
Comando
nodetool status
Cassandra