גיבוי ושחזור עם אחסון בהתאמה אישית

בקטע הזה מוסבר איך להגדיר גיבוי ושחזור של מסד הנתונים של Cassandra באמצעות ssh ומערכת הקבצים שלכם, במקום באמצעות Google Cloud. מידע נוסף:

מהו גיבוי ושחזור של נתוני Cassandra באמצעות אחסון בהתאמה אישית?

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

הגדרת גיבויים ללא שירותי ענן

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

התהליך כולל את החלקים הבאים:

הגדרת השרת ו-SSH

  1. מגדירים שרת Linux או Unix לגיבויים. צריך להיות אפשר להגיע לשרת הזה באמצעות SSH ממישור זמן הריצה של Apigee Hybrid. צריך שיהיה בו מספיק נפח אחסון לגיבויים.
  2. מגדירים שרת SSH בשרת או מוודאים שמוגדר בו שרת SSH מאובטח.
  3. יוצרים זוג מפתחות SSH ושומרים את קובץ המפתח הפרטי בנתיב שאפשר לגשת אליו ממישור זמן הריצה ההיברידי. חובה להשתמש בסיסמה ריקה לצמד המפתחות, אחרת הגיבוי ייכשל. לדוגמה:
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+
  4. יוצרים חשבון משתמש בשרת הגיבוי עם השם apigee. מוודאים שלמשתמש החדש apigee יש ספריית בית ב-/home.
  5. בשרת הגיבוי, יוצרים ספרייה בשם ssh בספרייה החדשה /home/apigee.
  6. מעתיקים את המפתח הציבורי (ssh_key.pub בדוגמה הקודמת) לקובץ בשם authorized_keys בספרייה החדשה /home/apigee/ssh. לדוגמה:
    cd /home/apigee
    mkdir .ssh
    cd .ssh
    vi authorized_keys
  7. בשרת הגיבוי, יוצרים ספריית גיבוי בתוך הספרייה /home/apigee/. ספריית הגיבוי יכולה להיות כל ספרייה, בתנאי שלמשתמש apigee יש גישה אליה. לדוגמה:
    cd /home/apigee
    mkdir cassandra-backup
  8. בודקים את החיבור. צריך לוודא שרכיבי ה-pod של Cassandra יכולים להתחבר לשרת הגיבוי באמצעות SSH:
    1. מתחברים למעטפת של Cassandra pod. לדוגמה:
      kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash

      כאשר APIGEE_CASSANDRA_DEFAULT_0 הוא השם של Cassandra pod. משנים את הערך לשם הפוד שממנו רוצים להתחבר.

    2. מתחברים באמצעות SSH לשרת הגיבוי, באמצעות כתובת ה-IP של השרת:
      ssh apigee@BACKUP_SERVER_IP

הגדרת לוח הזמנים והיעד לגיבוי

אתם מגדירים את לוח הזמנים ואת היעד לגיבוי בקובץ overrides.yaml.

  1. מוסיפים את הפרמטרים הבאים לקובץ overrides.yaml:

    פרמטרים

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    דוגמה

    cassandra:
      backup:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    כאשר:

    מאפיין (property) תיאור
    backup:enabled הגיבוי מושבת כברירת מחדל. צריך להגדיר את המאפיין הזה לערך true.
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    הנתיב במערכת הקבצים המקומית לקובץ המפתח הפרטי של SSH (שנקרא ssh_key בשלב שבו יצרתם את זוג מפתחות ה-SSH).

    backup:server

    BACKUP_SERVER_IP

    כתובת ה-IP של שרת הגיבוי.

    backup:storageDirectory

    BACKUP_DIRECTORY

    השם של ספריית הגיבוי בשרת הגיבוי. זו חייבת להיות ספרייה בתוך home/apigee (שם ספריית הגיבוי הוא cassandra_backup, כפי שמופיע בשלב שבו יצרתם את ספריית הגיבוי).

    backup:cloudProvider

    HYBRID

    נדרש המאפיין cloudProvider: "HYBRID".

    backup:schedule

    SCHEDULE

    השעה שבה הגיבוי מתחיל, שצוינה בתחביר crontab רגיל. ברירת מחדל: 0 2 * * *

  2. משתמשים בפקודה apigeectl כדי להחיל את הגדרות הגיבוי על היקף האחסון של האשכול:
    $APIGEECTL_HOME/apigeectl --datastore -f YOUR_OVERRIDES_FILE

    YOUR_OVERRIDES_FILE הוא הנתיב לקובץ ההחלפות שערכתם.

