יצירת קובצי snapshot של דיסקים ב-Linux שכוללים ריקון מידע

אתם יכולים ליצור תמונות מצב של Persistent Disk שמחוברים למכונות וירטואליות (VM) של Linux, שכוללות גיבוי כולל ריקון מידע. באופן כללי, איכות קובץ ה-snapshot של הדיסק תלויה ביכולת של האפליקציות לשחזר מקובצי snapshot שנוצרו במהלך עומסי עבודה כבדים של כתיבה. תמונות מצב כוללות ריקון מידע מתעדות את מצב נתוני האפליקציה בזמן הגיבוי, אחרי שכל הטרנזקציות של האפליקציה הושלמו וכל פעולות הכתיבה בהמתנה רוקנו לדיסק.

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

כדי ליצור קובץ snapshot של הדיסקים שכולל ריקון מידע, מבצעים את התהליך הבא:

  1. כדי להכין את סביבת האורח לגיבוי כולל ריקון מידע, יוצרים סקריפטים מותאמים אישית של מעטפת שיפעלו לפני ואחרי צילום ה-snapshot.
  2. קובעים את הגדרות קובץ ה-snapshot במכונה הווירטואלית.
  3. יוצרים קובץ snapshot כשהאפשרות guest-flush מופעלת. האפשרות guest-flush מפעילה את הסקריפטים שלפני ואחרי יצירת קובץ ה-snapshot.

לפני שמתחילים

תפקידים והרשאות נדרשים

כדי לקבל את ההרשאות שדרושות ליצירת תמונת מצב שכוללת ריקון מידע, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות כדי ליצור קובץ snapshot כולל ריקון מידע. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי ליצור קובץ snapshot שכולל גיבוי כולל ריקון מידע, נדרשות ההרשאות הבאות:

  • ‫compute.snapshots.create בפרויקט
  • compute.disks.createSnapshot בדיסק

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

סוגי הדיסקים הנתמכים

אתם יכולים ליצור תמונות מצב של גיבוי כולל ריקון מידע לנפחי Persistent Disk שמחוברים למכונות Linux.

אמצעי אחסון מסוג Hyperdisk לא תומכים ב-guest-flush או בשירות Volume Shadow Copy Service ‏(VSS). כדי ליצור קובצי snapshot של גיבוי כולל ריקון מידע לנפחי Hyperdisk, צריך להשהות את האפליקציה באופן ידני לפני שיוצרים את קובץ ה-snapshot. מידע נוסף זמין במאמר יצירה ידנית של תמונות מצב שכוללות ריקון מידע.

מגבלות

אלה המגבלות ביצירת תמונות מצב של גיבוי כולל ריקון מידע ב-Linux:

  • עקביות האפליקציה תלויה בהתנהגות של הסקריפטים המותאמים אישית לפני ואחרי קובץ ה-snapshot, ולא בפעולת ה-snapshot עצמה.
  • כשמשתמשים באפשרות guest-flush בבקשה ליצירת קובץ snapshot, קובץ ה-snapshot לא נוצר אם הסקריפט מחזיר שגיאה או מגיע למגבלת הזמן הקצוב לתפוגה.
  • אמצעי אחסון ב-Hyperdisk לא תומכים ב-guest-flush.

יצירת סקריפטים לפני ואחרי תמונת המצב

לפני שממשיכים, מעדכנים את סביבת האורח כדי להריץ את התוכנה העדכנית ביותר ב-VM של Linux.

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

  • משהים את האפליקציות או את התהליכים של מערכת ההפעלה שפועלים במכונה הווירטואלית וכותבים נתונים בדיסק.
  • מרוקנים את מאגרי הנתונים של הדיסק. לדוגמה, ל-MySQL יש הצהרת FLUSH. השתמשו בכלי שזמין לאפליקציה שלכם.
  • סנכרון של מערכת הקבצים.

דוגמת הקוד הבאה מציגה סקריפט לפני קובץ snapshot. שימו לב ל-#! התווים הראשונים.

#!/bin/bash
sudo fsfreeze -f [example-disk-location]

הקוד לדוגמה הבא מציג סקריפט של תמונת מצב לאחר מכן. שימו לב ל-#! התווים הראשונים.

#!/bin/bash
sudo fsfreeze -u [example-disk-location]

אתם צריכים לשמור את הסקריפטים במכונה הווירטואלית בספרייה /etc/google/snapshots/. הנתיב המלא של הסקריפט לפני הגיבוי צריך להיות /etc/google/snapshots/pre.sh והנתיב המלא של הסקריפט אחרי הגיבוי צריך להיות /etc/google/snapshots/post.sh.

הפניה לדיסקים ספציפיים בסקריפטים

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

הארגומנט מופיע בפורמט הבא:

  • דיסקים שמחוברים ל-SCSI: רשימה מופרדת בפסיקים של צמדי <target/lun>.
  • דיסקים שמחוברים ל-NVME: רשימה מופרדת בפסיקים של צמדי <nvme:namespace>.

