Pod di Cassandra non avviati nell'area geografica secondaria

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza Documentazione di Apigee Edge.

Sintomo

I pod Cassandra non si avviano in una delle regioni in una configurazione ibrida Apigee in più regioni. Quando applicando il file overrides.yaml, i pod Cassandra non vengono avviati correttamente.

Messaggi di errore

  1. 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.
    
  2. Nello stato del pod Cassandra potresti osservare il seguente avviso:

Cause possibili

Questo problema si verifica solitamente nel seguente scenario:

  1. Il cluster di runtime Apigee viene eliminato in una delle regioni.
  2. Viene effettuato un tentativo di reinstallare il cluster di runtime Apigee nella regione con Cassandra configurazione host di origine nel file overrides.yaml, come descritto in Più regioni il deployment su GKE e GKE On-Prem.
  3. L'eliminazione del cluster di runtime Apigee non rimuove i riferimenti in Cassandra in un cluster Kubernetes. Pertanto, i riferimenti inattivi dei pod Cassandra nel cluster eliminato verranno vengono mantenuti. Per questo motivo, quando provi a reinstallare il cluster di runtime Apigee regione secondaria, i pod Cassandra lamentano l'esistenza di determinati indirizzi IP. Questo è che 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 il riferimenti agli indirizzi IP dei pod Cassandra nella regione secondaria.

Causa: riferimenti inattivi ai pod delle regioni secondarie eliminati nel cluster Cassandra

Diagnosi

  1. 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 una delle regioni secondarie di Cassandra con indirizzo IP 10.52.18.40. Per confermare, esegui il comando nodetool status nella regione principale.

    Esempio di output:

    L'esempio precedente mostra che l'indirizzo IP 10.52.18.40 associato a I pod Cassandra della regione secondaria sono ancora elencati nell'output.

  2. Se l'output contiene i riferimenti inattivi ai pod Cassandra nella regione secondaria, indica che la regione secondaria è stata eliminata, ma gli indirizzi IP di Cassandra i pod nella regione secondaria non vengono rimossi.

Risoluzione

Esegui questi passaggi per rimuovere i riferimenti inattivi dei pod Cassandra dell'account eliminato cluster:

  1. Accedi al container e connettiti all'interfaccia a riga di comando di Cassandra seguendo i passaggi in Creare il contenitore client.
  2. Dopo aver eseguito l'accesso al container e connesso a Cassandra cqlsh esegui questa query SQL per elencare le definizioni attuali di keyspace:
    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 e Secondary-DC2 si riferisce 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 a Primary-DC1 e Secondary-DC2, anche se il cluster di runtime Apigee è stato eliminato regione secondaria.

    I riferimenti inattivi a Secondary-DC2 devono essere eliminati da ogni Definizioni di keyspace.

  3. Prima di eliminare i riferimenti inattivi nelle definizioni di keyspace, utilizza la classe il seguente comando per eliminare l'intera installazione ibrida di Apigee tranne ASM (Istio) cert-manager da Secondary-DC2. Per ulteriori informazioni, consulta Disinstalla il runtime ibrido.
    apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
    
  4. Rimuovi i riferimenti inattivi a Secondary-DC2 da ciascuno dei keyspaces modificando la definizione di keyspace.
    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'};
    
  5. Verifica che i riferimenti inattivi alla regione Secondary-DC2 siano stati rimossa da tutti i keyspaces eseguendo questo comando:
    select * from system_schema.keyspaces;
    
  6. Accedi a un pod Cassandra di Primary-DC1 e rimuovi i riferimenti a UUID di tutti i pod Cassandra di Secondary-DC2. È possibile ottenere gli UUID dal comando nodetool status come descritto in precedenza in Diagnosi.
    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
    
  7. Esegui l'operazione per verificare che non siano presenti pod Cassandra di Secondary-DC2 il comando nodetool status.
  8. Installa il cluster di runtime Apigee nella regione secondaria (Secondary-DC2) seguendo la procedura 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 i seguenti dati informazioni di diagnostica e contatta l'assistenza clienti Google Cloud:

  1. ID del progetto Google Cloud
  2. Il nome dell'organizzazione Apigee ibrida
  3. I file overrides.yaml provenienti sia dalla regione principale sia da quella secondaria mascheramento delle informazioni sensibili
  4. Stato dei pod Kubernetes in tutti gli spazi dei nomi dei pod principali e secondari regioni:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
    
  5. Un dump 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/*
    
  6. 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