הגדרת שחזור

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

ההוראות לשחזור שבהמשך מיועדות לפריסות באזור יחיד שלא משתמשות ב-Google Cloud Storage לגיבויים. למידע על פריסות אחרות, קראו את המאמרים הבאים:

כדי לשחזר גיבויים של Cassandra:

  1. יוצרים מרחב שמות חדש באשכול Kubernetes הקיים שישמש לשחזור הפריסה של זמן הריצה ההיברידי. אל תשתמשו בשם המקורי של מרחב השמות בשביל מרחב השמות החדש. אל תשתמשו במרחב השמות הישן לשחזור.
  2. בספריית השורש של ההתקנה ההיברידית, יוצרים קובץ חדש בשם overrides-restore.yaml.
  3. מעתיקים את ההגדרה המלאה של Cassandra מהקובץ המקורי overrides.yaml לקובץ החדש overrides-restore.yaml. לדוגמה:
    cp ./overrides.yaml ./overrides-restore.yaml
    
  4. מוסיפים רכיב של מרחב שמות לקובץ overrides-restore.yaml החדש.

    פרמטרים

    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      restore:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID"  # required verbatim "HYBRID" (all caps)
        snapshotTimestamp: "BACKUP_TO_RESTORE"
      ...

    דוגמה

    namespace: cassandra-restore
    cassandra:
      restore:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        snapshotTimestamp: "20201001183903"
  5. כאשר:

    מאפיין (property) תיאור
    namespace

    YOUR_RESTORE_NAMESPACE

    השם של מרחב השמות החדש שיצרתם בשלב 1 עבור אשכול Cassandra החדש. אל תשתמשו באותו מרחב שמות שבו השתמשתם עבור האשכול המקורי.

    restore:enabled השחזור מושבת כברירת מחדל. צריך להגדיר את המאפיין הזה לערך true.
    restore:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    הנתיב במערכת הקבצים המקומית לקובץ המפתח הפרטי של SSH (בשם ssh_key בשלב שבו יצרתם את זוג מפתחות ה-SSH).

    restore:server

    BACKUP_SERVER_IP

    כתובת ה-IP של שרת הגיבוי.

    restore:storageDirectory

    BACKUP_DIRECTORY

    השם של ספריית הגיבוי בשרת הגיבוי. זו חייבת להיות ספרייה בתוך home/apigee (שם ספריית הגיבוי הוא cassandra_backup, כפי שמופיע בשלב שבו יצרתם את ספריית הגיבוי).

    restore:cloudProvider

    HYBRID

    נדרש המאפיין cloudProvider: "HYBRID".

    restore:snapshotTimestamp

    BACKUP_TO_RESTORE

    גיבוי ספציפי שרוצים לשחזר, שצוין בתחביר crontab רגיל (אסור להשתמש בתווים כלליים).

  6. משנים את התווית app בכל צומתי Cassandra במרחב השמות הישן על ידי הפעלת הפקודה הבאה:
    kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
    
  7. יוצרים פריסה חדשה של סביבת ריצה היברידית. הפעולה הזו תיצור אשכול Cassandra חדש ותתחיל לשחזר את נתוני הגיבוי לאשכול:
    ./apigeectl init  -f ../overrides-restore.yaml
    
    ./apigeectl apply  -f ../overrides-restore.yaml
    
  8. אחרי שהשחזור יסתיים, צריך להעביר את התנועה לשימוש באשכול Cassandra במרחב השמות החדש. מריצים את הפקודות הבאות כדי להעביר את התנועה:

    kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
    
    kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
    
  9. אחרי שהעברת התנועה מסתיימת, אפשר להגדיר מחדש את הגיבויים באשכול המשוחזר על ידי הסרת ההגדרה restore והוספת ההגדרה backup לקובץ overrides-restore.yaml. מחליפים את YOUR_RESTORE_NAMESPACE בשם החדש של מרחב השמות שנוצר בשלב 1.
    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      backup:
        enabled: true
        serviceAccountPath: SA_JSON_FILE_PATH
        dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
        schedule: BACKUP_SCHEDULE_CODE
      ...

    לאחר מכן מריצים את הפקודה הבאה כדי להחיל את הגדרות backup:

    ./apigeectl apply  -f ../overrides-restore.yaml