פריסה במספר אזורים

בנושא הזה מתואר פריסה מרובת אזורים של Apigee Hybrid ב-GKE, ב-Anthos GKE שנפרס בפריסה מקומית, ב-Microsoft® Azure Kubernetes Service‏ (AKS), ב-Amazon Elastic Kubernetes Service‏ (EKS) וב-RedHat OpenShift. בוחרים את הפלטפורמה בדרישות המוקדמות ובנהלים.

טופולוגיות לפריסה במספר אזורים כוללות את האפשרויות הבאות:

  • Active-Active: אם יש לכם אפליקציות שפרוסות בכמה מיקומים גיאוגרפיים ואתם צריכים תגובת API עם זמן אחזור נמוך לפריסות שלכם. יש לכם אפשרות לפרוס פריסה היברידית בכמה מיקומים גיאוגרפיים שהכי קרובים ללקוחות שלכם. לדוגמה: החוף המערבי של ארה"ב, החוף המזרחי של ארה"ב, אירופה, APAC.
  • Active-Passive: כשמוגדר אזור ראשי ואזור מעבר לגיבוי או אזור להתאוששות מאסון.

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

ארכיטקטורת פריסה של Apigee Hybrid במספר אזורים

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

לפני שמגדירים את ההיברידיות למספר אזורים, צריך לוודא שמתקיימות הדרישות המוקדמות הבאות:

