קבוצות של מופעי מכונה מנוהלים עם שמירת מצב

אתם יכולים ליצור פריסות של עומסי עבודה עם שמירת מצב (stateful) במכונות וירטואליות (VM) עם זמינות גבוהה באמצעות קבוצות של מכונות מנוהלות עם שמירת מצב (stateful MIGs). עומסי עבודה עם שמירת מצב כוללים אפליקציות עם נתונים או הגדרות של שמירת מצב, כמו מסדי נתונים, אפליקציות מונוליטיות מדור קודם וחישובים ארוכים של אצווה עם נקודות ביקורת.

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

קבוצת מופעי מכונה מנוהלים (MIG) עם שמירת מצב שומרת על המצב הייחודי של כל מופע (כולל שם המופע, אחסון מתמיד (persistent disk) שמצורף, כתובות IP ומטא-נתונים) בהפעלה מחדש של מכונה וירטואלית, ביצירה מחדש, בתיקון אוטומטי או בעדכון.

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

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

מה ההבדל בין עומסי עבודה עם שמירת מצב לבין עומסי עבודה ללא שמירת מצב

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

אתם מתייחסים למכונות וירטואליות עם עומסי עבודה עם שמירת מצב כמו למכונות בהתאמה אישית: חשוב לכם לדעת את הזהות (השם) של המכונה הווירטואלית, כתובת ה-IP, המטא-נתונים והנתונים בכל מכונה בנפרד. אי אפשר להרחיב בקלות עומסי עבודה עם שמירת מצב באופן אופקי, כי הרחבה עשויה לדרוש שכפול נתונים, יצירה או מחיקה של נתונים או שינוי של הגדרת האפליקציה הכוללת. כשיוצרים מחדש מכונה או מעדכנים אותה עם עומס עבודה עם שמירת מצב, צריך לשמור את המצב הייחודי של מכונת ה-VM. דוגמאות לאפליקציות עם מצב (stateful) כוללות את Cassandra,‏ ElasticSearch,‏ mongoDB,‏ MySQL,‏ PostgreSQL ו-Kafka.

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

קבוצת MIG עם שמירת מצבקבוצת MIG בלי שמירת מצב
עומס עבודה עומסי עבודה עם שמירת מצב שבהם הדיסקים, כתובות ה-IP או המטא-נתונים נשמרים בפעולות של יצירה מחדש של מכונה וירטואלית. עומסי עבודה (workloads) ללא מצב (stateless) עם זמינות גבוהה וניתנים להתאמה לעומס (scaling), שבהם הדיסקים וכתובות ה-IP נוצרים מחדש מאפס בהתאמה לעומס אופקית, בתיקון אוטומטי, בעדכון אוטומטי וביצירה מחדש של מכונות וירטואליות.
תכונות של MIG
  • תיקון אוטומטי
  • עדכונים מתגלגלים אוטומטיים
  • פריסות רב-אזוריות
  • תיקון אוטומטי
  • עדכונים מתגלגלים אוטומטיים
  • פריסות רב-אזוריות
  • התאמה אוטומטית לעומס (Automatic scaling)
פריטים שניתן לשמור
  • שמות של מכונות
  • דיסקים של אחסון מתמיד (persistent disks), כולל תמיכה בדיסקים שלא מוגדרים בתבנית של הגדרות מכונה
  • מטא-נתונים ספציפיים למופע
  • כתובות IP
שמות של מכונות

כל קבוצות ה-MIG תומכות בשמות מותאמים אישית של מופעים שאפשר לשמור.

מתי כדאי להשתמש בקבוצות MIG עם שמירת מצב

מומלץ להשתמש בקבוצות מנוהלות של מופעי מכונה עם שמירת מצב (stateful MIGs) כשפורסים אפליקציה או אשכול עם שמירת מצב ב-Compute Engine ורוצים לשפר את הזמינות שלהם באמצעות תיקון אוטומטי ופריסות מרובות אזורים, או כשרוצים לפשט את העדכונים של מופעים עם שמירת מצב באמצעות ניהול של פריסת עדכונים ושליטה ברמת השיבוש המותרת במופעים.

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

  • מסדי נתונים. לדוגמה: Cassandra,‏ ElasticSearch,‏ mongoDB ו-ZooKeeper. לפני שמחליטים להשתמש בקבוצות MIG עם שמירת מצב, כדאי לשקול שימוש בשירותים מנוהלים, למשל MySQL ו-PostgreSQL שזמינים ב-Cloud SQL, כדי להתמקד באפליקציות ולא להתעסק במכונות וירטואליות.
  • אפליקציות לעיבוד נתונים. לדוגמה: Kafka ו-Flink. לפני שמחליטים להשתמש בקבוצות MIG עם שמירת מצב, כדאי לשקול שימוש בשירותים מנוהלים באופן מלא, כמו Dataflow או Managed Service for Apache Spark, כדי להתמקד במשימות של עיבוד נתונים ולא להתעסק במכונות וירטואליות.
  • אפליקציות stateful אחרות. לדוגמה: TeamCity,‏ Jenkins,‏ Bamboo, שרתי DNS עם כתובת IP עם שמירת מצב ועומסי עבודה מותאמים אישית עם שמירת מצב.
  • אפליקציות מונוליתיות מדור קודם. האפליקציות האלה שומרות את מצב האפליקציה בדיסק אתחול או בדיסקים קבועים נוספים, או שהן מסתמכות על הגדרה עם שמירת מצב, כמו שמות ספציפיים של מכונות וירטואליות, כתובות IP או ערכי מפתח של מטא נתונים.
  • עומסי עבודה (workloads) של אצווה עם יצירת נקודות ביקורת (checkpointing). בעזרת ההגדרה הזו, תוכלו לשמור תוצאות של חישובים ארוכים שבוצעו בנקודות ביקורת, למקרה של כשל בעומס העבודה או במכונה הווירטואלית, או למקרה של קדימות של מופע. קבוצות MIG עם שמירת מצב יכולות ליצור מחדש מכונה שנכשלה, תוך שמירה על דיסק הנתונים שלה, כך שהחישוב יכול להימשך מנקודת הבדיקה האחרונה.

