Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Sintomo
Quando replichi i dati durante un'espansione multiregionale, lo stato CassandraDataReplication
potrebbe mostrare uno stato di errore e la replica dei dati potrebbe non riuscire.
Messaggio di errore
Quando utilizzi
kubectl
per visualizzare lo stato della ricompilazione:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
Uno o più pod Cassandra mostrano uno stato di errore e un messaggio che indica che la ricostruzione non è riuscita. Ad esempio:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "message": "failed to rebuild from us-west1: java.lang.IllegalStateException : Unable to find sufficient sources for streaming range (-8567285182390470134,-8567154549835592965] in keyspace system_distributed", "state": "error", "updated": 1641581899 }, … } }
Cause possibili
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Regione di origine errata | È stato specificato un valore errato per source.region nel file YAML di replica dei dati Cassandra. |
Apigee hybrid |
Problemi di connettività di rete | Potrebbero esserci problemi di connettività di rete tra i pod Cassandra in data center diversi. | Apigee hybrid |
Passaggi comuni di diagnostica
- Recupera lo stato della replica dei dati:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - Se viene visualizzato un errore con un messaggio simile a quello specificato in Messaggio di errore, significa che stai riscontrando questo problema.
Causa: regione di origine errata
Se specifichi una regione di origine (datacenter
) nel file YAML di replica dei dati diversa dall'origine effettiva datacenter
, la replica dei dati non andrà a buon fine. Segui i passaggi descritti nella sezione Diagnosi per analizzare questo scenario e
quelli descritti nella sezione Risoluzione per correggerlo.
Diagnosi
- Elenca tutti i pod di Cassandra nella regione di origine:
kubectl -n apigee get pods -l app=apigee-cassandra
- Recupera il valore
datacenter
effettivo da uno qualsiasi dei pod Cassandra restituiti nel passaggio 1:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Ottieni il valore utilizzato per
source.region
nel file di risorse personalizzate (YAML) di replica dei dati Cassandra che hai creato in Deployment multiregionale. Se utilizzi il nome file di esempio riportato nella documentazione sul deployment multiregionale, il file deve essere denominatodatareplication.yaml
.cat datareplication.yaml
Risultati di esempio:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "us-west1"
Controlla il risultato dell'output
nodetool status
e verifica se il valoredatacenter
corrisponde al valoresource.region
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
Risultati di esempio:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.104.13.2 491.84 KiB 256 100.0% 7254711c-fe0a-4b34-b50f-861109f97936 ra-1 UN 10.104.11.3 527.36 KiB 256 100.0% 5ec389f0-fd67-4de6-9f21-172d5899ff78 ra-1 UN 10.104.12.7 838.46 KiB 256 100.0% 7a88be82-1f81-4117-86e3-2cda434c0878 ra-1
- Tieni presente che
source.region
(us-west1
) del filedatareplication.yaml
non corrisponde al valoredatacenter
effettivo (dc-1
) dell'output di statonodetool
. Segui i passaggi descritti nella soluzione per correggere la configurazione.
Risoluzione
Per correggere la replica dei dati, devi eliminare il job di replica dei dati e crearlo
con il nome datacenter
corretto. Segui questi passaggi:
- Elimina il processo di replica dei dati corrente. Se utilizzi il nome file di esempio riportato nella documentazione
Deployment multiregionale, il file deve essere denominato
datareplication.yaml
.kubectl delete -f datareplication.yaml
- Aggiorna il nome della regione nel file YAML con il valore
datacenter
corretto, ad esempio:dc-1
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "dc-1"
- Applica la replica dei dati aggiornata:
kubectl apply -f datareplication.yaml
- Controlla lo stato della ricompilazione utilizzando il seguente comando e verifica di non visualizzare più lo stato di errore segnalato in precedenza:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
- Se il problema persiste, vai alla sezione Causa: problemi di connettività di rete.
Causa: problemi di connettività di rete
L'errore di replica dei dati può anche essere il risultato di problemi di connettività tra i nodi Cassandra.
Diagnosi
Per analizzare questo scenario, procedi nel seguente modo:
- Elenca tutti i pod di Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Esegui i seguenti comandi per telnet al primo pod Cassandra nel
secondo data center (
dc-2
) dal primo pod Cassandra nel primo data center (dc-1
) utilizzando la porta7001
:k debug -it apigee-cassandra-default-0 -n apigee --image=nginx -- sh 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 un 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.
Se il problema persiste, vai a Informazioni di diagnostica da raccogliere.
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.
- L'organizzazione Apigee hybrid.
- I file
overrides.yaml
delle regioni di origine e di quelle nuove, mascherando qualsiasiinformazioni sensibilie. - Il file YAML
CassandraDataReplication
. - Output di Cassandra
nodetool status
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Output di Cassandra
nodetool describecluster
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster