הגדרת כניסות גיבוי ב־PostgreSQL-17

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

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

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

למה Failover Slots חשובים מנקודת מבט היסטורית

אתגרים בפוסטגריסקיול 15

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

שיפורים ב־PostgreSQL 16

פענוח לוגי מינימלי

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

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

PostgreSQL 17: משנה את המשחק – חרישי כשל

  • חרישי כשל: הכרזה על חרישי כשל ב־PostgreSQL 17 מסירה את הצורך בהתערבות ידנית על ידי סנכרון אוטומטי של חרישי הסינכרון הלוגי בין שרת הראשי לשרתי המתנה.
  • סינכרון אוטומטי: השורק החדש לסינכרון חרישי הכשל (failover = true) מבטיח שהם תמיד יהיו מסונכרנים, גם כאשר הצומת הראשית פעילה.
  • מעבר חלק: בעת כישלון, השרת הממתין יכול לקחת על עצמו את התפקיד הראשי מבלי לאבד אף מקום שכפול, מה שמבטיח אפס אובדן נתונים ושכפול רציף.

תכונה

PostgreSQL 15

PostgreSQL 16

PostgreSQL 17

שכפול לוגי

כן

כן

כן

סנכרון מקומות אוטומטי

לא

פיענוח לוגי מינימלי על הממתין

מקומות כישלון מלאים

טיפול בכישלון

נדרשת התערבות ידנית

מקומות מחוממים מראש על הממתין

מקומות כישלון אוטומטיים

סנכרון מקום לממתין

לא נתמך

מינימלי, דורש קונפיגורציה

אוטומטי עם עובד slotsync

זמינות גבוהה לשכפול לוגי

מוגבל

משופר עם פענוח מינימלי

חלק עם סלאטים של כישלון

יצירת אשכול זמינות גבוהה עם סלאטים של כישלון

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

  1. NodeA (שרת ראשי)
  2. NodeB (גיבוי פיזי)
  3. NodeC (מנוי לוגי)

דרישות מוקדמות

לפני שנתחיל, ודאו שיש לכם:

שלב 1: קונפיגורציה של הנוד הראשי (NodeA)

1.1 לאתחל את האשכול על NodeA

לאחר התקנת PostgreSQL על הצומת הראשית, אתחל את האשכול; ניתן להשתמש בפקודות הבאות:

Shell

 

1.2 להגדיר שילוב בקובץ postgresql.conf

לאחר אתחול האשכול, ערוך את קובץ postgresql.conf, הממוקם כברירת מחדל ב- /home/pgedge/nodeA/postgresql.conf. הגדר את ערכי הפרמטרים הבאים:

Shell

 

1.3 לעדכן את קובץ ה-pg_hba.conf ולאפשר גישה לשילוב

קובץ ה-pg_hba.conf ניהל אימות של לקוחות עבור שרת PostgreSQL. הוסף את הקלט הבא ל- /home/pgedge/nodeA/pg_hba.conf כדי לוודא גישה למשתמש של שילוב:

Shell

 

לאחר מכן, טען מחדש את התצורה:

Shell

 

1.4 ליצור משתמש של שילוב

לאחר מכן, התחבר ל- PostgreSQL וצור את משתמש השילוב:

Shell

 

SQL

 

1.5 ליצור טבלה ולהגדיר פרסום

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

SQL

 

שלב 2: הגדרת הפיזית המתנדבת (NodeB)

2.1 לאתחל את NodeB

לאחר התקנת PostgreSQL, אתחל את NodeB:

Shell

 

2.1 ליצור גיבוי בסיסי

לאחר מכן, השתמש ב- pg_basebackup כדי לקחת גיבוי של האשכול:

Shell

 

2.2 להגדיר את postgresql.conf על Node-B

שנה את קובץ postgresql.conf (שנמצא ב- /home/pgedge/nodeB/postgresql.conf), כדי להפעיל את סנכרון חריגת התקפה

Shell

 

2.3

השתמש בלקוח psql כדי להתחבר ל-NodeB:

Shell

 

לאחר מכן, השתמש בהצהרות הבאות כדי להגדיר שכפול עבור NodeB:

SQL

 

צא מלקוח psql והפעל מחדש את NodeB:

Shell

 

2.4

וְאז, התחבר מחדש ל-NodeB באמצעות psql ווודא כי הסלוטים מסונכרנים:

SQL

 

שלב 3: הגדרת המנוי הלוגי (NodeC)

3.1

לאחר התקנת PostgreSQL, אתחל את האשכול והגדר את NodeC; ניתן להשתמש בפקודות הבאות:

Shell

 

לאחר מכן, ערוך את קובץ /home/pgedge/nodeC/postgresql.conf, והגדר את ערכי הפרמטרים הבאים:

Shell

 

3.2

השתמש בפקודה הבאה כדי ליצור מינוי ב-NodeC:

Shell

 

שלב 4: סימולציה של חריגת התקפה ווידוא של המשך השקיפות

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

4.1

השתמש בפקודות הבאות כדי לדמות כשל ב-NodeA, עקב קידום ממתין לראשי של NodeB:

Shell

 

4.2עדכן את המינוי ב-NodeC

לאחר קידום NodeB, התחבר ל-NodeC ועדכן את החיבור כדי לשקף ש-NodeB כעת הוא הצומת הראשי:

SQL

 

4.3 אימות רציפות נתונים

כדי לבדוק שכפול, השתמש ב-psql כדי להתחבר ל-Node-B (עכשיו הצומת הראשי):

SQL

 

בדוק שכפול ב-Node-C:

SQL

 

מסקנה

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

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

Source:
https://dzone.com/articles/setting-up-failover-slots-in-postgresql-17