Errore di replica dei dati Cassandra

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

Sintomo

Durante la replica dei dati durante un'espansione multiregionale, CassandraDataReplication potrebbe indicare 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'}"

Vedrai che uno o più pod Cassandra mostrano uno stato di errore e un messaggio che indica la ricreazione non è riuscito. 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 Le istruzioni di risoluzione dei problemi applicabili a
Regione di origine non corretta È stato specificato un valore errato per source.region all'interno del file YAML della replica dei dati Cassandra. Apigee hybrid
Problemi di connettività di rete Potrebbero verificarsi problemi di connettività di rete tra i pod Cassandra in data center diversi. Apigee hybrid

Passaggi diagnostici comuni

  1. Recupera lo stato della replica dei dati:
    kubectl -n apigee get apigeeds \
    -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
  2. Se viene visualizzato un errore con un messaggio simile a quello specificato Messaggio di errore, indica che stai a osservare il problema.

Causa: regione di origine errata

Se specifichi una regione di origine (datacenter) nel file YAML della replica dei dati che è diversa dall'origine effettiva datacenter, la replica dei dati verrà non riuscito. Esegui la procedura descritta in Diagnostica per analizzare questo scenario e segui la procedura descritta in Risoluzione per correggerla.

Diagnosi

  1. Elenca tutti i pod Cassandra nella regione di origine:
    kubectl -n apigee get pods -l app=apigee-cassandra
    
  2. Ottieni 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
    
  3. Ottieni il valore utilizzato per source.region nella replica dei dati Cassandra il file di risorse personalizzate (YAML) creato in Deployment multiregionale. Se utilizzi il nome di file di esempio presente nella Devi assegnare un nome al file nella documentazione relativa al deployment in più regioni datareplication.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"
    
  4. Controlla il risultato dell'output nodetool status e verifica se non il valore datacenter corrisponde al valore source.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
    
  5. Tieni presente che il valore source.region (us-west1) del Il file datareplication.yaml non corrisponde al valore effettivo di datacenter (dc-1) dall'output dello stato nodetool. Segui i passaggi in Soluzione per correggere la configurazione.

Risoluzione

Per correggere la replica dei dati, devi eliminare e creare il job di replica dei dati con il nome di datacenter corretto. Procedi nel seguente modo:

  1. Elimina l'attuale processo di replica dei dati. Se utilizzi il nome di file di esempio presente nel nella documentazione relativa al deployment in più regioni, quindi al file deve essere assegnato un nome. datareplication.yaml.
    kubectl delete -f datareplication.yaml
    
  2. 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"
  3. Applica la replica dei dati aggiornata:
    kubectl apply -f datareplication.yaml
    
  4. Controlla lo stato della ricompilazione utilizzando il seguente comando e verifica che non sia più visibile stato di errore precedentemente segnalato:
      kubectl -n apigee get apigeeds \
      -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
    
  5. Se il problema persiste, vai a 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 Cassandra nodi.

Diagnosi

Per analizzare questo scenario, procedi nel seguente modo:

  1. Elenca tutti i pod Cassandra:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
    
  2. Esegui questo comando curl e telnet sul primo pod Cassandra nella secondo data center (dc-2) dal primo pod Cassandra nel primo data center (dc-1) utilizzando la porta 7001:
    kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
    
  3. Se telnet ha esito positivo, 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)
    
  4. 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
    

    Errore di connettività dal pod Cassandra in un data center al pod Cassandra in indica che deve esistere una restrizione del firewall o che problema di connettività di rete.

Risoluzione

  1. Se questo deployment ibrido Apigee è su GKE, controlla se sono state impostate regole firewall che bloccare il traffico da un data center all'altro e analizzare la connettività di rete risolvere il problema facendo riferimento a Panoramica delle regole firewall VPC.
  2. Se questo deployment ibrido Apigee è su GKE-on-prem, lavora con il networking pertinente e analizzare il problema di connettività di rete.

Se il problema persiste, consulta l'articolo È necessario raccogliere i dati diagnostici.

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. L'ID del progetto Google Cloud.
  2. L'organizzazione Apigee ibrida.
  3. I file overrides.yaml provenienti sia dalla regione di origine che dalla nuova regione, mascherando le informazioni sensibili.
  4. Il file YAML CassandraDataReplication.
  5. Output nodetool status di Cassandra:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password status
    
  6. Output nodetool describecluster di Cassandra:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password describecluster