המתנה לסיום פעולות (Connection draining) היא תהליך שמבטיח שיינתן זמן לסיום של בקשות קיימות שנמצאות בתהליך, כשמוציאים מופע של מכונה וירטואלית (VM) מקבוצת מופעים או כשמוציאים נקודת קצה מקבוצות של נקודות קצה ברשת (NEGs) שההיקף שלהן הוא אזורי.
המידע בדף הזה רלוונטי רק לקבוצות של מכונות וירטואליות ולסוגים הבאים של NEGs שההיקף שלהם הוא אזורי:
תהליך ה-connection draining מתחיל בכל אחד מהמקרים הבאים:
- הסרה ידנית של מכונה וירטואלית מקבוצת מופעים.
- כדי להסיר מופע מקבוצת מופעי מכונה מנוהלים, מבצעים קריאה של
resize(),deleteInstances(),recreateInstances()אוabandonInstances(). - אתם מסירים NIC דינמי ממכונה וירטואלית שהיא חלק מקצה עורפי של קבוצת מופעים.
- מסירים קבוצת מכונות או NEG משירות קצה עורפי. האפשרות הזו לא נתמכת במאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי ובמאזני עומסי רשת חיצוניים להעברת סיגנל ללא שינוי.
- Google Cloud מוחקת מכונה וירטואלית כחלק מהתאמה אוטומטית לעומס.
- מבצעים עדכון לקבוצת מופעי מכונה מנוהלים באמצעות כלי העדכון של קבוצת מופעי מכונה מנוהלים.
- הסרה ידנית של נקודת קצה מ-NEG אזורי.
התכונה'זמן להשלמת תהליך (connection draining)' לא רלוונטית כשמנתקים עורף (קבוצת מופעים או NEG אזורי) משירות לקצה העורפי של מאזן עומסים.
איך פועל זמן להשלמת תהליך (connection draining)
כדי להפעיל את התכונה 'זמן להשלמת תהליך', מגדירים זמן קצוב לתהליך (connection draining timeout) בשירות הקצה העורפי. משך הזמן הקצוב לתפוגה צריך להיות בין 0 ל-3,600 שניות, כולל.
יכול להיות שיחלפו עד 60 שניות אחרי שמשך הזמן הקצוב לתפוגה שצוין יסתיים עד שהמופע יופסק.
בהמשך מפורטות ההגדרות של זמן להשלמת תהליך (connection draining):
התכונה 'זמן להשלמת תהליך (connection draining)' זמינה לשירותים לקצה העורפי ששייכים למאזני העומסים הבאים:
- מאזן עומסים חיצוני של אפליקציות (ALB)
- מאזן עומסים פנימי של אפליקציות (ALB)
- מאזן עומסי רשת חיצוני לשרת proxy
- מאזן עומסי רשת פנימי לשרת proxy
- מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי
- מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות לקצה העורפי
מאזני עומסי רשת פנימיים וחיצוניים להעברת סיגנל ללא שינוי תומכים בזמן להשלמת תהליך (connection draining) עבור TCP, UDP ופרוטוקולים אחרים שאינם TCP.
אפשר גם להשתמש בזמן להשלמת תהליך (connection draining) בשירותי קצה עורפיים שמשולבים בפריסות של Cloud Service Mesh.
כשמגדירים זמן קצוב לתפוגה של ניתוק חיבורים, ומסירים מופע מקבוצת מופעים או מסירים נקודת קצה מ-NEG אזורי, מאזני העומסים ו-Cloud Service Mesh מתנהגים באופן הבא:Google Cloud
לא נשלחים חיבורים חדשים למופע או לנקודת הקצה שהוסרו.
מאזני עומסים של אפליקציות: למשך הזמן הקצוב לתפוגה שצוין, בקשות קיימות למכונה הווירטואלית או לנקודת הקצה שמסומנות להסרה מקבלות זמן להשלמה. מאזן העומסים לא שולח חיבורים חדשים למכונה הווירטואלית הזו או לנקודת הקצה הזו. אחרי שמגיעים למשך הזמן הקצוב לתפוגה, מאזן העומסים מפסיק לשלוח את כל התנועה למכונה הווירטואלית או לנקודת הקצה שהוסרו.
מאזני עומסים של רשתות proxy: למשך הזמן שצוין לזמן קצוב לתפוגה, חיבורי TCP קיימים למכונה הווירטואלית או לנקודת הקצה שמסומנת להסרה ממשיכים לפעול במהלך זמן להשלמת תהליך (connection draining) שהוגדר. מאזן העומסים לא שולח חיבורים חדשים למכונה הווירטואלית או לנקודת הקצה הזו. אחרי שמגיעים לזמן הקצוב לתפוגה, חיבורי TCP קיימים למכונה הווירטואלית או לנקודת הקצה שהוסרו נשארים פעילים, והפרוקסי סוגר את כל חיבורי ה-TCP הקיימים תוך 10 דקות, שהוא הזמן הקצוב לתפוגה של חוסר פעילות שמוגדר כברירת מחדל.
מאזני עומסים של רשתות עם העברת נתונים: למשך הזמן שצוין של זמן קצוב לתפוגה להשלמת תהליך (connection draining), מנות ששייכות לחיבורים קיימים מנותבות למכונה הווירטואלית או לנקודת הקצה שמסומנת להסרה. אחרי שמגיעים לזמן הקצוב לתפוגה, רשומת conntrack של המכונה הווירטואלית או נקודת הקצה שהוסרו נמחקת. כל מנה (packet) שאינה SYN מחיבור קיים מובילה ליצירה של רשומה חדשה ב-conntrack עבור השרת העורפי התקין. כשהמנה מגיעה לשרת קצה עורפי חדש תקין, שרת הקצה העורפי שולח RST ללקוח כי אין לו רשומה של המנה שהוא קיבל. מאזני עומסים פנימיים וחיצוניים של רשת להעברת סיגנל ללא שינוי לא שולחים TCP-RST או TCP-FIN כדי לסיים חיבורים קיימים אחרי שפג הזמן להשלמת תהליך (connection draining).
אם מפעילים את התכונה 'זמן להשלמת תהליך (connection draining)' בכמה שירותים לקצה העורפי שמשתפים את אותן קבוצות של מופעים או NEGs, נעשה שימוש בערך הזמן הקצוב לתפוגה הגדול ביותר. לדוגמה, נניח שאותה קבוצת מופעים או אותו NEG אזורי משמשים כקצה עורפי לשני שירותים לקצה העורפי, כאשר לאחד מהם יש זמן להשלמת תהליך (connection draining) של 100 שניות, ולשני יש זמן להשלמת תהליך (connection draining) של 200 שניות. Google Cloud משתמש ב-200 שניות כזמן להשלמת תהליך (connection draining) יעיל לפני סיום החיבורים. אם ה-backend הוא קבוצת מופעי מכונה מנוהלים, פעולות שמוחקות את המכונה מתעכבות לפחות ב-200 שניות.
אם לא מגדירים זמן להשלמת תהליך (connection draining), או אם הזמן להשלמת תהליך (connection draining) מוגדר לאפס (0), Google Cloud החיבורים הקיימים מסתיימים במופע או בנקודת הקצה שהוסרו במהירות האפשרית.
אם אתם משתמשים במאגר חיבורים, יכול להיות שתראו שבקשות חדשות שמשתמשות בחיבור שכבר נוצר עדיין מתקבלות במכונות וירטואליות שמתרוקנות, וזה גורם לשגיאות בחיבורים כשהמכונות הווירטואליות האלה נמחקות בסופו של דבר.
הפעלת זמן להשלמת תהליך (connection draining)
כדי להפעיל את התכונה 'זמן להשלמת תהליך (connection draining)', צריך לבצע את השלבים הבאים.
המסוף
עדכון מאזן עומסים
- עוברים לדף איזון עומסים במסוף Google Cloud .
כניסה לדף איזון עומסים - בכרטיסייה Load Balancers (מאזני עומסים), לוחצים על more_vert לצד מאזן העומסים שרוצים לעדכן, ואז לוחצים על Edit (עריכה) .
- לוחצים על Backend configuration.
- בחלונית Backend configuration, לוחצים על .
- בתחתית החלונית Edit backend service (עריכת שירות לקצה העורפי), לוחצים על Advanced configurations (הגדרות מתקדמות).
- בשדה Connection draining timeout (זמן קצוב לתפוגה של ניתוק חיבורים), מזינים ערך בין
0ל-3600. הגדרה של0משביתה את התכונה 'זמן להשלמת תהליך'.
עדכון Cloud Service Mesh
- נכנסים לדף Cloud Service Mesh במסוף Google Cloud .
כניסה ל-Cloud Service Mesh - לוחצים על השם של השירות.
- בדף פרטי השירות, לוחצים על עריכה .
- בתחתית השירות, לוחצים על הגדרות מתקדמות.
- בשדה Connection draining timeout, מזינים ערך בין
0ל-3600. הגדרה של0משביתה את התכונה 'זמן להשלמת תהליך'. - לוחצים על Save.
gcloud
כדי להפעיל את התכונה 'זמן להשלמת תהליך (connection draining)' בשירות קצה עורפי חדש או קיים, משתמשים בדגל --connection-draining-timeout. הדוגמאות הבאות מראות איך לשנות את הזמן להשלמת תהליך (connection draining):
למאזן עומסים גלובלי או חוצה אזורים קיים:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
אם יש לכם מאזן עומסים אזורי קיים:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
מחליפים את ה-placeholders בערכים תקינים:
-
BACKEND_SERVICE: השירות לקצה העורפי שאתם מעדכנים -
REGION: אם רלוונטי, האזור של שירות ה-Backend שאתם מעדכנים
CONNECTION_TIMEOUT_SECS: מספר השניות להמתנה לפני סיום החיבורים הקיימים למופעים או לנקודות קצה, בין0ל-3600שניות, כולל. הגדרה של0משביתה את התכונה 'זמן להשלמת תהליך'. הזמן להשלמת תהליך (connection draining) חל על כל הבק-אנד של שירות לקצה העורפי.אפשר גם להשתמש בפקודה
gcloud compute backend-services editכדי לעדכן שירות לקצה העורפי קיים.
API
כדי להפעיל את התכונה 'זמן להשלמת תהליך (connection draining)' ב-API כשיוצרים או מעדכנים מופע או נקודת קצה, שולחים בקשה ל-URI המתאים של ה-API כדי לכלול את השדה connectionDraining בגוף הבקשה. בדוגמאות הבאות מוסבר איך להגדיר את המאפיין הזה על ידי עריכה של שירות קיים בעורף. מידע על מאפיינים נדרשים אחרים זמין במסמכי התיעוד של כל מאזן עומסים.
למאזן עומסים גלובלי או חוצה אזורים קיים:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
אם יש לכם מאזן עומסים אזורי קיים:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices { "name": "BACKEND_SERVICE", "connectionDraining": { "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS } }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מאזן העומסים או את הפריסה של Cloud Service Mesh -
BACKEND_SERVICE: שירות הקצה העורפי שבו נעשה שימוש בפריסת מאזן העומסים או Cloud Service Mesh -
CONNECTION_TIMEOUT_SECS: מספר השניות להמתנה לפני הסרת מופעים או נקודות קצה מקבוצת המופעים או מ-NEG, בין 0 ל-3,600 שניות, כולל. משך הזמן הקצוב לתפוגה הזה חל על כל קבוצות המופעים או ה-NEG שאליהן מתייחס שירות לקצה העורפי.
-
המאמרים הבאים
מידע כללי על שירותי קצה עורפי זמין במאמר סקירה כללית על שירותי קצה עורפי.