כדי להשיג חוסן (resilience) מפני כשלים אזוריים, האפליקציה צריכה לשכפל נתונים בכמה מכונות ברמת האפליקציה. לדוגמה, ElasticSearch ו-Cassandra תומכות בפונקציונליות כזו. אפשר להשתמש ב-MIG אזורי כדי להפוך אפליקציה כזו לעמידה בפני כשלים אזוריים. לשם כך, צריך לפרוס רפליקות מיותרות בכמה אזורים ולהסתמך על הפונקציונליות של שכפול הנתונים באפליקציה. במקרה של כשל אזורי, הנתונים שלכם מוגשים מרפליקות זמינות באזורים הנותרים.

כדאי לעיין במגבלות כדי לבדוק אם קבוצת MIG עם שמירת מצב עונה על הדרישות שלכם.

מה הופך קבוצת MIG לבעלת שמירת מצב

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

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

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

  • מדיניות עם שמירת מצב מגדירה פריטים שרוצים לשמור לכל המקרים ב-MIG.
  • הגדרה לכל מופע מגדירה פריטים שצריך לשמור עבור מופע ספציפי של מכונה וירטואלית.

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

  • קבוצת מופעים מנוהלת (MIG) מחילה באופן אוטומטי את הגדרת המדיניות עם שמירת מצב על מופעים חדשים וקיימים.
  • כשיוצרים או מעדכנים הגדרות לכל מופע, אפשר לבחור אם להחיל את ההגדרה החדשה באופן ידני או באופן אוטומטי.

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

שינויים עתידיים בגודל או בהגדרות של קבוצת ה-MIG (לדוגמה, הקטנת הגודל של קבוצת ה-MIG, או מחיקה או ביטול של מופעים מקבוצת ה-MIG) יכולים להשפיע על המצבים שנשמרו של המופעים.

הגדרות שומרות מצב

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

מדיניות עם שמירת מצב

מדיניות עם שמירת מצב מגדירה פריטים נפוצים עם שמירת מצב לכל המופעים בקבוצת מופעים מנוהלת. כל פריט שכוללים במדיניות עם שמירת מצב צריך להיות מוגדר בתבנית של הגדרות מכונה של ה-MIG.

אפשר לבצע את השינויים הבאים במדיניות עם שמירת סטטוס:

  • כדי להגדיר דיסקים כבעלי מצב, מוסיפים אותם למדיניות Stateful.
  • כדי להגדיר דיסקים כחסרי מצב, צריך להסיר אותם ממדיניות שמירת המצב.
  • כדי לציין שכתובות ה-IP צריכות להיות עם שמירת מצב, צריך להוסיף הגדרה של ממשק הרשת למדיניות עם שמירת מצב.
  • כדי לציין שצריך להתייחס לכתובות IP כאל כתובות בלי שמירת מצב, צריך להסיר את ההגדרה ממדיניות עם שמירת מצב.

הגדרות לכל מופע

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

אפשר לבצע את השינויים הבאים בהגדרה לכל מופע בנפרד עבור מופע ספציפי ב-MIG:

  • הגדרת דיסקים שמוגדרים בתבנית של הגדרות מכונה כך שיהפכו לדיסקים עם שמירת מצב עבור המכונה (על ידי הוספת הדיסקים האלה להגדרה של כל מכונה), או לדיסקים בלי שמירת מצב (על ידי הסרת הדיסקים האלה מההגדרה של כל מכונה).
  • להגדיר דיסקים קיימים, שלא מוגדרים בתבנית של הגדרות מכונה, כך שהם יצורפו למכונה ויהפכו לדיסקים עם שמירת מצב (על ידי הוספת הדיסקים האלה להגדרה של המכונה) או ינותקו מהמכונה (על ידי הסרת הדיסקים מההגדרה של המכונה).
  • הוספה או הסרה של צמדי מפתח/ערך של מטא-נתונים עם שמירת מצב שספציפיים למופע.
  • הגדרת כתובות IP בנפרד למופעים בקבוצת מופעי מכונה מנוהלים (MIG) כדי להפוך אותם למופעים עם שמירת מצב או למופעים ללא שמירת מצב. אין תמיכה בהגדרות לכל מופע של כתובות IP בממשקי רשת דינמיים.

