Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Sintomo
Gli utenti osservano dati incoerenti o nessun dato per entità come prodotti API, app, sviluppatori, mappe chiave-valore (KVM) e cache in modo intermittente nell'interfaccia utente (UI) ibrida di Apigee e tramite l'API Management.
Messaggi di errore
In questo scenario non vengono visualizzati messaggi di errore noti.
Cause possibili
| Causa | Descrizione |
|---|---|
| Pod di Cassandra non connessi all'anello | I pod Cassandra di tutti i data center potrebbero non essere connessi all'anello Cassandra comune. |
| L'utilità nodetool repair non è stata eseguita | Il comando nodetool repair potrebbe non essere stato eseguito periodicamente. |
| Problemi di connettività di rete | Potrebbero esserci problemi di connettività di rete tra i pod Cassandra in data center diversi. |
Passaggi comuni per la diagnostica
- Recupera le informazioni su una o più entità per le quali riscontri questo problema, ad esempio
prodotti API, app e così via, utilizzando l'API Management e
verifica se visualizzi risultati diversi quando viene richiamata più volte.
Nella riga di comando, utilizza gli esempi seguenti per ottenere le credenziali di autenticazione
gcloud, impostare le variabili di ambiente ed eseguire i comandi API:Recupera prodotti API:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/apiproducts"
Scarica app:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/apps"
Trovare sviluppatori:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/developers"
Ottenere le mappe chiave-valore (KVM):
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/keyvaluemaps"
Get Caches:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME ENV=ENVIRONMENT_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/caches"
- Se non visualizzi dati o visualizzi dati diversi quando vengono eseguite le richieste dell'API Management riportate sopra, significa che stai riscontrando lo stesso problema osservato nell'UI.
Causa: i pod di Cassandra non sono connessi ai pod di Cassandra di tutti i data center
In un deployment ibrido multiregionale di Apigee, se tutti i pod Cassandra non sono connessi allo stesso anello Cassandra, i dati potrebbero non essere replicati da tutti i pod Cassandra. Di conseguenza, il piano di gestione non riceverà lo stesso set di dati per la stessa query in modo coerente. Per analizzare questo scenario, segui i passaggi riportati di seguito:
Diagnosi
- Elenca i pod Cassandra:
- Esegui questo comando per controllare lo stato di tutti i pod Cassandra in ogni data center.
Su Apigee hybrid versione < 1.4.0:
# check cassandra cluster status kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool status"
Nelle versioni di Apigee Hybrid >= 1.4.0:
# check cassandra cluster status kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw JMXUSER_PASSWORD status"
- Controlla il risultato del comando precedente e verifica se tutti i pod Cassandra in tutti i
data center sono connessi all'anello Cassandra e hanno lo stato Up and Normal (UN).
Output di esempio di un anello Cassandra integro:
kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status" apigee-cassandra-default-0 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-1 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-2 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1
Output di esempio di un anello Cassandra non integro:
kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status" apigee-cassandra-default-0 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 DL 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 DL 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 DL 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-1 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-2 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1
Tieni presente che alcuni pod Cassandra dell'output precedente sono nello stato DL (Down and Leaving). Per saperne di più, consulta nodetool status.
- Se noti pod Cassandra con stato DL (come mostrato nell'output dell'esempio precedente), allora questo è il motivo del problema.
- Quando viene effettuata una richiesta per recuperare le informazioni su qualsiasi entità tramite l'interfaccia utente ibrida o l'API Management, se la richiesta raggiunge uno dei pod Cassandra non funzionanti, non riceverai alcun dato.
# list cassandra pods kubectl -n apigee get pods -l app=apigee-cassandra
Risoluzione
Esegui i passaggi forniti nella sezione seguente e assicurati che i pod Cassandra nel data center problematico siano connessi al data center originale come descritto in Deployment multiregionale su GKE e GKE On-Prem | Apigee.
Causa: la riparazione di nodetool non è stata eseguita
Se il comando nodetool repair non è stato eseguito periodicamente come attività di manutenzione,
esiste la possibilità di dati incoerenti nei pod Cassandra. Per analizzare questo scenario, segui i passaggi riportati di seguito:
Diagnosi
- Crea un pod container client Cassandra
apigee-hybrid-cassandra-clientper il debug.
- Elenca tutti i pod Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Connettiti a uno dei pod Cassandra utilizzando CQLSH:
cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
- Elenco
keyspaces:SELECT * from system_schema.keyspaces;
Output di esempio:
ddl_user@cqlsh> SELECT keyspace_name from system_schema.keyspaces; keyspace_name ----------------------------- system_auth cache_PROJECT_ID_hybrid system_schema kms_PROJECT_ID_hybrid kvm_PROJECT_ID_hybrid rtc_PROJECT_ID_hybrid system_distributed system perses system_traces quota_PROJECT_ID_hybrid (11 rows)
- Identifica
keyspacesdal risultato precedente, elenca ed esegui query su tutte le entità in ogni data center utilizzando CQLSH.Se l'entità incoerente è un prodotto API:
select * from KMS_KEYSPACE.api_product;
Se l'entità incoerente è l'applicazione (
app):select * from KMS_KEYSPACE.app;
Se l'entità incoerente è
developer:select * from KMS_KEYSPACE.developer;
Se l'entità non coerente è la mappa di coppie chiave-valore:
select * from KVM_KEYSPACE.kvm_map_entry;
Se l'entità incoerente è
cache:select * from CACHE_KEYSPACE.cache_map_entry;
- Prendi nota dei conteggi dei record dall'output di ciascuna delle query precedenti.
- Ripeti i passaggi precedenti per ciascuno dei pod Cassandra in tutti i data center.
- Confronta i conteggi dei record ottenuti da tutti i pod Cassandra.
- Identifica i pod Cassandra con dati incoerenti.
Risoluzione
- Elenca i pod Cassandra e connettiti al pod Cassandra specifico che conteneva dati incoerenti:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra # connect to one cassandra pod kubectl -n=apigee exec -it apigee-cassandra-default-0 bash
- Esegui il comando
nodetool repairsu ogni pod Cassandra in ogni data center:Su Apigee hybrid versione < 1.4.0:
nodetool repair
Nelle versioni di Apigee Hybrid >= 1.4.0:
nodetool -u JMX_USERNAME -pw JMX-PASSWORD repair
- Segui di nuovo la sezione Diagnosi e verifica se i dati sono stati replicati in modo coerente in tutti i pod Cassandra.
- Ripeti i passaggi precedenti per tutti i pod Cassandra che contenevano dati incoerenti.
Causa: problemi di connettività di rete
Se si verificano problemi di connettività di rete tra i data center, è possibile che i dati di Cassandra non vengano replicati in modo coerente in tutti i pod Cassandra nell'anello Cassandra. Per analizzare questo scenario, segui questi passaggi:
Diagnosi
- Elenca tutti i pod Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Esegui il seguente comando
curle telnet al primo pod Cassandra nel secondo data center (dc-2) dal primo pod Cassandra nel primo data center (dc-1) utilizzando la porta7001:kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- Se telnet è riuscito, viene visualizzato un output simile al seguente:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * Connected to 10.0.4.10 (10.0.4.10) port 7001 (#0)
- In caso contrario, viene visualizzato un errore simile al seguente:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * connect to 10.0.4.10 port 7001 failed: Connection refused * Failed to connect to 10.0.4.10 port 7001: Connection refused * Closing connection 0 curl: (7) Failed to connect to 10.0.4.10 port 7001: Connection refused
L'errore di connettività dal pod Cassandra in un data center al pod Cassandra in un altro data center indica che deve esserci una restrizione del firewall o qualche tipo di problema di connettività di rete.
Risoluzione
- Se questo deployment ibrido di Apigee si trova su GKE, verifica se sono impostate regole firewall che bloccano il traffico da un data center all'altro e analizza il problema di connettività di rete consultando la panoramica delle regole firewall VPC.
- Se questo deployment ibrido di Apigee si trova su GKE On-Prem, collabora con il team di networking pertinente e analizza il problema di connettività di rete.
Deve raccogliere informazioni diagnostiche
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza clienti Google Cloud:
- L'ID progetto Google Cloud
- Organizzazione Apigee hybrid
- Il file
overrides.yaml, mascherando eventuali informazioni sensibili - Stato del pod Kubernetes in tutti gli spazi dei nomi:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un
cluster-info dumpKubernetes:# 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/*
Riferimenti
- Deployment multiregionale di Apigee Hybrid su GKE e GKE On-Prem
- Documentazione di Kubernetes
- Comando nodetool status di Cassandra