Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste una documentazione
di Apigee Edge equivalente per questo argomento.
Sintomo
Durante il ripristino di Cassandra in Apigee Hybrid, potresti riscontrare errori nei log di ripristino.
Messaggio di errore
Nei log viene visualizzato uno dei seguenti messaggi:
java.net.ConnectException: Connection timed out (Connection timed out)
/tmp/tmp/schema.cql:662:OperationTimedOut: errors={'10.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.0.0.1
/tmp/tmp/schema.cql:6409:AlreadyExists: Table 'kvm_myorg.kvm_map_keys_descriptor' already exists
Cause possibili
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Timeout della connessione |
Questo errore è un errore di connettività tra i pod apigee-cassandra-restore e i pod apigee-cassandra-default-*.
|
Apigee hybrid |
| Timeout operazione | Questo errore si verifica se il ripristino scade dopo più di 15 minuti. | Apigee hybrid |
| Esiste già | Questo messaggio di errore non è correlato alla causa del problema ed è il risultato di un'operazione di riprova di un job di ripristino. | Apigee hybrid |
Causa: timeout della connessione
Il seguente errore è un errore di connettività tra
i pod apigee-cassandra-restore e
i pod apigee-cassandra-default-*:
java.net.ConnectException: Connection timed out (Connection timed out)
Diagnosi
-
Se la rete host non è raggiungibile dalla rete del pod, assicurati che
hostNetworksia impostato sufalseincassandrainoverrides.yamlcome mostrato in Ripristino di una regione da un backup. -
Per testare la connettività, accedi al pod
apigee-martoapigee-runtime, che si trova nella stessa rete del jobapigee-cassandra-restore. Puoi anche utilizzare qualsiasi altro pod nella rete di pod.-
Ottieni il nome del pod
apigee-mart:kubectl -n apigee get po --selector=app=apigee-mart --no-headers -o custom-columns=":metadata.name"
-
Esegui una sessione bash all'interno del pod mart:
kubectl exec -it MART_POD_NAME -n apigee -- bash
Sostituisci MART_POD_NAME con il nome del pod MART. Ad esempio,
apigee-mart-myorg--9a8228a-191-t0xh1-qz5fl. -
Esegui i test di connettività rispetto alle
porte Cassandra:
curl -v -m 5 telnet://apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local:9042
curl -v -m 5 telnet://apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local:7001
Se nell'output viene visualizzato un errore
Connection timed out, significa che hai problemi di connettività. Se invece visualizzi il messaggioConnected to, significa che la connessione è riuscita e devi premere Ctrl + C per chiuderla e procedere. -
Ottieni il nome del pod
Risoluzione
Assicurati che l'impostazione HostNetwork sia impostata su
false nel file overrides.yaml utilizzato per il ripristino,
e
ripeti la procedura di ripristino. Se l'impostazione è già impostata su
false, ma visualizzi errori di connettività, assicurati che i pod Cassandra
siano attivi ed esegui il comando seguente:
kubectl get pods -n apigee -l app=apigee-cassandra
L'output dovrebbe essere simile a quello dell'esempio seguente:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 14m apigee-cassandra-default-1 1/1 Running 0 13m apigee-cassandra-default-2 1/1 Running 0 11m exampleuser@example hybrid-files %
Causa: timeout dell'operazione
Si verifica il seguente errore se il ripristino scade dopo più di 15 minuti. L'errore indica problemi di I/O, ad esempio l'archiviazione e la rete non sono in grado di trasmettere in tempo i contenuti non compressi del backup.
/tmp/tmp/schema.cql:662:OperationTimedOut: errors={'10.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.0.0.1
Diagnosi
-
Controlla i log di
apigee-cassandra-default-0per annotare il timestamp dell'inizio del ripristino:kubectl logs apigee-cassandra-default-0 -n apigee | grep 'MigrationManager.java' | head -n 1
-
Confronta il timestamp con l'ultimo log di creazione della tabella:
kubectl logs apigee-cassandra-default-0 -n apigee | grep 'Create new table' | tail -n 1
I risultati di questo confronto dovrebbero mostrare che il pod Cassandra era ancora in fase di creazione delle tabelle dopo il superamento del timeout.
-
Testa la larghezza di banda di archiviazione con i seguenti comandi:
kubectl -n apigee exec -it apigee-cassandra-default-0 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
kubectl -n apigee exec -it apigee-cassandra-default-1 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
kubectl -n apigee exec -it apigee-cassandra-default-2 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
Se la velocità di scrittura è inferiore a 100 M/s, potrebbe indicare la mancanza di una StorageClass (SSD) appropriata.
-
Testa la larghezza di banda di rete:
-
Esegui
netcatsul pod Cassandra per rimanere in ascolto sulla porta:kubectl -n apigee exec -it apigee-cassandra-default-0 -- bash -c 'nc -l -p 3456 > /dev/null'
-
In una sessione shell separata, ottieni il nome del pod
apigee-mart:kubectl -n apigee get po --selector=app=apigee-mart --no-headers -o custom-columns=":metadata.name"
-
Esegui una sessione bash all'interno del pod
apigee-mart. Puoi anche utilizzare qualsiasi altro pod nella rete di pod:kubectl exec -it MART_POD_NAME -n apigee -- bash
Sostituisci MART_POD_NAME con il nome del pod MART. Ad esempio,
apigee-mart-myorg--9a8228a-191-t0xh1-qz5fl. -
Esegui un test della larghezza di banda di rete sul pod Cassandra che sta ancora eseguendo
netcat:dd if=/dev/zero bs=50M count=1 | nc apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local 3456
Puoi ripetere la procedura per gli altri pod Cassandra. Se la velocità risultante è inferiore a 10 M/s, è molto probabile che la larghezza di banda della rete sia la causa del problema.
-
Risoluzione
Una volta confermata la bassa velocità di I/O con i passaggi precedenti, assicurati che il cluster rispetti i requisiti minimi di rete e archiviazione. Dopodiché, esegui di nuovo il test della larghezza di banda.
Causa: già esistente
Diagnosi
Viene visualizzato un errore simile al seguente:
/tmp/tmp/schema.cql:6409:AlreadyExists: Table 'kvm_myorg.kvm_map_keys_descriptor' already exists
Risoluzione
Questo messaggio di errore non è correlato alla causa del problema ed è il risultato di un'operazione di riprova di un job di ripristino. Il messaggio di errore effettivo dovrebbe essere visualizzato nei log del primo pod non riuscito.
Ottieni i log dall'errore iniziale per diagnosticare il problema.
Se il problema persiste, vai a Informazioni di diagnostica da raccogliere.
Soluzione alternativa per il problema noto 391861216
Diagnosi
Il pod Cassandra con il numero più alto è nello stato CrashLoopBackoff dopo il ripristino.
Ciò può verificarsi a causa del problema noto 391861216.
Nel log del pod Cassandra viene visualizzato un errore simile al seguente:
Cannot change the number of tokens from 512 to 256
Risoluzione
Per risolvere il problema sottostante, procedi nel seguente modo. In questo modo, Cassandra si avvierà normalmente conservando i dati.
-
Avvia l'eliminazione della PVC per il pod Cassandra bloccato nello stato
CrashLoopBackoff. Imposta POD_NAME sul nome del pod nello statoCrashLoopBackoff. Imposta APIGEE_NAMESPACE sullo spazio dei nomi del cluster in cui è installato Apigee.kubectl delete pvc cassandra-data-POD_NAME -n APIGEE_NAMESPACE --wait=false
-
Elimina il pod nello stato
CrashLoopBackoff.kubectl delete pod POD_NAME -n APIGEE_NAMESPACE
-
Modifica manualmente l'host seed per Cassandra nel pod con il numero più alto. Ad esempio, se hai tre repliche, SEED_POD_NAME deve essere
apigee-cassandra-default-2. Questa operazione è necessaria una sola volta e può essere ignorata per i pod successivi.kubectl patch apigeeds/default -n APIGEE_NAMESPACE --type='merge' -p '{"spec": {"components": {"cassandra": {"properties": {"externalSeedHost":"SEED_POD_NAME.apigee-cassandra-default.APIGEE_NAMESPACE.svc.cluster.local"}}}}}' -
Rimuovi il nodo con 512 token dall'anello Cassandra.
kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status' | awk '/^DN .*\?.* 512 / {print $6; exit}; /^DN .* [KMG]iB.* 512 / {print $7; exit}' | xargs -I {} kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode {}' -
Attendi il ripristino del pod Cassandra, riavvia possibilmente più di una volta e raggiungi uno stato
Readydi2/2. Il pod con il punteggio successivo più alto passerà allo statoCrashLoopBackoff.kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra -w
-
Aggiorna POD_NAME e ripeti i passaggi precedenti per i pod rimanenti, uno alla volta, man mano che passano allo stato
CrashLoopBackofffinché tutti i pod non si trovano nello statoReadydi2/2e hanno lo statoRunning. -
Verifica che tutti i pod siano stati aggiunti correttamente all'anello Cassandra.
kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status'
Tutti i nodi Cassandra devono avere lo stato
UNe 256 token. -
Ripristina la modifica all'host seed per Cassandra.
kubectl patch apigeeds/default -n APIGEE_NAMESPACE --type='merge' -p '{"spec": {"components": {"cassandra": {"properties": {"externalSeedHost":""}}}}}'Il controller Apigee Datastore riavvierà di nuovo i pod Cassandra quando ripristina la modifica dell'host seed.
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:
-
Oltre ai dati che ti vengono solitamente richiesti, raccogli i dati di diagnostica da tutti i pod Cassandra con il seguente comando:
for p in $(kubectl -n apigee get pods -l app=apigee-cassandra --no-headers -o custom-columns=":metadata.name") ; do \ for com in info describecluster failuredetector version status ring info gossipinfo compactionstats tpstats netstats cfstats proxyhistograms gcstats ; do kubectl \ -n apigee exec ${p} -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD '"$com"' 2>&1 '\ | tee /tmp/k_cassandra_nodetool_${com}_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt | head -n 40 ; echo '...' ; done; done -
Comprimilo e fornisci il file nella richiesta di assistenza:
tar -cvzf /tmp/cassandra_data_$(date +%Y.%m.%d_%H.%M.%S).tar.gz /tmp/k_cassandra_nodetool*
- Raccogli e fornisci i log dal pod di ripristino. Tieni presente che i log hanno una durata limitata, pertanto devono essere raccolti subito dopo l'errore.
- Se hai seguito i passaggi di diagnostica descritti sopra, raccogli tutti gli output della console, copiali in un file e allegalo alla richiesta di assistenza.