Pod Cassandra tidak dimulai di region sekunder

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

Gejala

Pod Cassandra gagal dimulai di salah satu region dalam penyiapan hybrid Apigee multi-region. Saat menerapkan file overrides.yaml, pod Cassandra tidak berhasil dimulai.

Pesan error

  1. Anda akan melihat pesan error berikut di log pod Cassandra:
    Exception (java.lang.RuntimeException) encountered during startup:
    A node with address 10.52.18.40 already exists, cancelling join.
    use cassandra.replace_addrees if you want to replace this node.
  2. Anda mungkin melihat peringatan berikut dalam status pod Cassandra:

Kemungkinan penyebab

Masalah ini biasanya terjadi dalam skenario berikut:

  1. Cluster runtime Apigee dihapus di salah satu region.
  2. Upaya untuk menginstal ulang cluster runtime Apigee dilakukan di region dengan konfigurasi host awal Cassandra dalam file overrides.yaml seperti yang dijelaskan dalam Deployment multi-region di GKE dan GKE on-prem.
  3. Menghapus cluster runtime Apigee tidak akan menghapus referensi di cluster Cassandra. Dengan demikian, referensi usang pod Cassandra di cluster yang dihapus akan dipertahankan. Oleh karena itu, saat Anda mencoba menginstal ulang cluster runtime Apigee di region sekunder, pod Cassandra akan mengeluh bahwa alamat IP tertentu sudah ada. Hal ini karena alamat IP dapat ditetapkan dari subnet yang sama dengan yang digunakan sebelumnya.
Penyebab Deskripsi
Referensi usang ke pod region sekunder yang dihapus di cluster Cassandra Menghapus cluster runtime Apigee di region sekunder tidak akan menghapus referensi ke alamat IP pod Cassandra di region sekunder.

Penyebab: Referensi yang tidak berlaku untuk pod region sekunder yang dihapus di cluster Cassandra

Diagnosis

  1. Pesan error di log pod Cassandra A node with address 10.52.18.40 already exists menunjukkan bahwa ada referensi usang ke salah satu pod Cassandra region sekunder dengan alamat IP 10.52.18.40. Validasi ini dengan menjalankan perintah nodetool status di region utama.

    Sample Output:

    Contoh di atas menunjukkan bahwa alamat IP 10.52.18.40 yang terkait dengan pod Cassandra di region sekunder masih tercantum dalam output.

  2. Jika output berisi referensi usang ke pod Cassandra di wilayah sekunder, maka hal ini menunjukkan bahwa wilayah sekunder telah dihapus, tetapi alamat IP pod Cassandra di wilayah sekunder tidak dihapus.

Resolusi

