הגדרת שכפול סטרימינג של PostgreSQL: ראשי וממתין

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

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

שאלות נפוצות

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

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

כאשר שרת PostgreSQL ראשי נכשל ללא standby של שכפול סטרימינג, המשבר נמשך שעות — במיוחד במסדי נתונים מ-500 GB עד 5 TB. שעת השבתה עבור שרת כזה יכולה לעלות $10,000 בהתאם לעסק, וה-RTO הופך לבלתי מקובל. מקרה טיפוסי: לקוח עם מסד נתונים של 2 TB, השרת הראשי נופל בשעות השיא. לפי הסטטיסטיקות שלנו, 70% מהתקלות מתרחשות בלילה כאשר המהנדס התורן לא מגיב מיד. ללא replica, ה-RTO הוא 8 שעות עם pg_restore. עם שכפול סטרימינג מוגדר, ה-failover אורך 2 דקות, וה-RPO הוא פחות משנייה אחת במצב סינכרוני.

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

בעיות שאנו פותרים

  • אובדן נתונים בכשל של השרת הראשי: שכפול סטרימינג אסינכרוני ברירת מחדל עלול לאבד עסקאות אחרונות. אנו מגדירים מצב סינכרוני במקומות קריטיים.
  • השהיית standby: ללא replication slots, הפסקה ממושכת של ה-standby דורשת pg_basebackup מלא — במסדי נתונים בגודל טרה-בייט, זה אומר שעות של השבתה. פתרון: replication slots + ניטור.
  • קונפליקטים של שאילתות ב-standby: שאילתות קריאה ארוכות חוסמות את שחזור ה-WAL. אנו מפעילים hot_standby_feedback — ה-standby מודיע לשרת הראשי על השאילתות הפעילות שלו, כך שהשרת הראשי דוחה את ה-vacuum.

שכפול סטרימינג של PostgreSQL מהיר בערך פי 50 משחזור מגיבוי (דקות לעומת שעות). הגדרת שכפול נכונה מונעת הפסדים של עד $50,000 בשנה, והלקוחות שלנו בדרך כלל מחזירים את ההשקעה תוך שלושה חודשים.

איך אנחנו עושים זאת

אנו משתמשים בטכנולוגיות: PostgreSQL 16, Patroni ל-failover אוטומטי, Prometheus + Grafana לניטור. תצורה ראשית טיפוסית:

wal_level = replica max_wal_senders = 5 wal_keep_size = 1GB hot_standby = on track_commit_timestamp = on 

אתחול ה-standby באמצעות wal_level = replica max_wal_senders = 5 wal_keep_size = 1GB hot_standby = on track_commit_timestamp = on עם האפשרות pg_basebackup — העתקת הנתונים מתבצעת במקביל לקליטת ה-WAL, מה שמונע דה-סינכרון. לאחר יצירת standby.signal והגדרת primary_conninfo, ה-standby מוכן תוך 15-30 דקות בעומס טיפוסי. Patroni מחליף תפקידים אוטומטית בכשל של השרת הראשי, ומפחית את ה-RTO ל-2-5 דקות.

החשיבות של Replication Slots

Replication slots מבטיחים שהשרת הראשי לא מסיר WAL עד שה-standby מאשר קבלה, מה שחיוני להגדרות שכפול סטרימינג. אם ה-standby מתנתק לשעה, ה-slot שומר את ה-WAL, ולאחר התאוששות, השכפול ממשיך ללא pg_basebackup מלא. עם זאת, ניטור הוא חובה: אם ה-standby לא זמין לזמן ממושך, ה-WAL מצטבר ויכול למלא את הדיסק. אנו ממליצים לשלב slots עם wal_keep_size (לדוגמה, 2 GB) — זה מספק רשת ביטחון מפני הצפה פתאומית.

השוואה בין שכפול סינכרוני ואסינכרוני