לדוגמה, דיסק אתחול שמחובר ל-SCSI עשוי להופיע בתור 1/0, ודיסק נוסף שמחובר למכונה הווירטואלית עשוי להופיע בתור 2/0.

עריכת קובץ התצורה של סביבת האורח

כדי להגדיר את ההגדרות של קובץ snapshot עם גיבוי כולל ריקון מידע, מעדכנים קובץ תצורה ספציפי ב-VM.

  1. פותחים או יוצרים את קובץ התצורה של סביבת האורח.

    edit /etc/default/instance_configs.cfg
    
  2. מוסיפים את הקטע הבא לקובץ התצורה, שומרים את השינויים ויוצאים מהעורך.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫ENABLED: צריך להגדיר את הערך true כדי להפעיל את התכונה "גיבוי כולל ריקון מידע". ערך ברירת המחדל הוא false.
    • ‫TIMEOUT_SECONDS: מספר השניות שבהן הסקריפט שלפני או אחרי קובץ ה-snapshot יכול לפעול לפני שתחול חריגת זמן. הערך של המספר השלם צריך להיות בין 0 ל-300. ערך ברירת המחדל הוא 60.

  3. מפעילים מחדש את Guest Agent כדי להשתמש בהגדרות האישיות החדשות.

    $ sudo systemctl restart google-guest-agent.service
    

יצירת תמונת מצב כשהאפשרות guest-flush מופעלת

באמצעות מסוף Google Cloud ,‏ Google Cloud CLI או REST, יוצרים קובץ snapshot כשהאפשרות guest-flush מופעלת. הפעולה הזו מריצה את הסקריפטים לפני ואחרי יצירת קובץ ה-snapshot.

המסוף

  1. נכנסים לדף Create a Snapshot במסוף Google Cloud .

    כניסה לדף Create a Snapshot
  2. מזינים שם לתמונת המצב.
  3. בוחרים סוג תמונת מצב. ברירת המחדל היא קובץ snapshot מסוג STANDARD, שהוא האפשרות הטובה ביותר לגיבוי לטווח ארוך ולתוכנית התאוששות מאסון (DR).

    כדי לשמור נתונים בצורה חסכונית יותר, בוחרים באפשרות קובץ snapshot של ארכיון.

  4. אופציונלי: מזינים תיאור של קובץ ה-snapshot.
  5. בקטע Source disk, בוחרים את הדיסק הקיים שרוצים ליצור לו קובץ snapshot.
  6. בקטע Location, בוחרים את מיקום האחסון של קובץ ה-snapshot.

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

    1. בוחרים את סוג מיקום האחסון הרצוי לתמונת המצב.

      • בוחרים באפשרות Multi-regional כדי לקבל זמינות גבוהה יותר בעלות גבוהה יותר.
      • כדי לקבל יותר שליטה על המיקום הפיזי של הנתונים בעלות נמוכה יותר, בוחרים באפשרות Regional snapshots.
    2. בשדה Select location, בוחרים את האזור הספציפי או את מספר האזורים שבהם רוצים להשתמש. כדי להשתמש באזור או במספר האזורים שהכי קרובים לדיסק המקור, בוחרים באפשרות Based on disk's location.
  7. מסמנים את האפשרות Enable application consistent snapshot.
  8. לוחצים על Create כדי ליצור את קובץ ה-snapshot.

gcloud

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

  • כדי ליצור קובץ snapshot במיקום ברירת המחדל שהוגדר מראש או בהתאמה אישית בהגדרות של קובצי ה-snapshot, משתמשים בפקודה gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • לחלופין, כדי לשנות את הגדרות קובץ ה-snapshot וליצור קובץ snapshot במיקום אחסון בהתאמה אישית, צריך לכלול את הדגל --storage-location כדי לציין איפה לאחסן את קובץ ה-snapshot.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    
  • (גרסת טרום-השקה (Preview)) כדי ליצור קובץ snapshot ברמת האזור באזור מותר, צריך לכלול את הדגל --region כדי לציין איפה ליצור את קובץ ה-snapshot.

    gcloud beta compute snapshots create SNAPSHOT_NAME \
        --region=SNAPSHOT_SCOPE_REGION
        --source-disk=SOURCE_DISK_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --snapshot-type=SNAPSHOT_TYPE
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫SNAPSHOT_NAME: שם לתמונת המצב.
  • ‫SOURCE_ZONE: האזור של דיסק המקור.
  • ‫SOURCE_DISK_NAME: השם של אמצעי האחסון בדיסק שממנו רוצים ליצור קובץ snapshot.
  • ‫SNAPSHOT_TYPE: סוג קובץ ה-snapshot, ‏ STANDARD או ARCHIVE. אם לא מציינים סוג של קובץ snapshot, נוצר קובץ snapshot מסוג STANDARD.
  • ‫STORAGE_LOCATION: אופציונלי: לתמונות מצב בהיקף גלובלי, האזור הגיאוגרפי במספר אזורים של Cloud Storage או האזור של Cloud Storage שבו רוצים לאחסן את תמונת המצב. אפשר לציין רק מיקום אחסון אחד.

    משתמשים בפרמטר --storage-location רק כשרוצים לשנות את מיקום האחסון שהוגדר כברירת מחדל (מוגדר מראש או בהתאמה אישית) בהגדרות של קובץ ה-snapshot.

  • ‫SNAPSHOT_SCOPE_REGION: אופציונלי: לאובייקטים מסוג snapshot ברמת האזור, האזור שבו נמצא ה-snapshot. אם כוללים את הפרמטר הזה, אי אפשר להשתמש בפרמטר --storage-location. השדה STORAGE_LOCATION מוגדר אוטומטית לערך SNAPSHOT_SCOPE_REGION.