דוגמה להגדרה עם שמירת מצב

דוגמה להגדרה עם שמירת מצב:

תבנית של הגדרות מכונה + מדיניות עם שמירת מצב + הגדרה לכל מכונה = הגדרה של מכונה מנוהלת.

בתרשים הזה:

  • תבנית של הגדרות מכונה מגדירה תצורה משותפת לכל מכונות ה-VM ב-MIG
  • מדיניות עם שמירת מצב מגדירה הגדרה משותפת עם שמירת מצב לדיסקים עם שם המכשיר, data-disk, שמוגדרים על ידי תבנית המופע, ונוצרים ומצורפים בנפרד לכל מופע של מכונת VM ב-MIG.
  • ההגדרה לכל מופע מגדירה הגדרה עם שמירת מצב למופע ספציפי של מכונה וירטואלית בשם node-1. הוא מציין לצרף דיסק קיים, my-legacy-1, למופע node-1 ולהתייחס אליו כאל דיסק עם שמירת מצב. הוא גם מציין ערך אחד של מפתח מטא-נתונים כדי לשמור על הייחודיות של מופע node-1: node-id:xyz273.

כשיוצרים את המכונה הווירטואלית node-1, קבוצת המכונות המנוהלת (MIG) מבצעת את הפעולות הבאות:

  1. משתמש בn2-standard-2 סוג המכונה, בהתאם לתבנית של הגדרות מכונה.
  2. יוצר ומצרף דיסק אתחול עם שם דיסק שנוצר אוטומטית, boot-node-1, ושם מכשיר boot-disk, באמצעות תמונה של Debian GNU/Linux, בהתאם לתבנית של הגדרות מכונה. ה-MIG מתייחס לדיסק האתחול boot-node-1 כאל דיסק חסר מצב כי הוא לא מוגדר במדיניות לשימור מצב או בהגדרות לכל מכונה.
  3. יוצר ומצרף דיסק נוסף עם שם דיסק שנוצר אוטומטית, data-disk-1, ושם מכשיר, data-disk, באמצעות תמונה בהתאמה אישית, בהתאם לתבנית של הגדרות מכונה. ה-MIG מתייחס לדיסק הנוסף data-disk-1 כדיסק עם שמירת מצב, כי שם המכשיר שלו מצוין במדיניות שמירת המצב.
  4. מצרפים דיסק קיים עם שם הדיסק my-legacy-1, ומשתמשים בשם המכשיר legacy-disk, בהתאם להגדרה לכל מופע. ה-MIG מתייחס לדיסק הנוסף my-legacy-1 כאל דיסק עם שמירת מצב, כי שם המכשיר שלו מצוין בהגדרה לכל מופע.
  5. מגדירים שלושה צמדי מפתח/ערך של מטא-נתונים: שניים מתבנית של הגדרות מכונה (app:example-stateful-app, version:1.0) ואחד מההגדרה לכל מכונה (node-id:xyz273). ה-MIG מתייחס לצמד המפתח/ערך node-id:xyz273 כאל צמד עם שמירת מצב, כי הוא מוגדר בהגדרה לכל מכונה.

כשיוצרים מחדש את מכונת ה-VM של node-1, בהנחה שההגדרה זהה עדיין בתוקף, ה-MIG יוצר מחדש את הפריטים בלי שמירת מצב ושומר את הפריטים עם שמירת מצב:

  1. מערכת יוצרת מחדש את דיסק האתחול מהתמונה המקורית:

    קודם, הוא מוחק את דיסק האתחול, ואז הוא יוצר אותו מחדש מתמונת Debian GNU/Linux, כפי שצוין בתבנית המופע.boot-node-1

  2. שומר על דיסקים נוספים, data-disk-1 ו-my-legacy-1:

    מנתק את הדיסקים הנוספים לפני מחיקת ה-VM, ואז מחבר אותם ל-VM אחרי שהוא נוצר מחדש.

  3. שומר את צמד המפתח/ערך של המטא-נתונים, node-id:xyz273:

    המדיניות מגדירה את המטא-נתונים אחרי שהמכונה הווירטואלית נוצרה מחדש. הפונקציה גם מגדירה את צמדי המפתח/ערך הנפוצים מתבנית של הגדרות מכונה (app:example-stateful-app ו-version:1.0).

משוב

נשמח לשמוע על תרחישי השימוש שלכם, על האתגרים שנתקלתם בהם ועל המשוב שלכם לגבי קבוצות של מכונות וירטואליות עם שמירת מצב. נשמח לקבל ממך משוב. אפשר לשלוח אותו לצוות שלנו בכתובת mig-discuss@google.com.

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