Lakukan langkah-langkah berikut untuk menghapus referensi usang pod Cassandra dari cluster yang dihapus:

  1. Login ke container dan hubungkan ke antarmuka command line Cassandra dengan mengikuti langkah-langkah di Membuat container klien.
  2. Setelah Anda login ke penampung dan terhubung ke antarmuka cqlsh Cassandra, jalankan kueri SQL berikut untuk mencantumkan definisi keyspace saat ini:
    select * from system_schema.keyspaces;

    Contoh output yang menampilkan keyspace saat ini:

    Dalam output berikut, Primary-DC1 merujuk pada region utama dan Secondary-DC2 merujuk pada region sekunder.

    bash-4.4# cqlsh 10.50.112.194 -u admin_user -p ADMIN.PASSWORD --ssl
    Connected to apigeecluster at 10.50.112.194:9042.
    [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
    Use HELP for help.
    
    admin_user@cqlsh> Select * from system_schema.keyspaces;
    
    keyspace_name                        | durable_writes | replication
    -------------------------------------+----------------+--------------------------------------------------------------------------------------------------
    system_auth                          |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    kvm_tsg1_apigee_hybrid_prod_hybrid   |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    kms_tsg1_apigee_hybrid_prod_hybrid   |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    system_schema                        |           True |                                           {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    system_distributed                   |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    system                               |           True |                                           {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    perses                               |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    cache_tsg1_apigee_hybrid_prod_hybrid |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    rtc_tsg1_apigee_hybrid_prod_hybrid   |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    quota_tsg1_apigee_hybrid_prod_hybrid |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    system_traces                        |           True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
    (11 rows)

    Seperti yang dapat Anda lihat, keyspaces merujuk ke Primary-DC1 dan Secondary-DC2, meskipun cluster runtime Apigee dihapus di region sekunder.

    Referensi usang ke Secondary-DC2 harus dihapus dari setiap definisi keyspace.

  3. Sebelum menghapus referensi usang dalam definisi keyspace, gunakan perintah berikut untuk menghapus seluruh penginstalan Apigee Hybrid kecuali ASM (Istio) dan cert-manager dari Secondary-DC2. Untuk mengetahui informasi selengkapnya, lihat Menghapus instalasi runtime hybrid.
    helm uninstall -n APIGEE_NAMESPACE ENV_GROUP_RELEASE_NAME ENV_RELEASE_NAME $ORG_NAME ingress-manager telemetry redis datastore

    Selain itu, uninstal apigee-operator:

    helm uninstall -n APIGEE_NAMESPACE operator
  4. Hapus referensi usang ke Secondary-DC2 dari setiap keyspaces dengan mengubah definisi keyspace.
    ALTER KEYSPACE system_auth WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE kvm_ORG_NAME_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE kms_ORG_NAME_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE system_distributed WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE perses WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE cache_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE rtc_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE quota_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
    ALTER KEYSPACE system_traces WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
  5. Verifikasi bahwa referensi usang ke region Secondary-DC2 telah dihapus dari semua keyspaces dengan menjalankan perintah berikut:
    select * from system_schema.keyspaces;
  6. Login ke pod Cassandra Primary-DC1 dan hapus referensi ke UUID semua pod Cassandra Secondary-DC2. UUID dapat diperoleh dari perintah nodetool status seperti yang dijelaskan sebelumnya di Diagnosis.
    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    nodetool -u admin_user -pw ADMIN.PASSWORD removenode UUID_OF_CASSANDRA_POD_IN_SECONDARY_DC2
    
  7. Pastikan tidak ada pod Cassandra Secondary-DC2 dengan menjalankan kembali perintah nodetool status.
  8. Instal cluster runtime Apigee di region sekunder (Secondary-DC2) dengan mengikuti langkah-langkah dalam Deployment multi-region di GKE dan GKE on-prem.

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Layanan Pelanggan Google Cloud:

  1. ID Project Google Cloud
  2. Nama organisasi Apigee Hybrid
  3. File overrides.yaml dari region primer dan sekunder, menyamarkan informasi sensitif
  4. Status pod Kubernetes di semua namespace di region utama dan sekunder:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
    
  5. Dump cluster-info Kubernetes dari region utama dan sekunder:
    # generate kubernetes cluster-info dump
    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump
    
    # zip kubernetes cluster-info dump
    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
    
  6. Output perintah nodetool di bawah dari region utama.
    export u=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.user}' | base64 -d`
    export pw=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.password}' | base64 -d`
    
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw info 2>&1 | tee /tmp/k_nodetool_info_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw describecluster 2>&1 | tee /tmp/k_nodetool_describecluster_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw failuredetector 2>&1 | tee /tmp/k_nodetool_failuredetector_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw status 2>&1 | tee /tmp/k_nodetool_status_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gossipinfo 2>&1 | tee /tmp/k_nodetool_gossipinfo_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw netstats 2>&1 | tee /tmp/k_nodetool_netstats_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw proxyhistograms 2>&1 | tee /tmp/k_nodetool_proxyhistograms_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw tpstats 2>&1 | tee /tmp/k_nodetool_tpstats_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gcstats 2>&1 | tee /tmp/k_nodetool_gcstats_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw version 2>&1 | tee /tmp/k_nodetool_version_$(date +%Y.%m.%d_%H.%M.%S).txt
    kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw ring 2>&1 | tee /tmp/k_nodetool_ring_$(date +%Y.%m.%d_%H.%M.%S).txt
          

Referensi