גיבוי S3: ניהול גרסאות, CRR ושחזור

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

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

שאלות נפוצות

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

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

גיבוי S3: היכן נשברת הגנת הנתונים

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

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

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

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

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

מה נותנת הגנת נתונים בנויה היטב באחסון

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

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

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

אפשרויות הגנה: ניהול גרסאות, שכפול, ארכוב

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

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

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

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

שלבים בבניית הגנת נתונים באחסון אובייקטים

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

מביקורת ועד מסירה לתפעול

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

תצורות, מדיניות גישה ותקנוני שחזור

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

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

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

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

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

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

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

מה קרה למדדים

מדד לפני התקלה לאחר הבנייה מחדש
נקודת שחזור שלושה ימים דקות
שיעור הספרייה ששוחזרה 62% 100%
בדיקת שלמות העותקים ידנית, לפי התרחשות תקלה מדי יום, לפי סכומי ביקורת
הגנה מפני מחיקה המונית לא הייתה חסימת גרסאות ומדיניות ברמת החשבון
זמן שחזור הספרייה כ-40 שעות פחות משעה

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

במה שונה ניהול גרסאות משכפול בין אזורים?

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

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

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

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

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

ספקות טכניים בעת הגדרת הגנת נתונים

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

האם אפשר להפעיל ניהול גרסאות באחסון פעיל?

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

כיצד לשחזר אובייקט בודד בלי לפרוס את כל האחסון?

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

כיצד להגן על העותקים עצמם ומה לעשות בכשלי שכפול?

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

כיצד נפח העותקים לא יגדל עד אין קץ?

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

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

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

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

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