GKE

  • כשמתקינים פריסות של Apigee בכמה אזורים בין רשתות שונות (למשל, ספקי ענן שונים, רשתות VPC שונות, ענן ורשת מקומית וכו'), צריך לספק קישוריות פנימית בין הרשתות הנפרדות האלה, ש-Cassandra יכולה להשתמש בה כדי לתקשר בין הצמתים. אפשר לעשות את זה באמצעות רשתות VPN או פתרונות קישוריות ספציפיים לענן.
  • אם אתם משתמשים ב-Workload Identity באשכול אחד כדי לאמת חשבונות שירות, כל אשכול שאתם מרחיבים אליו צריך גם להשתמש ב-Workload Identity. מידע נוסף זמין במאמר בנושא הפעלת Workload Identity ב-Apigee Hybrid.
  • הגדרת אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR
  • מוודאים ש-cert-manager מותקן בכל אשכול
  • הגדרת תקשורת בין אזורים
  • מוודאים שכל קבוצות ה-Pod של Cassandra יכולות לפענח את שמות המארחים שלהן. אם הערך של hostNetwork מוגדר כ-false, שם המארח הוא שם קבוצת ה-Pod של Cassandra. אם הערך של hostNetwork מוגדר כ-true, שם המארח הוא שם הצומת של Kubernetes שבו פועלת קבוצת ה-Pod של Cassandra.
  • הדרישות ל-Cassandra Multi Region:
    • מוודאים שלמרחב השמות של רשת ה-Pod יש קישוריות בין האזורים, כולל חומות אש, VPN, ‏ VPC Peering ו-VNet Peering. זה המצב ברוב ההתקנות של GKE.
    • אם למרחב השמות של רשת ה-pods אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים'), צריך להפעיל את התכונה hostNetwork של Kubernetes על ידי הגדרת cassandra.hostNetwork: true בקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.

      מידע נוסף על הצורך ב-hostNetwork מופיע בקטע Island mode clusters and hostNetwork בהמשך.

    • מומלץ להפעיל את hostNetwork באשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים.
    • כשhostNetwork מופעל, צריך לוודא שצמתי העובדים יכולים לבצע חיפוש DNS קדימה של שמות המארחים שלהם. מערכת Apigee Cassandra משתמשת בשאילתת DNS קדימה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה.
    • פותחים את יציאת TCP מספר 7001 בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עבודה באזורים ובמרכזי נתונים שונים. מידע על מספרי היציאות של Cassandra מופיע במאמר בנושא הגדרת יציאות.

מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.

GKE On-Prem

  • כשמתקינים פריסות של Apigee בכמה אזורים בין רשתות שונות (למשל, ספקי ענן שונים, רשתות VPC שונות, ענן ורשת מקומית וכו'), צריך לספק קישוריות פנימית בין הרשתות הנפרדות האלה, ש-Cassandra יכולה להשתמש בה כדי לתקשר בין הצמתים. אפשר לעשות את זה באמצעות רשתות VPN או פתרונות קישוריות ספציפיים לענן.
  • הגדרת אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR
  • מוודאים ש-cert-manager מותקן בכל אשכול
  • הגדרת תקשורת בין אזורים
  • מוודאים שכל קבוצות ה-Pod של Cassandra יכולות לפענח את שמות המארחים שלהן. אם הערך של hostNetwork מוגדר כ-false, שם המארח הוא שם קבוצת ה-Pod של Cassandra. אם הערך של hostNetwork מוגדר כ-true, שם המארח הוא שם הצומת של Kubernetes שבו פועלת קבוצת ה-Pod של Cassandra.
  • הדרישות ל-Cassandra Multi Region:
    • אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של GKE On-Prem), צריך להפעיל את התכונה hostNetwork של Kubernetes על ידי הגדרת cassandra.hostNetwork: true בקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.

      מידע נוסף על הצורך ב-hostNetwork מופיע בקטע Island mode clusters and hostNetwork בהמשך.

    • מומלץ להפעיל את hostNetwork באשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים.
    • כשhostNetwork מופעל, צריך לוודא שצמתי העובדים יכולים לבצע חיפוש DNS קדימה של שמות המארחים שלהם. מערכת Apigee Cassandra משתמשת בחיפוש DNS כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה.
    • פותחים את הפורטים של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. מספרי היציאות של Cassandra מפורטים במאמר בנושא הגדרת יציאות.

מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.

AKS

  • כשמתקינים פריסות של Apigee בכמה אזורים בין רשתות שונות (למשל, ספקי ענן שונים, רשתות VPC שונות, ענן ורשת מקומית וכו'), צריך לספק קישוריות פנימית בין הרשתות הנפרדות האלה, ש-Cassandra יכולה להשתמש בה כדי לתקשר בין הצמתים. אפשר לעשות את זה באמצעות רשתות VPN או פתרונות קישוריות ספציפיים לענן.
  • לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
  • מוודאים ש-cert-manager מותקן בכל אשכול
  • מוודאים שכל קבוצות ה-Pod של Cassandra יכולות לפענח את שמות המארחים שלהן. אם הערך של hostNetwork הוא false, שם המארח הוא שם קבוצת ה-Pod של Cassandra. אם הערך של hostNetwork הוא true, שם המארח הוא שם הצומת של Kubernetes שבו פועלת קבוצת ה-Pod של Cassandra.
  • הדרישות ל-Cassandra Multi Region:
    • אם למרחב השמות של רשת ה-Pod אין קישוריות בין האשכולות (האשכולות פועלים במצב רשת איים, שהוא ברירת המחדל בהתקנות של AKS), צריך להפעיל את התכונה hostNetwork של Kubernetes על ידי הגדרת cassandra.hostNetwork: true בקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.

      מידע נוסף על הצורך ב-hostNetwork מופיע בקטע Island mode clusters and hostNetwork בהמשך.

    • מומלץ להפעיל את hostNetwork באשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים.
    • כשhostNetwork מופעל, צריך לוודא שצמתי העובדים יכולים לבצע חיפוש DNS קדימה של שמות המארחים שלהם. מערכת Apigee Cassandra משתמשת בשאילתת DNS קדימה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה.
    • פותחים את הפורטים של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. מספרי היציאות של Cassandra מפורטים במאמר בנושא הגדרת יציאות.

מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.

EKS

  • כשמתקינים פריסות של Apigee בכמה אזורים בין רשתות שונות (למשל, ספקי ענן שונים, רשתות VPC שונות, ענן ורשת מקומית וכו'), צריך לספק קישוריות פנימית בין הרשתות הנפרדות האלה, ש-Cassandra יכולה להשתמש בה כדי לתקשר בין הצמתים. אפשר לעשות את זה באמצעות רשתות VPN או פתרונות קישוריות ספציפיים לענן.
  • לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
  • מוודאים ש-cert-manager מותקן בכל אשכול
  • מוודאים שכל קבוצות ה-Pod של Cassandra יכולות לפענח את שמות המארחים שלהן. אם הערך של hostNetwork הוא false, שם המארח הוא שם קבוצת ה-Pod של Cassandra. אם הערך של hostNetwork הוא true, שם המארח הוא שם הצומת של Kubernetes שבו פועלת קבוצת ה-Pod של Cassandra.
  • הדרישות ל-Cassandra Multi Region:
    • אם למרחב השמות של רשת ה-pods אין קישוריות בין האשכולות (האשכולות פועלים במצב של רשת איים), צריך להפעיל את התכונה hostNetwork של Kubernetes על ידי הגדרת cassandra.hostNetwork: true בקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים. מערכת Amazon EKS משתמשת כברירת מחדל ב מודל רשת משולב לחלוטין.

      מידע נוסף על הצורך ב-hostNetwork מופיע בקטע Island mode clusters and hostNetwork בהמשך.

    • מומלץ להפעיל את hostNetwork באשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים.
    • כשhostNetwork מופעל, צריך לוודא שצמתי העובדים יכולים לבצע חיפוש DNS קדימה של שמות המארחים שלהם. מערכת Apigee Cassandra משתמשת בשאילתת DNS קדימה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה.
    • פותחים את הפורטים של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. מספרי היציאות של Cassandra מפורטים במאמר בנושא הגדרת יציאות.

מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.

OpenShift

  • כשמתקינים פריסות של Apigee בכמה אזורים בין רשתות שונות (למשל, ספקי ענן שונים, רשתות VPC שונות, ענן ורשת מקומית וכו'), צריך לספק קישוריות פנימית בין הרשתות הנפרדות האלה, ש-Cassandra יכולה להשתמש בה כדי לתקשר בין הצמתים. אפשר לעשות את זה באמצעות רשתות VPN או פתרונות קישוריות ספציפיים לענן.
  • לפני שממשיכים לשלבים להגדרת האשכול, צריך לעיין במדריך להתקנה היברידית כדי לוודא שמתקיימות הדרישות המוקדמות, כמו הגדרת Google Cloud והארגון.
  • מוודאים ש-cert-manager מותקן בכל אשכול
  • מוודאים שכל קבוצות ה-Pod של Cassandra יכולות לפענח את שמות המארחים שלהן. אם הערך של hostNetwork הוא false, שם המארח הוא שם קבוצת ה-Pod של Cassandra. אם הערך של hostNetwork הוא true, שם המארח הוא שם הצומת של Kubernetes שבו פועלת קבוצת ה-Pod של Cassandra.
  • הדרישות ל-Cassandra Multi Region:
    • אם למרחב השמות של רשת ה-pod אין קישוריות בין האשכולות (האשכולות פועלים במצב 'רשת איים', שהוא ברירת המחדל בהתקנות של OpenShift), צריך להפעיל את התכונה hostNetwork של Kubernetes על ידי הגדרת cassandra.hostNetwork: true בקובץ ההחלפות לכל האזורים בהתקנה של Apigee Hybrid מרובת אזורים.

      מידע נוסף על הצורך ב-hostNetwork מופיע בקטע Island mode clusters and hostNetwork בהמשך.

    • מומלץ להפעיל את hostNetwork באשכולות קיימים לפני שמרחיבים את ההגדרה של כמה אזורים לאזורים חדשים.
    • כשhostNetwork מופעל, צריך לוודא שצמתי העובדים יכולים לבצע חיפוש DNS קדימה של שמות המארחים שלהם. מערכת Apigee Cassandra משתמשת בשאילתת DNS קדימה כדי לקבל את כתובת ה-IP של המארח בזמן ההפעלה.
    • פותחים את הפורטים של Cassandra בין אשכולות Kubernetes בכל האזורים כדי לאפשר תקשורת בין צמתי עובדים באזורים ובמרכזי נתונים שונים. מספרי היציאות של Cassandra מפורטים במאמר בנושא הגדרת יציאות.

מידע מפורט זמין במאמרי העזרה בנושא Kubernetes.

אשכולות במצב Island ו-hostNetwork

יש שני מודלים עיקריים של רשתות לאשכולות Kubernetes: משולב לחלוטין (או שטוח) ומצב איים. מומלץ להשתמש במודל רשת שטוח ככל האפשר, כי הוא מפשט את הקישוריות של Cassandra בין אזורים. כשמגדירים אשכול Kubernetes במצב איים, רשת ה-Pod מבודדת. אי אפשר לתקשר ישירות בין Pods שפועלים באשכולות שונים באמצעות כתובת ה-IP של ה-Pod. מידע נוסף על ההבדלים בין שני מודלים הרשת האלה ודוגמאות לכל אחד מהם מופיע במאמר יישומים אופייניים של מודלים של רשתות.

כש-Apigee Hybrid פועל בשני אשכולות Kubernetes או יותר באמצעות מודל רשת במצב איים, צריך להפעיל את ההגדרה hostNetwork עבור Cassandra באמצעות המאפיין cassandra.hostNetwork. כברירת מחדל, קבוצות ה-Pod ב-Kubernetes מבודדות למרחבי שמות נפרדים ברשת, מה שמונע מהן להשתמש בכתובת ה-IP של צומת העובד ב-Kubernetes. אם הערך של hostNetwork הוא true, קבוצת ה-Pod לא מבודדת במרחב השמות של הרשת שלה, אלא משתמשת בכתובת ה-IP ובשם המארח של צומת העובד ב-Kubernetes שבו מתוזמנת קבוצת ה-Pod. האפשרות הזו מאפשרת ל-Cassandra להשתמש באופן מקורי בכתובת ה-IP של צומת העובד ב-Kubernetes ככתובת ה-IP שלה, וכך ליצור רשת מלאה בין כל ה-pods של Cassandra בכמה אשכולות שפועלים במצב אי.

תרגום שם המארח של Cassandra

למרות שפוד Cassandra לא פותר פודים אחרים של Cassandra לפי שם המארח, בהפעלה Cassandra בודק ששם המארח שלו ניתן לפענוח על ידי DNS. מכיוון ששם המארח של ה-pod זהה לשם המארח של צומת העובד ב-Kubernetes כש-hostNetwork מוגדר כ-true, צריך להיות אפשר לזהות את שם המארח של צומת העובד ככתובת IP באמצעות שירות ה-DNS של האשכול. אם שם המארח של צומת העובד של Kubernetes לא ניתן לפענוח, הפוד של Cassandra לא יופעל באופן מלא. לכן, חשוב ששמות המארחים של צומתי העובדים ב-Kubernetes יהיו ניתנים לפתרון מתוך הפודים באשכול כשמגדירים את hostNetwork ל-true.

הגדרת Apigee Hybrid למספר אזורים

בקטע הזה מוסבר איך להגדיר את Apigee hybrid למספר אזורים.

GKE

הגדרת מארח הזרעים במספר אזורים

בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.

  1. מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
    kubectl config use-context original-cluster-name
  2. מריצים את הפקודה הבאה kubectl כדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.

    כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    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
  3. מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים.
  4. במרכז הנתונים 2, מגדירים את cassandra.multiRegionSeedHost ואת cassandra.datacenter בניהול רכיבי מישור זמן הריצה, כאשר multiRegionSeedHost הוא אחת מכתובות ה-IP שמוחזרות על ידי הפקודה הקודמת:
    cassandra:
      multiRegionSeedHost: seed_host_IP
      datacenter: data_center_name
      rack: rack_name
      hostNetwork: false
      clusterName: cluster_name # must be the same for all regions

    לדוגמה:

    cassandra:
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      hostNetwork: false
      clusterName: my-apigee-cluster
  5. במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-overrides.yaml כמו שהגדרתם באזור הראשון.

הגדרת האזור החדש

אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.

כדי להגדיר את האזור החדש:

  1. מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
    1. מגדירים את ההקשר למרחב השמות המקורי:
      kubectl config use-context original-cluster-name
    2. מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
      kubectl get namespace namespace -o yaml > apigee-namespace.yaml
    3. מייצאים את הסוד apigee-ca לקובץ:
      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    4. מגדירים את ההקשר לשם האשכול של האזור החדש:
      kubectl config use-context new-cluster-name
    5. מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
      kubectl apply -f apigee-namespace.yaml
    6. מייבאים את הסוד לאשכול החדש:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ overrides-DC_name.yaml כולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.

    מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:

    apigeectl init -f overrides/overrides-DC_name.yaml
    apigeectl apply -f overrides/overrides-DC_name.yaml
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
    apigeectl check-ready -f overrides_DC_name.yaml
  4. מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  5. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
    1. מקבלים את 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"
      
    2. יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של 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 מתוך source region 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"
    3. מחילים את CassandraDataReplication באמצעות הפקודה הבאה:
      kubectl apply -f datareplication.yaml
    4. כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
      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
      }
  6. בודקים את תהליכי הבנייה מחדש מתוך היומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status.
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  7. מעדכנים את המארחים הראשוניים. צריך להסיר את 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 APIGEE_JMX_USER -pw APIGEE_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: us-west1
====================
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          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

GKE On-Prem

הגדרת מארח הזרעים במספר אזורים

בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.

  1. בקובץ overrides.yaml של האשכול המקורי, מוודאים שהערך של cassandra:hostNetwork מוגדר ל-true. לדוגמה:
    cassandra:
      hostNetwork: true

    מידע נוסף על המקרים שבהם צריך להגדיר את hostNetwork: true מופיע בקטע תנאים מוקדמים.

  2. אם הערך של cassandra:hostNetwork לא מוגדר ל-true, צריך לבצע את הפעולות הבאות:
    1. שינוי של cassandra.hostNetwork ל-true.
    2. מחילים את קובץ ההגדרות overrides.yaml באמצעות הפקודה:
        apigeectl apply -f overrides.yaml --datastore
        
    3. מחכים שפודים של Cassandra ישלימו הפעלה מחדש מדורגת.
    4. בודקים שהאשכול של Cassandra תקין באמצעות הפקודות הבאות:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      מוודאים שכל הצמתים של Cassandra בפלט הם בסטטוס UN (Up/Normal):

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      מוודאים שאין צמתים שלא ניתן להגיע אליהם שמופיעים בפלט.

  3. מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
    kubectl config use-context original-cluster-name
  4. מריצים את הפקודה הבאה kubectl כדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.

    כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    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
  5. מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים.
  6. במרכז הנתונים 2, מגדירים את cassandra.multiRegionSeedHost בקובץ ההחלפות, כאשר multiRegionSeedHost הוא אחת מכתובות ה-IP שהוחזרו על ידי הפקודה הקודמת:
    cassandra:
      hostNetwork: true
      multiRegionSeedHost: seed_host_IP
      datacenter: data_center_name
      rack: rack_name
        clusterName: cluster_name # must be the same for all regions

    לדוגמה:

    cassandra:
      hostNetwork: true
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      clusterName: my-apigee-cluster
  7. במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-overrides.yaml כמו שהגדרתם באזור הראשון.

הגדרת האזור החדש

אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.

כדי להגדיר את האזור החדש:

  1. מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
    1. מגדירים את ההקשר למרחב השמות המקורי:
      kubectl config use-context original-cluster-name
    2. מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
      kubectl get namespace namespace -o yaml > apigee-namespace.yaml
    3. מייצאים את הסוד apigee-ca לקובץ:
      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    4. מגדירים את ההקשר לשם האשכול של האזור החדש:
      kubectl config use-context new-cluster-name
    5. מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
      kubectl apply -f apigee-namespace.yaml
    6. מייבאים את הסוד לאשכול החדש:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ overrides-DC_name.yaml כולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.

    מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:

    apigeectl init -f overrides/overrides-DC_name.yaml
    apigeectl apply -f overrides/overrides-DC_name.yaml
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
    apigeectl check-ready -f overrides_DC_name.yaml
  4. מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  5. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
    1. מקבלים את 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"
      
    2. יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של 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 מתוך source region 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"
    3. מחילים את CassandraDataReplication באמצעות הפקודה הבאה:
      kubectl apply -f datareplication.yaml
    4. כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
      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
      }
  6. בודקים את תהליכי הבנייה מחדש מתוך היומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status.
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  7. מעדכנים את המארחים הראשוניים. צריך להסיר את 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 APIGEE_JMX_USER -pw APIGEE_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: us-west1
====================
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          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

AKS

יצירת רשת וירטואלית בכל אזור

כדי להגדיר תקשורת בין אזורים שונים, צריך לפעול לפי ההמלצות של Azure שמופיעות כאן: VNet-to-VNet: Connecting Virtual Networks in Azure across Different Regions.

יצירת אשכולות מרובי-אזורים

מגדירים אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR. אפשר גם לעיין במאמר שלב 1: יצירת אשכול. משתמשים במיקומים ובשמות של הרשתות הווירטואליות שיצרתם קודם.

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

הגדרת מארח הזרעים במספר אזורים

בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.

  1. בקובץ overrides.yaml של האשכול המקורי, מוודאים שהערך של cassandra:hostNetwork מוגדר ל-true. לדוגמה:
    cassandra:
      hostNetwork: true

    מידע נוסף על המקרים שבהם צריך להגדיר את hostNetwork: true מופיע בקטע תנאים מוקדמים.

  2. אם הערך של cassandra:hostNetwork לא מוגדר ל-true, צריך לבצע את הפעולות הבאות:
    1. שינוי של cassandra.hostNetwork ל-true.
    2. מחילים את קובץ ההגדרות overrides.yaml באמצעות הפקודה:
        apigeectl apply -f overrides.yaml --datastore
        
    3. מחכים שפודים של Cassandra ישלימו הפעלה מחדש מדורגת.
    4. בודקים שהאשכול של Cassandra תקין באמצעות הפקודות הבאות:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      מוודאים שכל הצמתים של Cassandra בפלט הם בסטטוס UN (Up/Normal):

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      מוודאים שאין צמתים שלא ניתן להגיע אליהם שמופיעים בפלט.

  3. מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
    kubectl config use-context original-cluster-name
  4. מריצים את הפקודה הבאה kubectl כדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.

    כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    apigee-cassandra-default-0  1/1   Running   0   4d17h   120.38.1.9  aks-agentpool-21207753-vmss000000
  5. מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים. בדוגמה הזו, שבה פועל רק אשכול קסנדרה עם צומת יחיד, מארח הזרע הוא 120.38.1.9.
  6. במרכז הנתונים 2, מעתיקים את קובץ ההחלפות לקובץ חדש ששמו כולל את שם האשכול. לדוגמה, overrides_your_cluster_name.yaml.
  7. במרכז הנתונים 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
         clusterName: cluster_name # must be the same for all regions

    לדוגמה:

    cassandra:
      multiRegionSeedHost: 120.38.1.9
      datacenter: "centralus"
      rack: "ra-1"
      hostNetwork: true
      clusterName: my-apigee-cluster
  8. במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-overrides_your_cluster_name.yaml כמו שהגדרתם באזור הראשון.

הגדרת האזור החדש

אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.

כדי להגדיר את האזור החדש:

  1. מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
    1. מגדירים את ההקשר למרחב השמות המקורי:
      kubectl config use-context original-cluster-name
    2. מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
      kubectl get namespace namespace -o yaml > apigee-namespace.yaml
    3. מייצאים את הסוד apigee-ca לקובץ:
      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    4. מגדירים את ההקשר לשם האשכול של האזור החדש:
      kubectl config use-context new-cluster-name
    5. מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
      kubectl apply -f apigee-namespace.yaml
    6. מייבאים את הסוד לאשכול החדש:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ overrides_your_cluster_name.yaml כולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.

    מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  5. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
    1. מקבלים את 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"
      
    2. יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של 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 מתוך source region 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"
    3. מחילים את CassandraDataReplication באמצעות הפקודה הבאה:
      kubectl apply -f datareplication.yaml
    4. כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
      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
      }
  6. בודקים את תהליכי הבנייה מחדש מתוך היומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status.
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  7. מעדכנים את המארחים הראשוניים. צריך להסיר את 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 APIGEE_JMX_USER -pw APIGEE_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: us-west1
====================
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          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

EKS

יצירת רשת וירטואלית בכל אזור

פועלים לפי ההמלצות של AWS ליצירת תקשורת בין אזורים, כפי שמתואר במאמר מהו קישור בין רשתות שכנות (peering) ב-VPC?. המונח של AWS לשימוש באזורים שונים הוא inter-Region VPC peering.

יצירת אשכולות מרובי-אזורים

מגדירים אשכולות Kubernetes בכמה אזורים עם בלוקים שונים של CIDR. אפשר גם לעיין במאמר שלב 1: יצירת אשכול. משתמשים במיקומים ובשמות של הרשתות הווירטואליות שיצרתם קודם.

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

הגדרת מארח הזרעים במספר אזורים

בקטע הזה מתואר איך להרחיב את אשכול Cassandra הקיים לאזור חדש. ההגדרה הזו מאפשרת לאזור החדש להפעיל את האשכול ולהצטרף למרכז הנתונים הקיים. בלי ההגדרה הזו, אשכולות Kubernetes מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.

  1. בקובץ overrides.yaml של האשכול המקורי, מוודאים שהערך של cassandra:hostNetwork מוגדר ל-true. לדוגמה:
    cassandra:
      hostNetwork: true

    מידע נוסף על המקרים שבהם צריך להגדיר את hostNetwork: true מופיע בקטע תנאים מוקדמים.

  2. אם הערך של cassandra:hostNetwork לא מוגדר ל-true, צריך לבצע את הפעולות הבאות:
    1. שינוי של cassandra.hostNetwork ל-true.
    2. מחילים את קובץ ההגדרות overrides.yaml באמצעות הפקודה:
        apigeectl apply -f overrides.yaml --datastore
        
    3. מחכים שפודים של Cassandra ישלימו הפעלה מחדש מדורגת.
    4. בודקים שהאשכול של Cassandra תקין באמצעות הפקודות הבאות:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
        

      מוודאים שכל הצמתים של Cassandra בפלט הם בסטטוס UN (Up/Normal):

        nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD describecluster
        

      מוודאים שאין צמתים שלא ניתן להגיע אליהם שמופיעים בפלט.

  3. מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
    kubectl config use-context original-cluster-name
  4. מריצים את הפקודה הבאה 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
  5. מחליטים איזו מכתובות ה-IP שמוחזרות מהפקודה הקודמת תהיה מארח ה-seed של כמה אזורים. בדוגמה הזו, שבה פועל רק אשכול קסנדרה עם צומת יחיד, מארח הזרע הוא 120.38.1.9.
  6. במרכז הנתונים 2, מעתיקים את קובץ ההחלפות לקובץ חדש ששמו כולל את שם האשכול. לדוגמה, overrides_your_cluster_name.yaml.
  7. במרכז הנתונים 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
         clusterName: cluster_name # must be the same for all regions

    לדוגמה:

    cassandra:
      multiRegionSeedHost: 120.38.1.9
      datacenter: "centralus"
      rack: "ra-1"
      hostNetwork: true
      clusterName: my-apigee-cluster
  8. במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-overrides_your_cluster_name.yaml כמו שהגדרתם באזור הראשון.

הגדרת האזור החדש

אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.

כדי להגדיר את האזור החדש:

  1. מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
    1. מגדירים את ההקשר למרחב השמות המקורי:
      kubectl config use-context original-cluster-name
    2. מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
      kubectl get namespace namespace -o yaml > apigee-namespace.yaml
    3. מייצאים את הסוד apigee-ca לקובץ:
      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    4. מגדירים את ההקשר לשם האשכול של האזור החדש:
      kubectl config use-context new-cluster-name
    5. מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
      kubectl apply -f apigee-namespace.yaml
    6. מייבאים את הסוד לאשכול החדש:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ overrides_your_cluster_name.yaml כולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.

    מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול 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
  5. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
    1. מקבלים את 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"
      
    2. יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של 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 מתוך source region 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"
    3. מחילים את CassandraDataReplication באמצעות הפקודה הבאה:
      kubectl apply -f datareplication.yaml
    4. כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
      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
      }
  6. בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה 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
  7. מעדכנים את המארחים הראשוניים. צריך להסיר את 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: us-west1
