הגדרת GRUB ופרמטרי ליבה לשרתי ייצור

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת GRUB: היכן נשבר האתחול של שרתי פרודקשן

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

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

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

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

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

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

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

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

הפעלה מחדש צפויה

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

זמן שחזור — דקות במקום שעות

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

נעלם סוג שלם של כשלים בגלל סטיית הגדרות

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

השינויים מיושמים באופן שחוזר על עצמו, והחזרה לאחור — בפקודה אחת

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

אופני יישום פרמטרי הקרנל: השוואת גישות

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

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

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

כיצד מתבצעת הטמעת הגדרת GRUB: מביקורת ועד מסירה

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

  1. ביקורת האתחול הנוכחי. מלאי של הצי: גרסאות הקרנל וטוען האתחול, היכן שוכנות ההגדרות — מקומית או במערכת לניהול תצורה, ואילו פרמטרים הוגדרו ידנית מחדש. בנפרד נסמן צמתים עם הצפנה ו-RAID תוכנתי — שם סדר האתחול אינו סטנדרטי.
  2. תרשים השינויים. מתעדים את פרמטרי היעד ואת ההצדקה לכל אחד: פסק זמן של התפריט, סט הקרנלים לחזרה לאחור, ניהול הזיכרון, מתזמן קלט-פלט, השבתת מודולים מיותרים.
  3. סביבת בדיקה. העתק של התצורה על אותה גרסת קרנל: מיישמים את העריכות, מפעילים מחדש, בודקים שהשירותים עלו כשורה. כאן גם מתרגלים את החזרה לקרנל הקודם מהתפריט.
  4. חלון עבודה. מתאמים חלון ומיישמים צומת אחר צומת: הוצאה מאיזון העומס, עריכה, הפעלה מחדש, החזרה לעבודה. הצומת הבא — רק לאחר שהקודם משרת תעבורה ביציבות.
  5. הפעלה מחדש לבקרה. בודקים לא "האם עלה", אלא את הפרטים: האם הפרמטרים יושמו, במה מצב השירותים, האם עלו מודולים מיותרים. אי-התאמה — עצירה ובדיקה.
  6. תוכנית חזרה לאחור. העתקות תצורה לצד התצורה הפעילה, הקרנל הקודם בתפריט, גישה דרך קונסולת הניהול. החזרה לאחור — עריכה והפעלה מחדש, ללא בנייה מחדש של הצומת.
  7. קבלה ומסירה. התצורה עוברת למערכת הניהול, כדי שצמתים חדשים יקבלו אותה אוטומטית; צוות הלקוח מקבל הנחיה ורשימת בדיקה.

מה נותר לצוות: תצורות, תרשיםים ונוהלים

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

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

מקרה בוחן: שחזור לאחר כשל אתחול ללא אובדן נתונים

לפני: מצב חירום לאחר עדכון קרנל מתוכנן

צי של 60+ שרתים על Supermicro, הקרנל עודכן אחת לרבעון לפי נוהל אחיד. בערך כל מכונה חמישית לא עלתה לאחר הפעלה מחדש: טוען האתחול בחר תמונה שגויה, ו-initramfs לא נבנה עבור הקרנל החדש — השרת עבר למצב חירום ללא רשת.

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

מה שינו

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

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

התוצאה

מדדים לפני ואחרי: שיעור השרתים שלא עלו לאחר עדכון הקרנל ירד מ-20% לאפס בתוך שני רבעונים של תצפית; זמן ההשבתה לאירוע — מ-40–110 דקות ל-3–5 דקות הודות לחזרה לקרנל הקודם ישירות מהתפריט. עמידות האתחול לתקלות הפסיקה להיות תלויה בנוכחות מהנדס באתר.

עריכה במקום או ניהול תצורה דקלרטיבי?

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

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

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

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

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

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

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

ספקות טכניים: עדכונים, עמידות לתקלות, חזרה לאחור

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

מה יקרה אם השרת לא יעלה לאחר עריכת פרמטרי הקרנל?

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

האם נדרשת הפעלה מחדש של השרת?

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

האם ניתן ליישם את ההגדרות רק על חלק מהצי?

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

כיצד ישרדו השינויים עדכון קרנל?

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

כיצד ההגדרות עובדות עם RAID תוכנתי והצפנת דיסק?

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

נדון במשימה שלכם: מהיכן מתחילה העבודה

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