Errore di replica dei dati di Cassandra

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

Sintomo

Quando replichi i dati durante un'espansione multiregione, 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 ricostruzione:

  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 all'interno del file YAML di replica dei dati di 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 di diagnostica 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 in Messaggio di errore, significa che stai riscontrando questo problema.

Causa: regione di origine errata

Se nel file YAML della replica dei dati specifichi una regione di origine (datacenter) diversa da quella effettiva datacenter, la replica dei dati non andrà a buon fine. Segui i passaggi descritti nella sezione Diagnosi per analizzare questo scenario e poi quelli descritti nella sezione Risoluzione per correggerlo.

Diagnosi

  1. Elenca tutti i pod Cassandra nella regione di origine:
    kubectl -n apigee get pods -l app=apigee-cassandra
    
  2. Recupera il valore effettivo di datacenter da uno 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. Recupera il valore utilizzato per source.region nel file della risorsa personalizzata (YAML) per la replica dei dati Cassandra che hai creato in Deployment multiregione. Se utilizzi il nome del file di esempio riportato nella documentazione relativa all'implementazione multiregione, il file deve essere denominato 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 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 source.region (us-west1) del file datareplication.yaml non corrisponde al valore datacenter effettivo (dc-1) dell'output dello stato nodetool. Segui la procedura descritta in Risoluzione 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. Procedi nel seguente modo:

  1. Elimina il processo di replica dei dati attuale. Se utilizzi il nome del file di esempio riportato nella documentazione relativa al deployment multiregione, il file deve essere denominato 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 aggiornati:
    kubectl apply -f datareplication.yaml
    
  4. Controlla lo stato della ricostruzione utilizzando il seguente comando e verifica di non vedere più lo stato di errore segnalato in precedenza:
      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 i nodi Cassandra.

Diagnosi

Per analizzare questo scenario, svolgi i seguenti passaggi:

  1. Elenca tutti i pod Cassandra:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
  2. Esegui il seguente comando curl e telnet al primo pod Cassandra nel 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 la connessione telnet è andata a buon fine, 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

    L'errore di connettività dal pod Cassandra in un data center al pod Cassandra in un altro data center indica che deve esserci una limitazione del firewall o qualche tipo di problema di connettività di rete.

Risoluzione

  1. Se questo deployment ibrida di Apigee è su GKE, controlla se sono impostate regole firewall che bloccano il traffico da un data center all'altro e analizza il problema di connettività di rete facendo riferimento alla panoramica delle regole firewall VPC.
  2. Se questo deployment ibrido di Apigee è 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 È necessario raccogliere informazioni di diagnostica.

Deve raccogliere informazioni di diagnostica

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e poi contatta l'assistenza clienti Google Cloud:

  1. L'ID progetto Google Cloud.
  2. L'organizzazione Apigee hybrid.
  3. I file overrides.yaml sia della regione di origine sia delle nuove regioni, mascherando eventuali informazioni sensibili.
  4. Il file YAML CassandraDataReplication.
  5. Output di Cassandra nodetool status:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password status
    
  6. Output di Cassandra nodetool describecluster:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password describecluster