פרמטר אסינכרוני סינכרוני (FIRST 1)
אובדן נתונים אפשרי (אלפיות שניות עד שניות) אפס אובדן נתונים
השהיית COMMIT מינימלית (ללא המתנה) השהיה = RTT + fsync ב-standby
ביצועים גבוהים נמוכים ב-10-30% בהתאם לרשת
RPO בדרך כלל < 1 שנייה 0 (עם רשת תקינה)

שכפול סינכרוני מבטיח אפס אובדן נתונים אך מאט כתיבה ב-10-30% בהשוואה לאסינכרוני.

ניטור השהיית שכפול

השיטה המדויקת ביותר היא השאילתה --wal-method=stream ב-standby. בייצור, אנו מגדירים התראות דרך Prometheus: אם ההשהיה עולה על 10 שניות, המהנדס התורן מקבל הודעת Telegram. אנו גם מנטרים את נפח ה-WAL ב-slots (השדה SELECT now() - pg_last_xact_replay_timestamp()). כאשר standby מושבת לזמן ממושך (יותר משעה), slot יכול לצבור עד 50 GB של WAL — איום על הדיסק. אנו ממליצים להגדיר התראות אוטומטיות כאשר ניצול ה-slot מגיע ל-80%. בשרתים עם SSD ורשת 10GbE, ההשהיה היא בדרך כלל < 1 אלפית שנייה.

תהליך העבודה

  1. ניתוח — ביקורת על התצורה הנוכחית, העומס וה-SLA עבור RPO/RTO.
  2. תכנון — בחירת מצב (async/sync), רשת, slots, ניטור.
  3. יישום — הגדרת postgresql.conf ו-pg_hba.conf בשרת הראשי, יצירת משתמש replication, ביצוע pg_basebackup, הגדרת standby.signal ו-recovery.conf, ולאחר מכן בדיקת קישוריות.
  4. בדיקות — אימות השהיה, failover וביצועים במצב סינכרוני.
  5. תיעוד — runbook, התראות, הוראות למהנדס התורן.

טעויות נפוצות והשלכותיהן

טעות השלכה פתרון
חוסר ב-replication slots pg_basebackup מלא בעת ניתוק שימוש ב-replication slots
ללא ניטור דיסק WAL הדיסק מתמלא, השירות קורס התראות ב-80% ניצול slot
הגדרות סינכרוניות שגויות בשירותים רגישים להשהיה, הביצועים יורדים ב-30% בדיקת עומס

מה כלול

  • הגדרת השרת הראשי וה-standby המותאמת לחומרה שלך.
  • יצירת replication slots וניטור השימוש שלהם.
  • הגדרת התראות על השהיה (לדוגמה, כאשר העיכוב עולה על 10 שניות).
  • אופציונלי: התקנת Patroni ל-failover אוטומטי.
  • מסירת תיעוד והדרכה לצוות שלך.

לוח זמנים ועלות

הגדרת קלאסטר דו-צומתי עם שכפול סטרימינג של PostgreSQL אורכת 4-8 שעות עבודה. אם אתה צריך את החבילה המלאה עם ניטור, התראות ו-Patroni, לוח הזמנים מתארך ל-1-3 ימים. עלות טיפוסית להקמת קלאסטר דו-צומתי, כולל ניטור ותיעוד, היא $3,500. העלות מחושבת באופן אישי — אנו נעריך את הפרויקט לאחר בריף קצר. קבל ייעוץ ממהנדס — אנו נעזור לך לבחור את הסכימה האופטימלית ל-SLA שלך. הזמן ביקורת על תצורת PostgreSQL הנוכחית שלך. צור קשר להערכת עלות.

הגדרנו שכפול למסדי נתונים מ-500 GB עד 5 TB — בכל המקרים, השגנו השהיה < 1 שנייה במצב אסינכרוני. במשך יותר מ-10 שנות ניסיון, היו לנו אפס מקרי אובדן נתונים עם שכפול סינכרוני מוגדר כראוי.

פרטים נוספים בתיעוד PostgreSQL.