====================
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 מרובי-אזורים לא ידעו על קיומם של אשכולות אחרים.

  1. בקובץ overrides.yaml של האשכול המקורי, מוודאים שהערך של cassandra:hostNetwork מוגדר ל-true. לדוגמה:
    cassandra:
      hostNetwork: true

    מידע נוסף על המקרים שבהם צריך להגדיר את hostNetwork: true מופיע בקטע תנאים מוקדמים.

  2. אם הערך של cassandra:hostNetwork לא מוגדר ל-true, צריך לבצע את הפעולות הבאות:
    1. שינוי של cassandra.hostNetwork ל-true.
    2. מחילים את קובץ ההגדרות overrides.yaml באמצעות הפקודה:
        apigeectl apply -f overrides.yaml --datastore
        
    3. מחכים שפודים של Cassandra ישלימו הפעלה מחדש מדורגת.
    4. בודקים שהאשכול של Cassandra תקין באמצעות הפקודות הבאות:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      מוודאים שכל הצמתים של Cassandra בפלט הם בסטטוס UN (Up/Normal):

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      מוודאים שאין צמתים שלא ניתן להגיע אליהם שמופיעים בפלט.

  3. מגדירים את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed:
    kubectl config use-context original-cluster-name
  4. מריצים את הפקודה הבאה kubectl כדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.

    כתובת של מארח ראשוני מאפשרת למופע אזורי חדש למצוא את האשכול המקורי בהפעלה הראשונה כדי ללמוד את הטופולוגיה של האשכול. כתובת המארח הראשוני מוגדרת כנקודת הקשר באשכול.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    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
  5. בוחרים את כתובת ה-IP של מארח Cassandra של המקור לשימוש כמארח seed רב-אזורי. בדוגמה הזו, האשכול apigee-cassandra-default-0 פועל, והמארח הראשי הוא 10.0.0.11.
  6. במרכז הנתונים 2, מעתיקים את קובץ ההחלפות לקובץ חדש ששמו כולל את שם האשכול. לדוגמה, overrides_your_cluster_name.yaml.
  7. במרכז הנתונים 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
         rack: rack_name
         clusterName: cluster_name # must be the same for all regions

    לדוגמה:

    cassandra:
      hostNetwork: true
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      clusterName: my-apigee-cluster
  8. במרכז הנתונים או באזור החדש, לפני שמתקינים את ההיברידי, מגדירים את אותם אישורי TLS ואת אותם פרטי כניסה ב-overrides_your_cluster_name.yaml כמו שהגדרתם באזור הראשון.