REST

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

  • כדי ליצור קובץ snapshot במיקום ברירת המחדל שהוגדר מראש או בהתאמה אישית בהגדרות של קובצי ה-snapshot, שולחים בקשת POST אל ה-method‏ snapshots.insert:

    POST https://compute./compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • לחלופין, כדי לשנות את הגדרות קובץ ה-snapshot וליצור קובץ snapshot במיקום אחסון בהתאמה אישית, שולחים בקשת POST ל-method‏ snapshots.insert וכוללים את המאפיין storageLocations בבקשה:

    POST https://compute./compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    
  • ‫(גרסת טרום-השקה (Preview)) כדי ליצור קובץ snapshot ברמת האזור באזור מותר, שולחים בקשת POST ל-method‏ snapshots.insert ומגדירים את אזור היצירה:

    POST https://compute./compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotType": "SNAPSHOT_TYPE"
    }
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫DESTINATION_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_NAME: שם לתמונת המצב.
  • ‫SOURCE_PROJECT_ID: מזהה הפרויקט של דיסק המקור.
  • ‫SOURCE_ZONE: האזור של דיסק המקור.
  • ‫SOURCE_DISK_NAME: שם הדיסק שממנו רוצים ליצור קובץ snapshot.
  • ‫SNAPSHOT_TYPE: סוג קובץ ה-snapshot, ‏ STANDARD או ARCHIVE. אם לא מציינים סוג של קובץ snapshot, נוצר קובץ snapshot מסוג STANDARD.
  • ‫STORAGE_LOCATION: אופציונלי: לתמונות מצב בהיקף גלובלי, האזור הגיאוגרפי במספר אזורים של Cloud Storage או האזור של Cloud Storage שבו רוצים לאחסן את תמונת המצב. אפשר לציין רק מיקום אחסון אחד.

    משתמשים בפרמטר storageLocations רק כשרוצים לשנות את מיקום האחסון שהוגדר כברירת מחדל (מוגדר מראש או בהתאמה אישית) בהגדרות של קובץ ה-snapshot.

  • ‫SNAPSHOT_SCOPE_REGION: אופציונלי: לתמונות מצב ברמת האזור, האזור שתמונת המצב מוגדרת לו. אם כוללים את הפרמטר הזה, אי אפשר להשתמש בפרמטר storageLocations. הערך של STORAGE_LOCATION מוגדר אוטומטית ל-SNAPSHOT_SCOPE_REGION.

יצירת לוח זמנים של תמונות מצב עם הפעלה של guest-flush

אתם יכולים להפעיל גיבויים קבועים ואוטומטיים של דיסקים לאחסון מתמיד (Persistent Disk) אזוריים ומרחביים, כולל ריקון מידע, באמצעות לוחות זמנים של קובצי snapshot. כדי להפעיל תמונות מצב שכוללות ריקון מידע בתמונות המצב המתוזמנות, משתמשים באפשרות --guest-flush כשיוצרים את תזמון תמונות המצב, כך שהסקריפטים שלפני ואחרי תמונת המצב יופעלו לפני ואחרי כל תמונת מצב מתוזמנת.

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

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
  --description "MY HOURLY SNAPSHOT SCHEDULE" \
  --start-time 22:00 \
  --hourly-schedule 4 \
  --guest-flush \
  --max-retention-days SNAPSHOT_RETENTION_AGE

מידע נוסף זמין במאמר מידע על לוחות זמנים של קובצי snapshot לדיסקים.

פתרון בעיות

כדי לפתור בעיות בתזמון ובתהליך היצירה של קובץ snapshot, צריך לבדוק את היומנים ואת ההגדרות.

בדיקת היומנים

  1. נכנסים לדף Logs Explorer במסוףGoogle Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את השאילתה הבאה בחלונית Log query:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. מריצים את השאילתה ובודקים את היומנים:

    שאילתה ביומן ליצירת קובץ snapshot.

בדיקת ההגדרות

המאמרים הבאים