בנושא הזה מתואר פריסה במספר אזורים של Apigee Hybrid ב-GKE, ב-Anthos GKE שנפרס בפריסה מקומית, ב-RedHat OpenShift וב-Microsoft® Azure Kubernetes Service (AKS). צריך לבחור את הפלטפורמה שלכם בקטע של הדרישות המוקדמות ובקטע של ההליכים.
טופולוגיות לפריסה במספר אזורים כוללות את האפשרויות הבאות:
- Active-Active: אם יש לכם אפליקציות שפרוסות בכמה מיקומים גיאוגרפיים ואתם צריכים תגובת API עם זמן אחזור נמוך לפריסות שלכם. יש לכם אפשרות לפרוס פריסה היברידית בכמה מיקומים גיאוגרפיים שהכי קרובים ללקוחות שלכם. לדוגמה: החוף המערבי של ארה"ב, החוף המזרחי של ארה"ב, אירופה, APAC.
- Active-Passive: כשמוגדר אזור ראשי ואזור מעבר לגיבוי או אזור להתאוששות מאסון.
האזורים בפריסה היברידית במספר אזורים מתקשרים באמצעות Cassandra, כפי שמוצג בתמונה הבאה:

דרישות מוקדמות
GKE
לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים:
- הגדרת אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR
- הגדרת תקשורת בין אזורים
- הדרישות ל-Cassandra Multi Region:
- מוודאים שלמרחב השמות של רשת ה-Pod יש קישוריות בין האזורים, כולל חומות אש, VPN, VPC Peering ו-VNet Peering. זה המצב ברוב ההתקנות של GKE.
- אם למרחב השמות של רשת ה-pods אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים'), צריך להפעיל את התכונה
hostNetworkשל Kubernetes על ידי הגדרתcassandra.hostNetwork: trueבקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.מידע על התכונה
hostNetworkב-Kubernetes זמין במאמר מרחבי שמות של מארחים במסמכי Kubernetes. - מומלץ להפעיל את
hostNetworkבאשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים. - כשהאפשרות
hostNetworkמופעלת, מוודאים שצמתי העובדים יכולים לבצע שאילתת DNS הפוכה. מערכת Apigee cassandra משתמשת בשאילתת DNS רגילה והפוכה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה. - פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. איך מגדירים יציאות
מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.
GKE On-Prem
לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים:
- הגדרת אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR
- הגדרת תקשורת בין אזורים
- הדרישות ל-Cassandra Multi Region:
- אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של GKE On-Prem), צריך להפעיל את התכונה
hostNetworkשל Kubernetes על ידי הגדרתcassandra.hostNetwork: trueבקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.מידע על התכונה
hostNetworkב-Kubernetes זמין במאמר מרחבי שמות של מארחים במסמכי Kubernetes. - מומלץ להפעיל את
hostNetworkבאשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים. - כשהאפשרות
hostNetworkמופעלת, מוודאים שצמתי העובדים יכולים לבצע שאילתת DNS הפוכה. מערכת Apigee cassandra משתמשת בשאילתת DNS רגילה והפוכה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה. - פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. איך מגדירים יציאות
- אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של GKE On-Prem), צריך להפעיל את התכונה
מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.
AKS
לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים:
- לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
- הדרישות ל-Cassandra Multi Region:
- אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של AKS), צריך להפעיל את התכונה
hostNetworkשל Kubernetes על ידי הגדרתcassandra.hostNetwork: trueבקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.מידע על התכונה
hostNetworkב-Kubernetes זמין במאמר Host namespaces במסמכי התיעוד של Kubernetes. - מומלץ להפעיל את
hostNetworkבאשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים. - כשהאפשרות
hostNetworkמופעלת, מוודאים שצמתי העובדים יכולים לבצע שאילתת DNS הפוכה. מערכת Apigee cassandra משתמשת בשאילתת DNS רגילה ובשאילתת DNS הפוכה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה. - פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים. מידע נוסף זמין במאמר בנושא הגדרת פורטים.
- אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של AKS), צריך להפעיל את התכונה
מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.
EKS
לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים:
- לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
- הדרישות ל-Cassandra Multi Region:
- אם למרחב השמות של רשת ה-pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של EKS), צריך להפעיל את התכונה
hostNetworkשל Kubernetes על ידי הגדרתcassandra.hostNetwork: trueבקובץ ההחלפות לכל האזורים בהתקנה של Apigee hybrid multi-regions.מידע על התכונה
hostNetworkב-Kubernetes זמין במאמר Host namespaces במסמכי התיעוד של Kubernetes. - מומלץ להפעיל את
hostNetworkבאשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים. - כשהאפשרות
hostNetworkמופעלת, מוודאים שצמתי העובדים יכולים לבצע שאילתת DNS הפוכה. מערכת Apigee cassandra משתמשת בשאילתת DNS רגילה ובשאילתת DNS הפוכה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה. - פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. איך מגדירים יציאות
- אם למרחב השמות של רשת ה-pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של EKS), צריך להפעיל את התכונה
מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.
OpenShift
לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים:
- לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
- הדרישות ל-Cassandra Multi Region:
- אם למרחב השמות של רשת ה-pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של OpenShift), צריך להפעיל את התכונה
hostNetworkשל Kubernetes על ידי הגדרתcassandra.hostNetwork: trueבקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.מידע על התכונה
hostNetworkב-Kubernetes זמין במאמר Host namespaces במסמכי התיעוד של Kubernetes. - מומלץ להפעיל את
hostNetworkבאשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים. - כשהאפשרות
hostNetworkמופעלת, מוודאים שצמתי העובדים יכולים לבצע שאילתת DNS הפוכה. מערכת Apigee cassandra משתמשת בשאילתת DNS רגילה ובשאילתת DNS הפוכה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה. - פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. איך מגדירים יציאות
- אם למרחב השמות של רשת ה-pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של OpenShift), צריך להפעיל את התכונה
מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.
הגדרת Apigee Hybrid למספר אזורים
GKE
הגדרת מארח הזרעים במספר אזורים
בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.
- מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
kubectl config use-context original-cluster-name
מריצים את הפקודה הבאה
kubectlכדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.
kubectl get pods -o wide -n apigee
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
- מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים.
- במרכז הנתונים 2, מגדירים את
cassandra.multiRegionSeedHostואתcassandra.datacenterבניהול רכיבי מישור זמן הריצה, כאשרmultiRegionSeedHostהוא אחת מכתובות ה-IP שמוחזרות על ידי הפקודה הקודמת:cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: false
לדוגמה:
cassandra: multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2" rack: "ra-1" hostNetwork: false
- במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-
overrides_your_cluster_name.yamlכמו שהגדרתם באזור הראשון.
הגדרת האזור החדש
אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.
כדי להגדיר את האזור החדש:
- מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
- מגדירים את ההקשר למרחב השמות המקורי:
kubectl config use-context original-cluster-name
- מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
- מייצאים את הסוד
apigee-caלקובץ:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- מגדירים את ההקשר לשם האשכול של האזור החדש:
kubectl config use-context new-cluster-name
- מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
kubectl apply -f apigee-namespace.yaml
מייבאים את הסוד לאשכול החדש:
kubectl -n cert-manager apply -f apigee-ca.yaml
- מגדירים את ההקשר למרחב השמות המקורי:
- מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ
overrides_your_cluster_name.yamlכולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
apigeectl check-ready -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u JMX_user -pw JMX_password status
דוגמה להגדרה מוצלחת:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
- מקבלים את
apigeeorgמהאשכול באמצעות הפקודה הבאה:kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
לדוגמה:
Ex: kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name "rg-hybrid-b7d3b9c"
- יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של Cassandra (
YAML). הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיהdatareplication.yaml.הקובץ צריך להכיל את הפרטים הבאים:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGIONכאשר:
- REGION_EXPANSION הוא השם שנותנים למטא-נתונים. אתם יכולים להשתמש בכל שם.
- NAMESPACE הוא אותו מרחב שמות שמופיע ב-
overrides.yaml. בדרך כלל זה הנתיבapigee. - APIGEEORG_VALUE הוא ערך הפלט מהפקודה
kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.nameבשלב הקודם. לדוגמה,rg-hybrid-b7d3b9c - SOURCE_REGION הוא שם מרכז הנתונים באזור המקור. זה הערך שהוגדר ל-
cassandra:datacenter:ב-overrides.yaml.
לדוגמה:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- מחילים את
CassandraDataReplicationבאמצעות הפקודה הבאה:kubectl apply -f datareplication.yaml
- כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq .items[].status.cassandraDataReplication
התוצאות אמורות להיראות כך:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- מקבלים את
- בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה
nodetool status:kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status
בדוגמה הבאה מוצגות רשומות לדוגמה ביומן:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- מעדכנים את המארחים הראשוניים. צריך להסיר את
multiRegionSeedHost: 10.0.0.11מהחשבוןoverrides-DC_name.yamlולהגיש בקשה חוזרת.apigeectl apply -f overrides/overrides-DC_name.yaml
בדיקת הסטטוס של אשכול Cassandra
הפקודה הבאה שימושית כדי לבדוק אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status Datacenter: dc-1 ================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 0.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 0.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 0.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
GKE On-Prem
הגדרת מארח הזרעים במספר אזורים
בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.
- בקובץ
overrides.yamlשל האשכול המקורי, מוודאים שהערך שלcassandra:hostNetworkמוגדר ל-true. לדוגמה:cassandra: hostNetwork: true
- מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
kubectl config use-context original-cluster-name
מריצים את הפקודה הבאה
kubectlכדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.
kubectl get pods -o wide -n apigee
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
- מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים.
-
במרכז הנתונים 2, מגדירים את
cassandra.multiRegionSeedHostבקובץ ההחלפות, כאשרmultiRegionSeedHostהוא אחת מכתובות ה-IP שהוחזרו על ידי הפקודה הקודמת:cassandra: hostNetwork: true multiRegionSeedHost: seed_host_IP datacenter: data_center_name
לדוגמה:
cassandra: hostNetwork: true multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2"
- במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-
overrides_your_cluster_name.yamlכמו שהגדרתם באזור הראשון.
הגדרת האזור החדש
אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.
כדי להגדיר את האזור החדש:
- מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
- מגדירים את ההקשר למרחב השמות המקורי:
kubectl config use-context original-cluster-name
- מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
- מייצאים את הסוד
apigee-caלקובץ:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- מגדירים את ההקשר לשם האשכול של האזור החדש:
kubectl config use-context new-cluster-name
- מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
kubectl apply -f apigee-namespace.yaml
מייבאים את הסוד לאשכול החדש:
kubectl -n cert-manager apply -f apigee-ca.yaml
- מגדירים את ההקשר למרחב השמות המקורי:
- מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ
overrides_your_cluster_name.yamlכולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
apigeectl check-ready -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u JMX_user -pw JMX_password status
דוגמה להגדרה מוצלחת:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
- מקבלים את
apigeeorgמהאשכול באמצעות הפקודה הבאה:kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
לדוגמה:
Ex: kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name "rg-hybrid-b7d3b9c"
- יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של Cassandra (
YAML). הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיהdatareplication.yaml.הקובץ צריך להכיל את הפרטים הבאים:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGIONכאשר:
- REGION_EXPANSION הוא השם שנותנים למטא-נתונים. אתם יכולים להשתמש בכל שם.
- NAMESPACE הוא אותו מרחב שמות שמופיע ב-
overrides.yaml. בדרך כלל זה הנתיבapigee. - APIGEEORG_VALUE הוא ערך הפלט מהפקודה
kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.nameבשלב הקודם. לדוגמה,rg-hybrid-b7d3b9c - SOURCE_REGION הוא שם מרכז הנתונים באזור המקור. זה הערך שהוגדר ל-
cassandra:datacenter:ב-overrides.yaml.
לדוגמה:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- מחילים את
CassandraDataReplicationבאמצעות הפקודה הבאה:kubectl apply -f datareplication.yaml
- כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq .items[].status.cassandraDataReplication
התוצאות אמורות להיראות כך:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- מקבלים את
- בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה
nodetool status:kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status
בדוגמה הבאה מוצגות רשומות לדוגמה ביומן:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- מעדכנים את המארחים הראשוניים. צריך להסיר את
multiRegionSeedHost: 10.0.0.11מהחשבוןoverrides-DC_name.yamlולהגיש בקשה חוזרת.apigeectl apply -f overrides/overrides-DC_name.yaml
בדיקת הסטטוס של אשכול Cassandra
הפקודה הבאה שימושית כדי לבדוק אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status Datacenter: dc-1 ================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 0.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 0.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 0.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
AKS
יצירת רשת וירטואלית בכל אזור
כדי להגדיר תקשורת בין אזורים שונים, צריך לפעול לפי ההמלצות של Azure שמופיעות כאן: VNet-to-VNet: Connecting Virtual Networks in Azure across Different Regions.
יצירת אשכולות מרובי-אזורים
מגדירים אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR. אפשר גם לעיין במאמר שלב 1: יצירת אשכול. משתמשים במיקומים ובשמות של הרשתות הווירטואליות שיצרתם קודם.
פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים (אפשר להשתמש ב-7000 כאפשרות גיבוי במהלך פתרון בעיות)
הגדרת מארח הזרעים במספר אזורים
בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.
- בקובץ
overrides.yamlשל האשכול המקורי, מוודאים שהערך שלcassandra:hostNetworkמוגדר ל-true. לדוגמה:cassandra: hostNetwork: true
- מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
kubectl config use-context original-cluster-name
מריצים את הפקודה הבאה
kubectlכדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.
kubectl get pods -o wide -n apigee | grep apigee-cassandra
apigee-cassandra-default-0 1/1 Running 0 4d17h 120.38.1.9 aks-agentpool-21207753-vmss000000
-
מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים. בדוגמה הזו, שבה פועל רק אשכול קסנדרה עם צומת יחיד, מארח הזרע הוא
120.38.1.9. - במרכז הנתונים 2, מעתיקים את קובץ ההחלפות לקובץ חדש ששמו כולל את שם האשכול. לדוגמה,
overrides_your_cluster_name.yaml. - במרכז הנתונים 2, מגדירים את
cassandra.multiRegionSeedHostואתcassandra.datacenterב-overrides_your_cluster_name.yaml, כאשרmultiRegionSeedHostהוא אחת מכתובות ה-IP שמוחזרות על ידי הפקודה הקודמת:cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: trueלדוגמה:
cassandra: multiRegionSeedHost: 120.38.1.9 datacenter: "dc-2" rack: "ra-1" hostNetwork: true
- במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-
overrides_your_cluster_name.yamlכמו שהגדרתם באזור הראשון.
הגדרת האזור החדש
אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.
כדי להגדיר את האזור החדש:
- מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
- מגדירים את ההקשר למרחב השמות המקורי:
kubectl config use-context original-cluster-name
- מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
- מייצאים את הסוד
apigee-caלקובץ:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- מגדירים את ההקשר לשם האשכול של האזור החדש:
kubectl config use-context new-cluster-name
- מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
kubectl apply -f apigee-namespace.yaml
מייבאים את הסוד לאשכול החדש:
kubectl -n cert-manager apply -f apigee-ca.yaml
- מגדירים את ההקשר למרחב השמות המקורי:
- מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ
overrides_your_cluster_name.yamlכולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
apigeectl check-ready -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u JMX_user -pw JMX_password status
דוגמה להגדרה מוצלחת:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
- מקבלים את
apigeeorgמהאשכול באמצעות הפקודה הבאה:kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
לדוגמה:
Ex: kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name "rg-hybrid-b7d3b9c"
- יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של Cassandra (
YAML). הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיהdatareplication.yaml.הקובץ צריך להכיל את הפרטים הבאים:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGIONכאשר:
- REGION_EXPANSION הוא השם שנותנים למטא-נתונים. אתם יכולים להשתמש בכל שם.
- NAMESPACE הוא אותו מרחב שמות שמופיע ב-
overrides.yaml. בדרך כלל זה הנתיבapigee. - APIGEEORG_VALUE הוא ערך הפלט מהפקודה
kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.nameבשלב הקודם. לדוגמה,rg-hybrid-b7d3b9c - SOURCE_REGION הוא שם מרכז הנתונים באזור המקור. זה הערך שהוגדר ל-
cassandra:datacenter:ב-overrides.yaml.
לדוגמה:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- מחילים את
CassandraDataReplicationבאמצעות הפקודה הבאה:kubectl apply -f datareplication.yaml
- כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq .items[].status.cassandraDataReplication
התוצאות אמורות להיראות כך:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- מקבלים את
- בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה
nodetool status:kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status
בדוגמה הבאה מוצגות רשומות לדוגמה ביומן:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- מעדכנים את המארחים הראשוניים. צריך להסיר את
multiRegionSeedHost: 10.0.0.11מהחשבוןoverrides-DC_name.yamlולהגיש בקשה חוזרת.apigeectl apply -f overrides/overrides-DC_name.yaml
בדיקת הסטטוס של אשכול Cassandra
הפקודה הבאה שימושית כדי לבדוק אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status Datacenter: dc-1 ================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 0.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 0.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 0.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
OpenShift
הגדרת מארח הזרעים במספר אזורים
בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.
- בקובץ
overrides.yamlשל האשכול המקורי, מוודאים שהערך שלcassandra:hostNetworkמוגדר ל-true. לדוגמה:cassandra: hostNetwork: true
- מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
kubectl config use-context original-cluster-name
מריצים את הפקודה הבאה
kubectlכדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.
kubectl get pods -o wide -n apigee
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
-
בוחרים את כתובת ה-IP של מארח Cassandra של המקור לשימוש כמארח seed רב-אזורי. בדוגמה הזו, האשכול
apigee-cassandra-default-0פועל, והמארח הראשי הוא10.0.0.11. - במרכז הנתונים 2, מעתיקים את קובץ ההחלפות לקובץ חדש ששמו כולל את שם האשכול. לדוגמה,
overrides_your_cluster_name.yaml. - במרכז הנתונים 2, מגדירים את
cassandra.multiRegionSeedHostואתcassandra.datacenterב-overrides_your_cluster_name.yaml, כאשרmultiRegionSeedHostהוא אחת מכתובות ה-IP שמוחזרות על ידי הפקודה הקודמת:cassandra: hostNetwork: true multiRegionSeedHost: seed_host_IP # Cassandra pod IP address from the source region. datacenter: data_center_name
לדוגמה:
cassandra: hostNetwork: true multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2"
- במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-
overrides_your_cluster_name.yamlכמו שהגדרתם באזור הראשון.
הגדרת האזור החדש
אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.
כדי להגדיר את האזור החדש:
- מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
- מגדירים את ההקשר למרחב השמות המקורי:
kubectl config use-context original-cluster-name
- מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
- מייצאים את הסוד
apigee-caלקובץ:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- מגדירים את ההקשר לשם האשכול של האזור החדש:
kubectl config use-context new-cluster-name
- מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
kubectl apply -f apigee-namespace.yaml
מייבאים את הסוד לאשכול החדש:
kubectl -n cert-manager apply -f apigee-ca.yaml
- מגדירים את ההקשר למרחב השמות המקורי:
- מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ
overrides_your_cluster_name.yamlכולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
apigeectl check-ready -f overrides_your_cluster_name.yaml
- מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u JMX_user -pw JMX_password status
דוגמה להגדרה מוצלחת:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
- מקבלים את
apigeeorgמהאשכול באמצעות הפקודה הבאה:kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
לדוגמה:
Ex: kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name "rg-hybrid-b7d3b9c"
- יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של Cassandra (
YAML). הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיהdatareplication.yaml.הקובץ צריך להכיל את הפרטים הבאים:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGIONכאשר:
- REGION_EXPANSION הוא השם שנותנים למטא-נתונים. אתם יכולים להשתמש בכל שם.
- NAMESPACE הוא אותו מרחב שמות שמופיע ב-
overrides.yaml. בדרך כלל זה הנתיבapigee. - APIGEEORG_VALUE הוא ערך הפלט מהפקודה
kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.nameבשלב הקודם. לדוגמה,rg-hybrid-b7d3b9c - SOURCE_REGION הוא שם מרכז הנתונים באזור המקור. זה הערך שהוגדר ל-
cassandra:datacenter:ב-overrides.yaml.
לדוגמה:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- מחילים את
CassandraDataReplicationבאמצעות הפקודה הבאה:kubectl apply -f datareplication.yaml
- כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq .items[].status.cassandraDataReplication
התוצאות אמורות להיראות כך:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- מקבלים את
- בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה
nodetool status:kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status
בדוגמה הבאה מוצגות רשומות לדוגמה ביומן:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- מעדכנים את המארחים הראשוניים. צריך להסיר את
multiRegionSeedHost: 10.0.0.11מהחשבוןoverrides-DC_name.yamlולהגיש בקשה חוזרת.apigeectl apply -f overrides/overrides-DC_name.yaml
בדיקת הסטטוס של אשכול Cassandra
הפקודה הבאה שימושית כדי לבדוק אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status Datacenter: dc-1 ================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 0.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 0.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 0.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
פתרון בעיות
מידע נוסף זמין במאמר בנושא כשל ברפליקציה של נתוני Cassandra.