בנושא הזה נסביר איך להגדיל את Cassandra באופן אופקי ואנכי, ואיך להקטין את Cassandra.
הרחבת Cassandra באופן אופקי
כדי להרחיב את Cassandra באופן אופקי
- לפני שמבצעים שינוי גודל של Cassandra, צריך לוודא שלמאגר הצמתים
apigee-dataיש קיבולת נוספת, לפי הצורך. אפשר לעיין גם במאמר הגדרת מאגרי צמתים ייעודיים. - מגדירים את הערך של מאפיין התצורה
cassandra.replicaCountבקובץ השינויים. מידע על הנכס הזה זמין במאמר הסבר על מאפייני ההגדרה. מידע נוסף זמין במאמר בנושא ניהול רכיבים של מישור זמן הריצה. - מחילים את השינויים. לדוגמה:
$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, פועלים לפי השלבים הבאים:
- פועלים לפי ההוראות של פלטפורמת Kubernetes כדי להוסיף מאגר צמתים חדש לאשכול. רשימת הפלטפורמות הנתמכות מופיעה בהוראות ההתקנה.
- מוודאים שמאגר הצמתים החדש מוכן:
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
- מעדכנים את קובץ ההחלפות כדי להשתמש במאגר הצמתים החדש של 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 - מחילים את קובץ ההחלפות על האשכול:
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
אחרי שתשלימו את השלבים האלה, ה-pods של Cassandra יתחילו לעבור בהדרגה אל מאגר הצמתים החדש.
הקטנת הקיבולת של Cassandra
Apigee Hybrid משתמש בטבעת של צמתי Cassandra כ-StatefulSet. Cassandra מספקת אחסון מתמיד לישויות מסוימות של Apigee במישור זמן הריצה. מידע נוסף על Cassandra זמין במאמר מידע על מישור זמן הריצה.
Cassandra הוא שירות שדורש הרבה משאבים, ולכן לא מומלץ לפרוס אותו ב-Pod עם שירותים היברידיים אחרים. בהתאם לעומס, יכול להיות שתרצו להקטין את מספר צמתי Cassandra בטבעת באשכול.
התהליך הכללי להקטנת טבעת Cassandra הוא:
- הוצאה משימוש של צומת Cassandra אחד.
- מעדכנים את הנכס
cassandra.replicaCountב-overrides.yaml. - החלת עדכון ההגדרות האישיות.
- חוזרים על השלבים האלה לכל צומת שרוצים להסיר.
- מוחקים את דרישת הנפח המתמיד או את הנפח, בהתאם להגדרת האשכול.
מה כדאי לדעת
- מבצעים את המשימה הזו בצומת אחד בכל פעם לפני שממשיכים לצומת הבא.
- אם יש צומת לא תקין כלשהו מלבד הצומת שיוצא משימוש, אל תמשיכו. מערכת 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
-
מוציאים את צמתי Cassandra מהשימוש באשכול באמצעות הפקודה nodetool.
kubectl -n yourNamespace exec -it nodeName nodetool decommission
לדוגמה, הפקודה הזו מוציאה משימוש את
apigee-cassandra-5, הצומת עם הערך המספרי הכי גבוה בשם:kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- מחכים לסיום ההוצאה משימוש ומוודאים שיש עכשיו פחות צומת אחד באשכול. לדוגמה:
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
- מעדכנים או מוסיפים את המאפיין
cassandra.replicaCountבקובץoverrides.yaml. לדוגמה, אם מספר הצמתים הנוכחי הוא 6, משנים אותו ל-5:cassandra: replicaCount: 5 # (n-1 5 in this example)
- מחילים את השינוי בתצורה על האשכול:
./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
- מוודאים שכל צמתי 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
- חוזרים על שלבים 1-5 לכל צומת שרוצים להוציא משימוש.
- כשמסיימים להוציא את הצמתים משימוש, מוודאים שהערך של
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
- אחרי שמקטינים את קלאסטר 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-5cassandra-data-apigee-cassandra-4cassandra-data-apigee-cassandra-3
-
מוחקים את ה-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" deletedkubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3 persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted -
מוודאים שה-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
- אם אתם משתמשים בהתקנה של 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
- 5:
-
מוחקים את הכרכים הקבועים:
kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014akubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a -
מוודאים שהנפחים הקבועים נמחקו:
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