Kegagalan replikasi data Cassandra

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

Gejala

Saat mereplikasi data selama perluasan multi-region, status CassandraDataReplication mungkin menampilkan status error dan replikasi data mungkin gagal.

Pesan error

Saat Anda menggunakan kubectl untuk melihat status build ulang:

  kubectl -n apigee get apigeeds \
  -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"

Anda melihat bahwa satu atau beberapa pod Cassandra menampilkan status error dan pesan yang menyatakan bahwa pembuatan ulang telah gagal. Contoh:

{
  "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
    },
    …
  }
}

Kemungkinan penyebab

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Wilayah sumber salah Nilai yang salah telah ditentukan untuk source.region dalam file YAML replikasi data Cassandra. Apigee hybrid
Masalah konektivitas jaringan Kemungkinan ada masalah konektivitas jaringan antara pod Cassandra di pusat data yang berbeda. Apigee hybrid

Langkah-langkah diagnosis umum

  1. Ambil status replikasi data:
    kubectl -n apigee get apigeeds \
    -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
  2. Jika Anda melihat error dengan pesan yang mirip dengan yang ditentukan dalam Error message, hal itu menunjukkan bahwa Anda mengamati masalah ini.

Penyebab: Region sumber salah

Jika Anda menentukan region sumber (datacenter) dalam file YAML replikasi data yang berbeda dengan datacenter sumber sebenarnya, replikasi data akan gagal. Lakukan langkah-langkah dalam bagian Diagnosis untuk menganalisis skenario ini dan lakukan langkah-langkah dalam Resolusi untuk memperbaikinya.

Diagnosis

  1. Tampilkan daftar semua pod Cassandra di region sumber:
    kubectl -n apigee get pods -l app=apigee-cassandra
    
  2. Dapatkan nilai datacenter sebenarnya dari salah satu pod Cassandra yang ditampilkan di langkah 1:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password status
    
  3. Dapatkan nilai yang digunakan untuk source.region dalam file resource kustom replikasi data (YAML) Cassandra yang Anda buat di Deployment multi-region. Jika Anda menggunakan contoh nama file yang ada dalam dokumentasi Deployment multi-region, file tersebut harus diberi nama datareplication.yaml.
    cat datareplication.yaml
    

    Contoh hasil:

    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. Periksa hasil output nodetool status dan verifikasi apakah nilai datacenter cocok dengan nilai source.region atau tidak:

    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u jmxuser -pw iloveapis123 status
    

    Contoh hasil:

    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. Perhatikan bahwa source.region (us-west1) dari file datareplication.yaml tidak cocok dengan nilai datacenter sebenarnya (dc-1) dari output status nodetool. Ikuti langkah-langkah di Resolution untuk memperbaiki konfigurasi.

Resolusi

Untuk memperbaiki replikasi data, Anda harus menghapus tugas replikasi data dan membuatnya dengan nama datacenter yang benar. Lakukan langkah-langkah berikut:

  1. Menghapus proses replikasi data saat ini. Jika menggunakan contoh nama file yang ada dalam dokumentasi Deployment multi-region, file harus diberi nama datareplication.yaml.
    kubectl delete -f datareplication.yaml
    
  2. Perbarui nama wilayah dalam file YAML menjadi nilai datacenter yang benar, misalnya 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. Terapkan replikasi data yang diupdate:
    kubectl apply -f datareplication.yaml
    
  4. Periksa status build ulang menggunakan perintah berikut dan verifikasi bahwa Anda tidak lagi melihat status error yang dilaporkan sebelumnya:
      kubectl -n apigee get apigeeds \
      -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
    
  5. Jika masalah masih berlanjut, lanjutkan ke Penyebab: Masalah konektivitas jaringan.

Penyebab: Masalah konektivitas jaringan

Error replikasi data mungkin juga disebabkan oleh masalah konektivitas antara node Cassandra.

Diagnosis

Lakukan langkah-langkah berikut untuk menganalisis skenario ini:

  1. Menampilkan daftar semua pod Cassandra:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
    
  2. Jalankan perintah curl berikut dan telnet ke pod Cassandra pertama di pusat data kedua (dc-2) dari pod Cassandra pertama di pusat data pertama (dc-1) menggunakan port 7001:
    kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
    
  3. Jika telnet berhasil, output yang mirip dengan berikut akan ditampilkan:
    * 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. Jika tidak, error yang mirip dengan berikut akan ditampilkan:
    * 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
    

    Kegagalan konektivitas dari pod Cassandra di satu pusat data ke pod Cassandra di pusat data lainnya menunjukkan bahwa pasti ada pembatasan firewall atau masalah konektivitas jaringan.

Resolusi

  1. Jika deployment hybrid Apigee ini berada di GKE, periksa apakah ada aturan firewall yang ditetapkan untuk memblokir traffic dari satu pusat data ke pusat data lainnya, dan analisis masalah konektivitas jaringan dengan melihat ringkasan aturan firewall VPC.
  2. Jika deployment hybrid Apigee ini berada di GKE lokal, bekerjasamalah dengan tim jaringan yang relevan dan analisis masalah konektivitas jaringan.

Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.

Harus mengumpulkan informasi diagnostik

Jika masalah terus berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee:

  1. ID Project Google Cloud.
  2. Organisasi campuran Apigee.
  3. File overrides.yaml dari region sumber dan baru, yang menyamarkan informasi sensitif.
  4. File YAML CassandraDataReplication.
  5. Output nodetool status Cassandra:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password status
    
  6. Output nodetool describecluster Cassandra:
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- \
    nodetool -u JMX_user -pw JMX_password describecluster