הגדרת האזור החדש

אחרי שמגדירים את המארח הראשי, אפשר להגדיר את האזור החדש.

כדי להגדיר את האזור החדש:

  1. מעתיקים את האישור מהאשכול הקיים לאשכול החדש. ה-CA root החדש משמש את Cassandra ורכיבים היברידיים אחרים ל-mTLS. לכן, חשוב שיהיו אישורים עקביים בכל האשכול.
    1. מגדירים את ההקשר למרחב השמות המקורי:
      kubectl config use-context original-cluster-name
    2. מייצאים את ההגדרות הנוכחיות של מרחב השמות לקובץ:
      kubectl get namespace namespace -o yaml > apigee-namespace.yaml
    3. מייצאים את הסוד apigee-ca לקובץ:
      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    4. מגדירים את ההקשר לשם האשכול של האזור החדש:
      kubectl config use-context new-cluster-name
    5. מייבאים את הגדרת מרחב השמות לאשכול החדש. אם אתם משתמשים במרחב שמות אחר באזור החדש, הקפידו לעדכן את מרחב השמות בקובץ:
      kubectl apply -f apigee-namespace.yaml
    6. מייבאים את הסוד לאשכול החדש:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. מתקינים את ההגדרה ההיברידית באזור החדש. חשוב לוודא שקובץ overrides_your_cluster_name.yaml כולל את אותם אישורי TLS שהוגדרו באזור הראשון, כמו שמוסבר בקטע הקודם.

    מריצים את שתי הפקודות הבאות כדי להתקין את Hybrid באזור החדש:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה ההיברידית הצליחה:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. מריצים את הפקודה הבאה כדי לוודא שהגדרת אשכול Cassandra בוצעה. בפלט צריכים להופיע גם מרכזי הנתונים הקיימים וגם מרכזי הנתונים החדשים.
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  5. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים.
    1. מקבלים את 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"
      
    2. יוצרים קובץ של משאב מותאם אישית לשכפול נתונים של 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 מתוך source region 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"
    3. מחילים את CassandraDataReplication באמצעות הפקודה הבאה:
      kubectl apply -f datareplication.yaml
    4. כדי לוודא מה סטטוס הבנייה מחדש, מריצים את הפקודה הבאה.
      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
      }
  6. בודקים את תהליכי הבנייה מחדש מתוך היומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status.
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_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
  7. מעדכנים את המארחים הראשוניים. צריך להסיר את 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 APIGEE_JMX_USER -pw APIGEE_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: us-west1
====================
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          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

פתרון בעיות

מידע נוסף זמין במאמר בנושא כשל ברפליקציה של נתוני Cassandra.