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, ad eccezione di ASM (Istio) ecert-manager
, dalSecondary-DC2
. Per ulteriori informazioni, consulta Disinstallare il runtime ibrida.apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
- 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_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 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