אתם יכולים ליצור תמונות מצב (snapshots) של נפחי אחסון של דיסקים לאחסון מתמיד שמצורפים למכונות וירטואליות (VM) של Linux, שמתאימות לשימוש באפליקציות. באופן כללי, איכות תמונת המצב של הדיסק תלויה ביכולת של האפליקציות שלכם להתאושש מתמונות מצב שאתם יוצרים במהלך עומסי עבודה כבדים של כתיבה. תמונות מצב עקביות של האפליקציה מתעדות את מצב הנתונים של האפליקציה בזמן הגיבוי, כשכל העסקאות באפליקציה הושלמו וכל הפעולות שבהמתנה נכתבו לדיסק.
כדי ליצור קובצי snapshot שמתאימים לאפליקציה, צריך להשהות אפליקציות או תהליכים של מערכת ההפעלה שכותבים נתונים לדיסק, לנקות את המאגרים של הדיסק ולסנכרן את מערכת הקבצים לפני שיוצרים את ה-snapshot. בהתאם לאפליקציה, יכול להיות שיהיה צורך בשלבים האלה ובשלבים אחרים כדי לוודא שכל הטרנזקציות של האפליקציה הושלמו ונתפסו בגיבוי.
כדי ליצור קובץ snapshot של הדיסקים שתואם לאפליקציה, מבצעים את התהליך הבא:
- כדי להכין את סביבת האורח לעקביות של האפליקציה, יוצרים סקריפטים מותאמים אישית של מעטפת שאפשר להריץ לפני ואחרי שיוצרים את קובץ ה-snapshot.
- מגדירים את הגדרות התמונות של מצב המכונה הווירטואלית.
- יוצרים קובץ snapshot עם האפשרות
guest-flushמופעלת. האפשרותguest-flushמפעילה את הסקריפטים שלפני ואחרי הצילום.
לפני שמתחילים
- יצירת מכונה וירטואלית של Linux.
- עדכון סביבת האורח
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים Google Cloud ולממשקי ה-API, לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל.
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שדרושות ליצירת תמונת מצב עקבית של אפליקציה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין מכונות של Compute (v1) (
roles/compute.instanceAdmin.v1) -
כדי להתחבר למכונה וירטואלית שיכולה לפעול כחשבון שירות: משתמש בחשבון שירות (v1) (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה מכילים את ההרשאות שנדרשות ליצירת תמונת מצב עקבית של אפליקציה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור תמונת מצב עקבית של אפליקציה, נדרשות ההרשאות הבאות:
-
compute.snapshots.createבפרויקט -
compute.disks.createSnapshotבדיסק
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
סוגי דיסקים נתמכים
אפשר ליצור תמונות מצב עקביות של אפליקציות עבור נפחי Persistent Disk שמצורפים למופעי Linux.
כרטיסי Hyperdisk לא תומכים ב-guest-flush או בשירות Volume Shadow Copy Service (VSS). כדי ליצור תמונות מצב עקביות של אפליקציות לנפחי Hyperdisk, צריך להשהות את האפליקציה באופן ידני לפני שיוצרים את תמונת המצב. מידע נוסף זמין במאמר בנושא יצירה ידנית של תמונות מצב עקביות של אפליקציות.
מגבלות
יש מגבלות על יצירת תמונות מצב עקביות של אפליקציות ב-Linux:
- עקביות האפליקציה תלויה בהתנהגות של סקריפטים מותאמים אישית לפני ואחרי יצירת התמונה, ולא בפעולת יצירת התמונה עצמה.
- כשמשתמשים באפשרות
guest-flushבבקשה ליצירת snapshot, ה-snapshot לא נוצר אם הסקריפט מחזיר שגיאה או מגיע למגבלת הזמן הקצוב לתפוגה. - כרכים של Hyperdisk לא תומכים ב-
guest-flush.
יצירת סקריפטים לפני ואחרי תמונת מצב
לפני שממשיכים, צריך לעדכן את סביבת האורח כדי להפעיל את התוכנה העדכנית ביותר במכונה הווירטואלית של Linux.
כדי לשמור על עקביות האפליקציה, יוצרים סקריפטים של מעטפת לפני ואחרי צילום תמונת המצב, כדי להפעיל אותם לפני ואחרי צילום תמונת המצב. אפשר להשתמש בסקריפטים שלפני ואחרי כדי לבצע פעולות כמו:
- משהים את האפליקציות או את התהליכים של מערכת ההפעלה שפועלים במכונה הווירטואלית וכותבים נתונים לדיסק.
- מרוקנים את מאגרי הדיסק. לדוגמה, ל-MySQL יש הצהרת
FLUSH. משתמשים בכלי שזמין לאפליקציה. - סנכרון של מערכת הקבצים.
בדוגמה הבאה מוצג קוד של סקריפט לפני יצירת תמונת מצב. שימו לב לתווים המובילים
#!.
#!/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 הוא רשימה של דיסקים שעבורם נוצרים ה-snapshots. אתם יכולים להשתמש בארגומנט הזה בסקריפטים שלכם לבדיקות שונות. לדוגמה, אם ל-VM שלכם מצורפים כמה דיסקים, אבל ציינתם רק דיסק אחד בבקשת ה-snapshot, תוכלו לבדוק עבור איזה דיסק נוצר ה-snapshot.
הארגומנט מופיע בפורמט הבא:
- דיסקים שמחוברים ל-SCSI: רשימה מופרדת בפסיקים של צמדי
<target/lun>. - דיסקים שמצורפים ל-NVME: רשימה מופרדת בפסיקים של זוגות
<nvme:namespace>.
לדוגמה, דיסק אתחול שמחובר ל-SCSI עשוי להופיע כ-1/0, ו
דיסק נוסף שמחובר למכונה הווירטואלית עשוי להופיע כ-2/0.
עריכת קובץ התצורה של סביבת האורח
כדי להגדיר את תמונת המצב העקבית של האפליקציה, צריך לעדכן קובץ תצורה ספציפי ב-VM.
פותחים או יוצרים את קובץ התצורה של סביבת האורח.
edit /etc/default/instance_configs.cfgמוסיפים את הקטע הבא לקובץ התצורה, ואז שומרים את השינויים ויוצאים מהעורך.
[Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS
מחליפים את מה שכתוב בשדות הבאים:
-
ENABLED: צריך להגדיר את הערךtrueכדי להפעיל את התכונה של קובץ snapshot עקבי של האפליקציה. ערך ברירת המחדל הואfalse.
TIMEOUT_SECONDS: מספר השניות שנדרשות לסקריפט שלפני או אחרי ה-snapshot כדי לסיים את ההרצה לפני שחלף הזמן הקצוב לתפוגה. הערך השלם צריך להיות בין 0 ל-300. ערך ברירת המחדל הוא60.
-
מפעילים מחדש את Guest Agent כדי להשתמש בהגדרות התצורה החדשות.
$ sudo systemctl restart google-guest-agent.service
יצירת תמונת מצב כשהאפשרות guest-flush מופעלת
באמצעות מסוף Google Cloud , Google Cloud CLI או REST, יוצרים תמונת מצב עם האפשרות guest-flush מופעלת. הפעולה הזו מריצה את הסקריפטים לפני ואחרי יצירת קובץ ה-snapshot.
המסוף
נכנסים לדף Create a Snapshot במסוף Google Cloud .
כניסה לדף Create a Snapshot- מזינים שם לתמונת המצב.
-
בוחרים סוג תמונת מצב. ברירת המחדל היא
STANDARDתמונת מצב, שהיא האפשרות הטובה ביותר לגיבוי לטווח ארוך ולתוכנית התאוששות מאסון.כדי לשמור נתונים בצורה חסכונית יותר, בוחרים באפשרות קובץ snapshot של ארכיון.
- אופציונלי: מזינים תיאור של התמונה.
- בקטע Source disk, בוחרים את הדיסק הקיים שרוצים ליצור לו קובץ snapshot.
בקטע מיקום, בוחרים את מיקום האחסון של התמונה.
מיקום ברירת המחדל המוגדר מראש או בהתאמה אישית בהגדרות של הצילום המהיר נבחר באופן אוטומטי. אופציונלי: אתם יכולים לבטל את הגדרות הצילום של התמונות ולשמור את התמונות במיקום אחסון מותאם אישית. כדי לעשות זאת:
בוחרים את סוג מיקום האחסון שרוצים לשמור בו את התמונה.
- בוחרים באפשרות Multi-regional (מספר אזורים) כדי ליהנות מזמינות גבוהה יותר בעלות גבוהה יותר.
- כדי לקבל יותר שליטה על המיקום הפיזי של הנתונים בעלות נמוכה יותר, בוחרים באפשרות תמונות מצב אזוריות.
- בשדה Select location (בחירת מיקום), בוחרים את האזור הספציפי או את מספר האזורים שרוצים להשתמש בהם. כדי להשתמש באזור או במספר אזורים שהכי קרובים לדיסק המקור, בוחרים באפשרות על סמך המיקום של הדיסק.
- מסמנים את האפשרות Enable application consistent snapshot.
- לוחצים על Create (יצירה) כדי ליצור את התמונה.
gcloud
אתם יכולים ליצור את תמונת המצב במיקום האחסון שמוגדר בהגדרות תמונת המצב, או להשתמש במיקום אחסון חלופי לפי בחירתכם. מידע נוסף זמין במאמר בחירת מיקום לאחסון תמונת מצב.
כדי ליצור קובץ 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-
לחלופין, כדי לבטל את הגדרות הצילום מהמצלמה וליצור צילום מהמצלמה במיקום אחסון מותאם אישית, צריך לכלול את הדגל
--storage-locationכדי לציין איפה לאחסן את הצילום מהמצלמה.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 -
(תצוגה מקדימה) כדי ליצור תמונת מצב בהיקף אזורי באזור מותר, צריך לכלול את הדגל
--regionכדי לציין איפה ליצור את תמונת המצב.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: שם לקובץ ה-snapshot.
- SOURCE_ZONE: האזור של דיסק המקור.
- SOURCE_DISK_NAME: השם של נפח הדיסק שממנו רוצים ליצור קובץ snapshot.
- SNAPSHOT_TYPE: סוג ה-snapshot, STANDARD או ARCHIVE.
אם לא מציינים סוג של snapshot, נוצר
STANDARDsnapshot. -
STORAGE_LOCATION: אופציונלי: בשביל קובצי snapshot בהיקף גלובלי, אזור רב-אזורי ב-Cloud Storage או אזור ב-Cloud Storage שבו רוצים לאחסן את קובץ ה-snapshot. אפשר לציין רק מיקום אחסון אחד.
משתמשים בפרמטר
--storage-locationרק כשרוצים לשנות את מיקום האחסון שהוגדר כברירת מחדל (מוגדר מראש או בהתאמה אישית) בהגדרות של קובץ ה-Snapshot. -
SNAPSHOT_SCOPE_REGION: אופציונלי: לתמונות מצב ברמת האזור, האזור שתמונת המצב מוגדרת לו. אם כוללים את הפרמטר הזה, אי אפשר להשתמש בפרמטר
--storage-location. הדומיין STORAGE_LOCATION מוגדר אוטומטית כ-SNAPSHOT_SCOPE_REGION.
REST
אפשר ליצור את קובץ ה-snapshot במיקום האחסון שמוגדר במדיניות של הגדרות ה-snapshot, או לבחור מיקום אחסון חלופי. מידע נוסף זמין במאמר בחירת מיקום לאחסון תמונת מצב.
-
כדי ליצור snapshot במיקום ברירת המחדל שהוגדר מראש או בהתאמה אישית בהגדרות ה-snapshot, שולחים בקשת
POSTאל ה-methodsnapshots.insert:POST https://compute.googleapis.com/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ל-methodsnapshots.insertוכוללים את המאפייןstorageLocationsבבקשה:POST https://compute.googleapis.com/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, } -
(תצוגה מקדימה) כדי ליצור snapshot בהיקף אזורי באזור מותר, שולחים בקשת
POSTאל ה-methodsnapshots.insertומגדירים את אזור היצירה:POST https://compute.googleapis.com/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_NAME: שם לקובץ ה-snapshot.
- SOURCE_PROJECT_ID: מזהה הפרויקט של דיסק המקור.
- SOURCE_ZONE: האזור של דיסק המקור.
- SOURCE_DISK_NAME: שם הדיסק שממנו רוצים ליצור קובץ snapshot.
- SNAPSHOT_TYPE: סוג הסנאפשוט, STANDARD או ARCHIVE.
אם לא מציינים סוג של snapshot, נוצר
STANDARDsnapshot. -
STORAGE_LOCATION: אופציונלי: בשביל קובצי snapshot בהיקף גלובלי, אזור רב-אזורי ב-Cloud Storage או אזור ב-Cloud Storage שבו רוצים לאחסן את קובץ ה-snapshot. אפשר לציין רק מיקום אחסון אחד.
משתמשים בפרמטר
storageLocationsרק כשרוצים לשנות את מיקום האחסון שמוגדר כברירת מחדל בהגדרות של התמונה, בין אם הוא מוגדר מראש או מותאם אישית. SNAPSHOT_SCOPE_REGION: אופציונלי: לתמונות מצב ברמת האזור, האזור שתמונת המצב מוגדרת לו. אם כוללים את הפרמטר הזה, אי אפשר להשתמש בפרמטר
storageLocations. הערך של STORAGE_LOCATION מוגדר אוטומטית ל-SNAPSHOT_SCOPE_REGION.
יצירת תזמון של snapshot עם 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, צריך לבדוק את היומנים ואת ההגדרות.
בדיקת היומנים
נכנסים לדף Logs Explorer במסוףGoogle Cloud :
מדביקים את השאילתה הבאה בחלונית של שאילתת יומן:
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"מריצים את השאילתה ובודקים את היומנים:
בדיקת ההגדרות
אם לא נמצאו במכונה סקריפטים שלפני או אחרי צילום מצב להקפאת הפעילות או ה-IOPS במערכת הקבצים, לא ייווצר צילום מצב. חשוב לוודא שפעלתם לפי השלבים במאמר יצירת סקריפטים לפני ואחרי צילום תמונת מצב.
אם יש שגיאה בסקריפט או שהזמן הקצוב לתפוגה נגמר, לא נוצרת תמונת מצב. כדאי לעיין במאמר בנושא הכנה ליצירת תמונות עקביות של מצב המערכת. שימו לב: הזמן הקצוב לתפוגה המקסימלי שאפשר להגדיר בהגדרות הוא 300 שניות. כדאי לנסות לחזור על התהליך כולו באמצעות סקריפטים לדוגמה.
כדי לצלם תמונת מצב של דיסק עם
guest-flushמופעל, צריך לצרף את הדיסק למכונה וירטואלית. במאמר יצירת מכונה וירטואלית מוסבר איך ליצור מכונת לינוקס וירטואלית ולצרף אליה דיסק.