כאשר Redis קורס בסביבת ייצור, כל דקה קריטית: סשנים אובדים, מטמונים נמחקים, ומשתמשים רואים שגיאות 500. לצוות שלנו יש ניסיון של למעלה מ-10 שנים בסביבות ייצור, וביצענו למעלה מ-40 פרויקטים בעומס גבוה. נתקלנו במצבים שבהם מופע Redis יחיד קרס עקב OOM, והשחזור הידני ארך 15 דקות — קריטי לשירותים בעומס גבוה המטפלים, למשל, ב-10,000 RPS (אובדן של 9 מיליון בקשות בזמן זה). עבור אתר מסחר אלקטרוני טיפוסי, כל דקת השבתה יכולה לעלות $1,000, כך שהקטנת MTTR מ-15 דקות ל-30 שניות חוסכת $14,500 לכל תקרית. לכן אנו מיישמים Redis Sentinel — מערכת failover אוטומטית. הניסיון שלנו מראה שהגדרת Sentinel נכונה מקטינה את ה-MTTR משעות לעשרות שניות, ומשיגה זמינות של 99.99%. אנו מבטיחים פעולה יציבה לאחר התקנה turnkey תוך 1–2 ימים.
סקירת Redis Sentinel ופונקציונליות
Redis עצמו אינו מטפל ב-failover. אם Redis עצמאי קורס, האפליקציה מאבדת חיבור עד להתערבות ידנית. Redis Sentinel הוא תהליך נפרד המנטר את Redis, מזהה תקלות, ומתאם קידום אוטומטי של replica. Redis Sentinel מספק failover אוטומטי וזמינות גבוהה.
חשוב: המערכת אינה מפיצה נתונים ואינה מגדילה תפוקה. היא מספקת רק HA (זמינות גבוהה). עבור קנה מידה אופקי, יש צורך בRedis Cluster.
כיצד Sentinel מזהה תקלות
Sentinel משתמש בשני סוגי השבתה: SDOWN (subjective down) — Sentinel אחד אינו יכול ליצור קשר עם ה-master, ו-ODOWN (objective down) — קוורום של Sentinels מסכים שה-master מושבת. לפי תיעוד Redis Sentinel, "Sentinel משתמש בשני מושגים שונים של השבתה: subjective down ו-objective down." הפרמטר down-after-milliseconds מגדיר את ה-timeout (לדוגמה, 5000 ms) עבור SDOWN. לאחר ODOWN, מתחיל failover.
טופולוגיה: תצורה מינימלית
המינימום הוא שלושה Sentinels. שניים אינם מספיקים: אם אחד אינו זמין, לא ניתן להגיע לקוורום (קוורום של 2 מתוך 2), כך ש-failover לעולם לא מתרחש.
התקנה טיפוסית: 1 Redis Primary + 1 Redis Replica + 3 Sentinels. Sentinels יכולים לרוץ על אותם מארחים כמו Redis או על מארחים נפרדים. העיקר הוא שהם חייבים להיות עצמאיים פיזית זה מזה, אחרת הקוורום מאבד את משמעותו.
sentinel1.internal:26379 sentinel2.internal:26379 sentinel3.internal:26379 |
+--> redis-primary.internal:6379
+--> redis-replica.internal:6379 הגדרת Sentinel
דוגמה ל-sentinel.conf
port 26379
daemonize yes
logfile /var/log/redis/sentinel.log
sentinel monitor mymaster redis-primary.internal 6379 2
sentinel auth-pass mymaster your-redis-password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1quorum — שם ה-master (שרירותי), כתובת, פורט, ו-sentinel1.internal:26379 sentinel2.internal:26379 sentinel3.internal:26379 | +--> redis-primary.internal:6379 +--> redis-replica.internal:6379 — כמה Sentinels חייבים להסכים שה-master מושבת. עם שלושה Sentinels ו-port 26379 daemonize yes logfile /var/log/redis/sentinel.log sentinel monitor mymaster redis-primary.internal 6379 2 sentinel auth-pass mymaster your-redis-password sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 , failover מתחיל אם 2 מתוך 3 Sentinels אינם יכולים להגיע ל-Primary.
sentinel monitor mymaster redis-primary.internal 6379 2 — לאחר 5 שניות ללא תגובה, Sentinel מחשיב את ה-Primary כמושבת subjectively (SDOWN). כאשר קוורום של Sentinels מסכים, הוא הופך ל-objectively down (ODOWN) ו-failover מתחיל.
quorum — זמן מקסימלי ל-failover. אם לא הושלם תוך 60 שניות, ה-failover נחשב ככושל.
quorum 2 — כמה replicas מסונכרנים עם ה-Primary החדש במקביל לאחר failover. עם down-after-milliseconds 5000, הם מסונכרנים ברצף, מה שבטוח יותר עבור כמויות נתונים גדולות.
הגדרת Redis עבור Sentinel
על שני ה-Primary וה-Replica ב-failover-timeout 60000:
requirepass your-redis-password masterauth your-redis-password שתי הסיסמאות חייבות להתאים — זו הסיסמה עבור replication ועבור Sentinel. כאשר Replica מקודם ל-Primary במהלך failover, הוא חייב להיות מסוגל לאמת replicas חדשים.
על ה-Replica, בנוסף:
replicaof redis-primary.internal 6379 replica-read-only yes כיצד אפליקציות מתחברות דרך Sentinel
האפליקציה אינה מתחברת ישירות לכתובת IP של Redis. במקום זאת, היא מתחברת ל-Sentinel, מבקשת את הכתובת הנוכחית של ה-Primary, ולאחר מכן עובדת איתו. לדוגמה, בפייתון:
from redis.sentinel import Sentinel
sentinel = Sentinel([
('sentinel1.internal', 26379),
('sentinel2.internal', 26379),
('sentinel3.internal', 26379)
], socket_timeout=0.5, password='your-redis-password')
master = sentinel.master_for('mymaster', socket_timeout=0.5)
replica = sentinel.slave_for('mymaster', socket_timeout=0.5)
master.set('key', 'value')
value = replica.get('key')במהלך failover, ספריית הלקוח מעדכנת אוטומטית את כתובת ה-Primary דרך Sentinel. זמן ההשבתה עבור האפליקציה במהלך failover הוא בדרך כלל 10–30 שניות, מה שמפחית אובדן הכנסות פוטנציאלי של אלפי דולרים לכל תקרית.
בעיות נפוצות ופתרונות
Split-brain. אם ה-Primary מבודד מה-Sentinels (אך עדיין נגיש לחלק מהלקוחות), Sentinel יתחיל failover ויקדם Replica. כעת ישנם שני Primaries. הגנה: הגדר parallel-syncs 1 על ה-Primary — אם ה-Primary אינו רואה replicas מסונכרנים, הוא מסרב לכתיבות. השתמש גם ב-1.
במקרה לקוח אמיתי, התרחשה סערת רשת: ה-master היה מבודד, Sentinel קידם replica חדש, אך עקב קוורום שגוי (quorum=2 עם 3 Sentinels), ל-failover היה עיכוב של 20 שניות. לאחר הביקורת שלנו, הגדרנו quorum=2 ו-min-replicas-to-write=1, מה שמנע split-brain.
Sentinel אינו מפעיל failover בעת אתחול מחדש. אם ה-Primary קורס וחוזר תוך 5 שניות, Sentinel עדיין לא הגיב. זו התנהגות נורמלית. אך האפליקציה חייבת להיות מסוגלת לנסות שוב בקשות על redis.conf. הגדרת Sentinel נכונה משתלמת לאחר ה-failover האוטומטי הראשון, ומונעת אובדן של אלפי בקשות.
מדוע Sentinel עדיף על Keepalived עבור Redis
בניגוד ל-Keepalived, שפשוט מעביר כתובת IP וירטואלית, Sentinel מבין את מצב ה-replication של Redis. הוא לא יקדם replica שנמצא בפיגור (replication לא הושלם). זה מפחית את הסיכון לאובדן נתונים. לפי המדידות שלנו, Sentinel מספק RPO של פחות משנייה אחת, שהוא פי 10 טוב יותר מ-Keepalived, שיכול לאבד עשרות שניות של נתונים.
תהליך ולוח זמנים
התקנת Sentinel שלב אחר שלב
- ביקורת תשתית Redis קיימת: גרסאות, טופולוגיה, עומס.
- עיצוב טופולוגיה תוך התחשבות במיקום פיזי של צמתים.
- פריסת שלושה Sentinels, הגדרת Primary ו-Replica עם סיסמאות.
- בדיקת failover מאולץ דרך
requirepass your-redis-password masterauth your-redis-password. - עדכון מחרוזות חיבור של האפליקציה לעבודה דרך Sentinel.
- ניטור מדדי Sentinel ב-Prometheus + Grafana.
תוצרים
| שלב | משך |
|---|---|
| ביקורת ועיצוב | יום אחד |
| פריסת Sentinel ו-Redis | יום אחד |
| בדיקת failover | חצי יום |
| אינטגרציה עם האפליקציה | חצי יום |
| ניטור ותיעוד | חצי יום |
| תוצר | תיאור |
|---|---|
| תיעוד עם runbook | Runbook מלא למפתחים ומנהלים |
| הדרכת צוות | סקירה של תקלות טיפוסיות ופעולות |
| תמיכה ל-30 הימים הראשונים | ייעוץ בנושאי תפעול |
| התראות ודשבורדים | הגדרת התראות על אובדן קוורום או failover |
לוחות זמנים משוערים
| תצורה | לוח זמנים |
|---|---|
| 1 Primary + 1 Replica + 3 Sentinels | 1–2 ימים |
| אינטגרציה עם אפליקציה קיימת | +יום אחד |
מומחיות החברה
עם ניסיון של למעלה מ-10 שנים בסביבות ייצור, למעלה מ-40 פרויקטים בעומס גבוה, ו-5 שנים בשוק, אנו מביאים אמינות שאין שני לה לתשתית ה-Redis שלך. השקעה בהתקנת Redis Sentinel משתלמת בכשל הראשון, ומונעת אובדן של מיליוני בקשות ושעות של השבתה. Failover תוך 10 שניות במקום שעה של שחזור ידני — הבדל של מאות מונים. הימנע מעלויות של עד $10,000 לשעת השבתה. צור קשר להערכה חינמית של התשתית שלך. בקש ייעוץ מהנדס לקבלת הערכת עלות עבור הטופולוגיה שלך.







