התאמה להיקף ב-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 וזיכרון, פועלים לפי השלבים שמתוארים בנושא הזה.

הגדלת מספר הפודים של 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. מוחקים את דרישת הנפח המתמיד או את הנפח, בהתאם להגדרת האשכול.

מה כדאי לדעת

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

הקטנת קנה המידה של Cassandra

  1. מוודאים שהאשכול תקין וכל הצמתים פועלים, כמו בדוגמה הבאה:
     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
    apigee-cassandra-default-6   1/1     Running   0          9m
    apigee-cassandra-default-7   1/1     Running   0          9m
    apigee-cassandra-default-8   1/1     Running   0          8m
    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    705.55 KiB  256          51.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
    UN  10.16.11.11  674.36 KiB  256          48.3%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
    UN  10.16.1.11   697.03 KiB  256          49.8%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13   703.64 KiB  256          50.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15   700.42 KiB  256          50.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    UN  10.16.11.3   697.03 KiB  256          49.8%             dad221ff-dad1-de33-2cd3-f1.672367e6f  ra-1
    UN  10.16.14.16  704.04 KiB  256          50.9%             1feed042-a4b6-24ab-49a1-24d4cef95473  ra-1
    UN  10.16.16.1   699.82 KiB  256          50.6%             beef93af-fee0-8e9d-8bbf-efc22d653596  ra-1
    
  2. בודקים אם יש מספיק נפח אחסון באשכול Cassandra כדי לתמוך בהקטנת הקיבולת. אחרי הקטנת הקיבולת, נפח האחסון של צומתי Cassandra לא צריך להיות מלא יותר מ-75%.

    לדוגמה, אם באשכול יש 6 צמתים של Cassandra וכולם מלאים ב-50% בערך, הקטנת מספר הצמתים ל-3 תגרום לכך שכל שלושת הצמתים יהיו מלאים ב-100%, ולא יישאר מקום להמשך פעולה.

    לעומת זאת, אם יש לכם 9 צמתים של Cassandra, שכל אחד מהם מלא ב-50% בערך, צמצום הקיבולת ל-6 צמתים יגרום לכך שכל אחד מהצמתים שיישארו יהיה מלא ב-75% בערך. אפשר להקטין את הרזולוציה.

  3. מעדכנים או מוסיפים את המאפיין cassandra.replicaCount בקובץ overrides.yaml. לדוגמה, אם מספר הצמתים הנוכחי הוא 9, משנים אותו ל-6:
    cassandra:
      replicaCount: 6 # 
  4. מחילים את השינוי בתצורה על האשכול:
    ./apigeectl apply --datastore -f overrides/override.yaml
    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
    apigee-cassandra-default-5   1/1     Running   0          23m
    
    
  6. מוודאים שהערך של cassandra.replicaCount שווה למספר הצמתים שמוחזרים על ידי הפקודה nodetool status.

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

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password 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    1009.17 KiB  256          73.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6    1.65.55 KiB  256          75.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
    UN  10.16.11.11  999.36 KiB   256          72.8%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
    UN  10.16.1.11   1017.03 KiB  256          74.2%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13   1061.64 KiB  256          75.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15   1049.42 KiB  256          74.9%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
    
  7. אחרי שמקטינים את קבוצת Cassandra, מוודאים ש-PVC (PersistentVolumeClaim) תואם לצמתי Cassandra שנותרו.

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

    בדוגמה הזו לא אמורים להופיע pvcs שמתאימים לשלושת הצמתים שהוקטנו:

    • cassandra-data-apigee-cassandra-8
    • cassandra-data-apigee-cassandra-7
    • cassandra-data-apigee-cassandra-6