Menskalakan Cassandra

Topik ini membahas cara menskalakan Cassandra secara horizontal dan vertikal, serta cara menskalakan Cassandra.

Menskalakan Cassandra secara horizontal

Untuk menskalakan Cassandra secara horizontal

  1. Pastikan node pool apigee-data Anda memiliki kapasitas tambahan, sesuai kebutuhan, sebelum menskalakan Cassandra. Lihat juga Mengonfigurasi node pool khusus.
  2. Tetapkan nilai properti konfigurasi cassandra.replicaCount dalam file penggantian Anda. Untuk mengetahui informasi tentang properti ini, lihat Referensi properti konfigurasi. Lihat juga Mengelola komponen bidang runtime.
  3. Terapkan perubahan. Contoh:
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

Menskalakan Cassandra secara vertikal

Bagian ini menjelaskan cara menskalakan pod Cassandra secara vertikal untuk mengakomodasi persyaratan CPU dan memori yang lebih tinggi.

Ringkasan

Untuk deployment produksi hybrid Apigee, sebaiknya buat minimal dua node pool terpisah: satu untuk layanan stateful (Cassandra) dan satu untuk layanan (runtime) stateless. Misalnya, lihat Persyaratan cluster produksi GKE.

Untuk kumpulan node Cassandra stateful, sebaiknya mulai dengan 8 core CPU dan memori 30 GB. Setelah node pool disediakan, setelan ini tidak dapat diubah. Lihat juga Mengonfigurasi Cassandra untuk produksi.

Jika Anda perlu meningkatkan skala pod Cassandra untuk mengakomodasi persyaratan CPU dan memori yang lebih tinggi, ikuti langkah-langkah yang dijelaskan dalam topik ini.

Menskalakan pod Cassandra

Ikuti langkah-langkah berikut untuk meningkatkan CPU dan memori untuk node pool stateful yang digunakan untuk Cassandra:

  1. Ikuti petunjuk platform Kubernetes Anda untuk menambahkan kumpulan node baru ke cluster. Platform yang didukung tercantum dalam petunjuk penginstalan.
  2. Pastikan kumpulan node baru sudah siap:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    Contoh perintah:

    kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new

    Contoh output:

    NAME                                                STATUS   ROLES    AGE     VERSION
    gke-apigee-data-new-441387c2-2h5n   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-6941   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-nhgc   Ready    <none>   4m29s   v1.14.10-gke.17
    
  3. Perbarui file penggantian Anda untuk menggunakan node pool baru untuk Cassandra dan perbarui resource pod ke jumlah CPU dan ukuran memori yang lebih besar yang ingin Anda gunakan. Misalnya, untuk cluster GKE, gunakan konfigurasi yang mirip dengan berikut. Jika Anda menggunakan platform Kubernetes lain, Anda harus menyesuaikan nilai apigeeData.key dengan tepat:
    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "NODE_POOL_LABEL_NAME"
        value: "NODE_POOL_LABEL_VALUE"
    
    cassandra:
      resources:
        requests:
          cpu: NODE_POOL_CPU_NUMBER
          memory: NODE_POOL_MEMORY_SIZE
    

    Contoh:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
    
  4. Terapkan file penggantian ke cluster:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

Setelah Anda menyelesaikan langkah-langkah ini, pod Cassandra akan mulai di-roll over ke kumpulan node baru.

Memperkecil skala Cassandra

Apigee hybrid menggunakan ring node Cassandra sebagai StatefulSet. Cassandra menyediakan penyimpanan persisten untuk entity Apigee tertentu di bidang runtime. Untuk informasi selengkapnya tentang Cassandra, lihat Tentang bidang runtime.

Cassandra adalah layanan yang menggunakan banyak resource dan tidak boleh di-deploy di pod dengan layanan hibrida lainnya. Bergantung pada beban, Anda mungkin ingin menurunkan skala jumlah node Cassandra dalam ring di cluster.

Proses umum untuk menurunkan skala ring Cassandra adalah:

  1. Nonaktifkan satu node Cassandra.
  2. Perbarui properti cassandra.replicaCount di overrides.yaml.
  3. Terapkan pembaruan konfigurasi.
  4. Ulangi langkah-langkah ini untuk setiap node yang ingin Anda hapus.
  5. Hapus klaim atau volume volume persisten, bergantung pada konfigurasi cluster Anda.

Yang perlu Anda ketahui

  • Lakukan tugas ini pada satu node dalam satu waktu sebelum melanjutkan ke node berikutnya.
  • Jika ada node selain node yang akan dihentikan penggunaannya tidak responsif, jangan lanjutkan. Kubernetes tidak akan dapat menurunkan skala pod dari cluster.
  • Selalu turunkan atau naikkan skala dengan faktor tiga node.

Prasyarat

