התאמה להיקף ב-Cassandra

בנושא הזה נסביר איך להגדיל את Cassandra באופן אופקי ואנכי, ואיך להקטין את Cassandra.

הרחבת Cassandra באופן אופקי

כדי להרחיב את Cassandra באופן אופקי

  1. לפני שמבצעים שינוי גודל של Cassandra, צריך לוודא שלמאגר הצמתים apigee-data יש קיבולת נוספת, לפי הצורך. אפשר לעיין גם במאמר הגדרת מאגרי צמתים ייעודיים.
  2. מגדירים את הערך של מאפיין התצורה cassandra.replicaCount בקובץ השינויים. מידע על הנכס הזה זמין במאמר הסבר על מאפייני ההגדרה. מידע נוסף זמין במאמר בנושא ניהול רכיבים של מישור זמן הריצה.
  3. מחילים את השינויים. לדוגמה:
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

שינוי קנה מידה אנכי של Cassandra

בקטע הזה מוסבר איך להגדיל את ה-pods של Cassandra באופן אנכי כדי להתאים לדרישות גבוהות יותר של CPU וזיכרון.

סקירה כללית

בפריסת ייצור היברידית של Apigee, מומלץ ליצור לפחות שני מאגרי צמתים נפרדים: אחד לשירותים עם שמירת מצב (Cassandra) ואחד לשירותים ללא שמירת מצב (זמן ריצה). לדוגמה, אפשר לעיין במאמר הדרישות של אשכול GKE לייצור.

במאגר הצמתים של Cassandra עם שמירת מצב, מומלץ להתחיל עם 8 ליבות CPU ו-30GB של זיכרון. אחרי שהקצאתם את מאגר הצמתים, אי אפשר לשנות את ההגדרות האלה. אפשר לעיין גם במאמר הגדרת Cassandra לסביבת ייצור.

אם אתם צריכים להגדיל את מספר ה-pods של Cassandra כדי לעמוד בדרישות גבוהות יותר של CPU וזיכרון, פועלים לפי השלבים שמתוארים בנושא הזה.

הגדלת מספר ה-pods של Cassandra

כדי להגדיל את השימוש במעבד ובזיכרון עבור מאגר הצמתים עם שמירת מצב שמשמש ל-Cassandra, פועלים לפי השלבים הבאים:

  1. פועלים לפי ההוראות של פלטפורמת Kubernetes כדי להוסיף מאגר צמתים חדש לאשכול. רשימת הפלטפורמות הנתמכות מופיעה בהוראות ההתקנה.
  2. מוודאים שמאגר הצמתים החדש מוכן:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    פקודה לדוגמה:

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

    פלט לדוגמה:

    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. מעדכנים את קובץ ההחלפות כדי להשתמש במאגר הצמתים החדש של Cassandra, ומעדכנים את משאבי ה-Pod למספר ה-CPU המוגדל ולגודל הזיכרון שרוצים להשתמש בהם. לדוגמה, באשכול GKE, משתמשים בהגדרה שדומה להגדרה הבאה. אם אתם משתמשים בפלטפורמת Kubernetes אחרת, אתם צריכים לשנות את הערך של apigeeData.key בהתאם:
    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
    

    לדוגמה:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
    
  4. מחילים את קובץ ההחלפות על האשכול:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

אחרי שתשלימו את השלבים האלה, ה-pods של Cassandra יתחילו לעבור בהדרגה אל מאגר הצמתים החדש.

הקטנת הקיבולת של Cassandra

‫Apigee Hybrid משתמש בטבעת של צמתי Cassandra כ-StatefulSet. ‫Cassandra מספקת אחסון מתמיד לישויות מסוימות של Apigee במישור זמן הריצה. מידע נוסף על Cassandra זמין במאמר מידע על מישור זמן הריצה.

‫Cassandra הוא שירות שדורש הרבה משאבים, ולכן לא מומלץ לפרוס אותו ב-Pod עם שירותים היברידיים אחרים. בהתאם לעומס, יכול להיות שתרצו להקטין את מספר צמתי Cassandra בטבעת באשכול.

התהליך הכללי להקטנת טבעת Cassandra הוא:

  1. הוצאה משימוש של צומת Cassandra אחד.
  2. מעדכנים את הנכס cassandra.replicaCount ב-overrides.yaml.
  3. החלת עדכון ההגדרות האישיות.
  4. חוזרים על השלבים האלה לכל צומת שרוצים להסיר.
  5. מוחקים את דרישת הנפח המתמיד או את הנפח, בהתאם להגדרת האשכול.

מה כדאי לדעת

  • מבצעים את המשימה הזו בצומת אחד בכל פעם לפני שממשיכים לצומת הבא.
  • אם יש צומת לא תקין כלשהו מלבד הצומת שיוצא משימוש, אל תמשיכו. מערכת Kubernetes לא תוכל להקטין את מספר הפודים באשכול.
  • תמיד מצמצמים או מרחיבים את הקיבולת בפקטור של שלושה צמתים.

דרישות מוקדמות

לפני שמקטינים את מספר הצמתים של Cassandra בטבעת, צריך לוודא שהאשכול תקין וכל הצמתים פועלים, כמו בדוגמה הבאה:

 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

הוצאה משימוש של צמתי Cassandra

  1. מוציאים את צמתי Cassandra מהשימוש באשכול באמצעות הפקודה nodetool.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    לדוגמה, הפקודה הזו מוציאה משימוש את apigee-cassandra-5, הצומת עם הערך המספרי הכי גבוה בשם:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. מחכים לסיום ההוצאה משימוש ומוודאים שיש עכשיו פחות צומת אחד באשכול. לדוגמה:
    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. מעדכנים או מוסיפים את המאפיין cassandra.replicaCount בקובץ overrides.yaml. לדוגמה, אם מספר הצמתים הנוכחי הוא 6, משנים אותו ל-5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. מחילים את השינוי בתצורה על האשכול:
    ./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. מוודאים שכל צמתי Cassandra שנותרו פועלים:
    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. חוזרים על שלבים 1-5 לכל צומת שרוצים להוציא משימוש.
  7. כשמסיימים להוציא את הצמתים משימוש, מוודאים שהערך של cassandra.replicaCount שווה למספר הצמתים שמוחזרים על ידי הפקודה nodetool status.

    לדוגמה, אם הקטנתם את קנה המידה של Cassandra לשלושה צמתים:

    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. אחרי שמקטינים את קלאסטר Cassandra, חשוב למחוק את ה-PVC (PersistentVolumeClaim) כדי לוודא שבאירוע הבא של הגדלת קנה המידה לא ייעשה שימוש באותו נפח אחסון קבוע ובנתונים שנוצרו קודם.

    מקבלים את השמות של ה-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

    בדוגמה הזו, ה-PVC הבאים תואמים לשלושת הצמתים שהוצאו משימוש:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. מוחקים את ה-PVC:
    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. מוודאים שה-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
  11. אם אתם משתמשים בהתקנה של Anthos, צריך למחוק את נפח האחסון המתמשך מאשכול Anthos Kubernetes באמצעות אותה רצף פעולות.

    מקבלים את השמות של נפחי האחסון המתמיד:

    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

    בדוגמה הזו, הכרכים הבאים תואמים לשלושת הצמתים שהוצאו משימוש:

    • ‫5: pvc-354afa95-81a3-11e9-8862-42010a8e014a
    • ‫4: pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    • ‫3: pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  12. מוחקים את הכרכים הקבועים:
    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. מוודאים שהנפחים הקבועים נמחקו:
    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