Sebelum Anda menurunkan skala jumlah node Cassandra dalam ring, validasi apakah cluster dalam kondisi baik dan semua node aktif dan berjalan, seperti yang ditunjukkan contoh berikut:

 kubectl get pods -n yourNamespace -l app=apigee-cassandra
NAME                 READY   STATUS    RESTARTS   AGE
apigee-cassandra-default-0   1/1     Running   0          2h
apigee-cassandra-default-1   1/1     Running   0          2h
apigee-cassandra-default-2   1/1     Running   0          2h
apigee-cassandra-default-3   1/1     Running   0          16m
apigee-cassandra-default-4   1/1     Running   0          14m
apigee-cassandra-default-5   1/1     Running   0          13m
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status
Datacenter: us-east1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.16.2.6    690.17 KiB  256          48.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
UN  10.16.4.6    700.55 KiB  256          51.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
UN  10.16.11.11  144.36 KiB  256          48.3%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
UN  10.16.1.11   767.03 KiB  256          49.8%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
UN  10.16.5.13   193.64 KiB  256          50.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
UN  10.16.8.15   132.42 KiB  256          50.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1

Nonaktifkan node Cassandra

  1. Nonaktifkan node Cassandra dari cluster menggunakan perintah nodetool.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    Misalnya, perintah ini menonaktifkan apigee-cassandra-5, node dengan nilai angka tertinggi dalam nama:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. Tunggu hingga penonaktifan selesai, dan verifikasi bahwa cluster sekarang memiliki satu node lebih sedikit. Contoh:
    kubectl -n yourNamespace exec -it nodeName nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.1.11  777.11 KiB  256          58.9%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15  143.23 KiB  256          58.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
  3. Perbarui atau tambahkan properti cassandra.replicaCount di file overrides.yaml Anda. Misalnya, jika jumlah node saat ini adalah 6, ubah menjadi 5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. Terapkan perubahan konfigurasi ke cluster Anda:
    ./apigeectl apply --datastore
    namespace/apigee unchanged
    secret/ssl-cassandra unchanged
    storageclass.storage.k8s.io/apigee-gcepd unchanged
    service/apigee-cassandra unchanged
    statefulset.apps/apigee-cassandra configured
  5. Pastikan semua node Cassandra yang tersisa sedang berjalan:
    kubectl get pods -n yourNamespace -l app=apigee-cassandra
    NAME                 READY   STATUS    RESTARTS   AGE
    apigee-cassandra-default-0   1/1     Running   0          3h
    apigee-cassandra-default-1   1/1     Running   0          3h
    apigee-cassandra-default-2   1/1     Running   0          2h
    apigee-cassandra-default-3   1/1     Running   0          25m
    apigee-cassandra-default-4   1/1     Running   0          24m
    
    
  6. Ulangi Langkah 1-5 untuk setiap node yang ingin Anda nonaktifkan.
  7. Setelah Anda selesai menonaktifkan node, verifikasi bahwa nilai cassandra.replicaCount sama dengan jumlah node yang ditampilkan oleh perintah nodetool status.

    Misalnya, jika Anda menskalakan Cassandra menjadi tiga node:

    kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    
    
  8. Setelah cluster Cassandra diperkecil, pastikan untuk menghapus pvc (PersistentVolumeClaim) untuk memastikan peristiwa penskalaan berikutnya tidak menggunakan volume Persisten yang sama dan data yang dibuat sebelumnya.

    Dapatkan nama pvc:

    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-5   Bound    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h

    Dalam contoh ini, pvc berikut sesuai dengan tiga node yang dihentikan:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. Hapus pvcs:
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5
    persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-4
    persistentvolumeclaim "cassandra-data-apigee-cassandra-4" deleted
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3
    persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted
  10. Pastikan PVC telah dihapus:
    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
  11. Jika Anda menggunakan penginstalan Anthos, hapus Volume persisten dari cluster Kubernetes Anthos menggunakan urutan yang sama.

    Dapatkan nama volume persisten:

    kubectl get pv -n youNamespace
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS   REASON   AGE
    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-4   apigee-gcepd            5h
    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-1   apigee-gcepd            7h
    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-5   apigee-gcepd            5h
    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-2   apigee-gcepd            7h
    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-3   apigee-gcepd            5h
    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-0   apigee-gcepd            7h

    Dalam contoh ini, volume berikut sesuai dengan tiga node yang dihentikan:

    • 5: pvc-354afa95-81a3-11e9-8862-42010a8e014a
    • 4: pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    • 3: pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  12. Hapus volume persisten:
    kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
    kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    kubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  13. Pastikan volume persisten telah dihapus:
    kubectl get pv -n youNamespace
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS   REASON   AGE
    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-1   apigee-gcepd            7h
    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-2   apigee-gcepd            7h
    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-0   apigee-gcepd            7h