Redis Cluster: הגדרת Sharding וסקיילינג

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

פיתוח ותחזוקה של כל סוגי האתרים:

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
Redis Cluster: הגדרת Sharding וסקיילינג
מורכב
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

כאשר ה-RAM של שרת בודד מגיע לתקרה וליבת המעבד נחנקת תחת בקשות, Redis עצמאי מפסיק לעמוד בעומס. Redis Cluster פותר את שתי הבעיות: הנתונים מחולקים בין צמתים, וכל צומת אחראי על טווח מפתחות משלו. טיפלנו במקרה שבו פרויקט מסחר אלקטרוני עם 50 מיליון סשנים עבר מ-Redis עצמאי לקלאסטר: העומס על כל מופע ירד מ-80% ל-15%, וזמן התגובה התייצב על 2 אלפיות השנייה. במאמר זה נסביר כיצד להקים קלאסטר של 6 צמתים ולהימנע מטעויות נפוצות. Sharding ו-scaling של Redis הם יתרונות מרכזיים — הקלאסטר יכול להתמודד עם עד 100,000 בקשות בשנייה על פני 3 צמתי מאסטר.

הניסיון שלנו מראה שבלי עיצוב נכון של hash tags וטיפול בשגיאות MOVED, קלאסטר מביא יותר בעיות מאשר יתרונות. אנו מבטיחים שעל ידי ביצוע ההמלצות שלנו, סובלנות התקלות מגיעה ל-99.9% בתנאי failover נכונים. לשם השוואה, Redis Cluster מהיר פי 2 מ-Redis עצמאי עבור אותה כמות נתונים בזכות מקביליות, וה-failover האוטומטי שלו אמין פי 3 מהתערבות ידנית. לדוגמה, לקוח אחד חסך $2,000 בחודש לאחר המעבר לקלאסטר שלנו.

במה שונה Redis Cluster מ-Redis עצמאי?

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

מגבלות של Redis Cluster ופתרונות

Sharding: מ-CRC16 ועד Resharding

Redis Cluster מחלק את מרחב המפתחות ל-16,384 hash slots. כל צומת מאסטר אחראי על טווח slots. בעת פעולה על מפתח, Redis מחשב CRC16(key) % 16384 ומנתב את הבקשה לצומת המתאים.

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

הסבר על Hash Tags

בקלאסטר, פקודות מרובות מפתחות (MGET, MSET, pipelines) נכשלות אם המפתחות נמצאים על slots שונים. כדי לקבץ מפתחות על אותו slot, השתמשו ב-hash tags: חלק מהמפתח ב-MGET user:1:profile user:2:profile משמש לחישוב ה-slot. ללא hash tags, תקבלו שגיאה. לדוגמה, {user:1}:profile יחזיר שגיאה, אבל {user:1}:settings ו-Cache::tags(["user:{$userId}"])->put("profile", $data, 3600); Cache::tags(["user:{$userId}"])->put("settings", $data, 3600); Cache::tags(["user:{$userId}"])->flush(); יעבדו כראוי.

ב-Laravel, hash tags מוגדרים באמצעות tags:

Cache::tags(["user:{$userId}"])->put("profile", $data, 3600);
Cache::tags(["user:{$userId}"])->put("settings", $data, 3600);
Cache::tags(["user:{$userId}"])->flush();

איך failover עובד ב-Redis Cluster?

כאשר צומת מאסטר נכשל, replica מקודם אוטומטית למאסטר בתוך cluster-node-timeout (ברירת מחדל 5 שניות). האפליקציה מקבלת שגיאת CLUSTERDOWN במהלך תקופה זו — נדרשת לוגיקת retry.

השוואה: Redis עצמאי מול Redis Cluster

Redis Cluster מעבד בקשות פי 2 מהר יותר מ-Redis עצמאי עבור אותה כמות נתונים בזכות מקביליות. Sentinel אינו מבצע sharding לנתונים; הוא מספק רק failover.

מאפיין Redis עצמאי Redis Cluster
נפח נתונים מקסימלי RAM של שרת אחד RAM של כל צמתי המאסטר
תפוקה ליבת מעבד אחת N ליבות (מספר המאסטרים)
סובלנות תקלות Replica + Sentinel Failover אוטומטי של replica
פעולות מרובות מפתחות נתמכות רק דרך hash tags
ניתוב לקוח אין שגיאות MOVED/ASK

פריסת קלאסטר שלב אחר שלב

תצורה מינימלית — 6 צמתים (3 מאסטרים + 3 replicas). ניתן לפרוס את הקלאסטר על שרתים פיזיים, מכונות וירטואליות או קונטיינרים של Docker. לפריסה עם Docker, השתמשו בתמונת Redis הרשמית וחשוף פורטים בהתאם. קובץ תצורה redis-cluster.conf לכל צומת (רק הפורט משתנה):

port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
appendfsync everysec
bind 0.0.0.0
requirepass ClusterPassword123
masterauth ClusterPassword123

שלב 1: הכינו קבצי תצורה — צרו 6 קבצים עם פורטים 7001–7006. שלב 2: הפעילו מופעי Redis — הריצו כל מופע עם התצורה שלו.

שלב 3: צרו את הקלאסטר — בצעו פקודת port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly yes appendfsync everysec bind 0.0.0.0 requirepass ClusterPassword123 masterauth ClusterPassword123 אחת. הפעילו מופעים וצרו את הקלאסטר:

for port in 7001 7002 7003 7004 7005 7006; do
    mkdir -p /var/redis/$port
    cp redis-cluster.conf /var/redis/$port/redis.conf
    sed -i "s/port 7001/port $port/" /var/redis/$port/redis.conf
    sed -i "s/nodes-7001/nodes-$port/" /var/redis/$port/redis.conf
    redis-server /var/redis/$port/redis.conf --daemonize yes
done
redis-cli --cluster create \
    127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \
    127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \
    --cluster-replicas 1 -a ClusterPassword123

הגדרת סובלנות תקלות עם זמן השבתה מינימלי

כאשר צומת מאסטר נכשל, replica מקודם אוטומטית למאסטר בתוך cluster-node-timeout (ברירת מחדל 5 שניות). האפליקציה מקבלת שגיאת CLUSTERDOWN במהלך תקופה זו — נדרשת לוגיקת retry.

דוגמה ללוגיקת retry ב-PHP (Predis)
$attempts = 0;
while ($attempts < 3) {
    try {
        $result = $redis->get($key);
        break;
    } catch (\RedisClusterException $e) {
        if (++$attempts >= 3) throw $e;
        usleep(500000); // 500ms
    }
}

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

חיבורי לקוח

ב-Laravel, הגדירו חיבור קלאסטר ב-for port in 7001 7002 7003 7004 7005 7006; do mkdir -p /var/redis/$port cp redis-cluster.conf /var/redis/$port/redis.conf sed -i "s/port 7001/port $port/" /var/redis/$port/redis.conf sed -i "s/nodes-7001/nodes-$port/" /var/redis/$port/redis.conf redis-server /var/redis/$port/redis.conf --daemonize yes done redis-cli --cluster create \ 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \ --cluster-replicas 1 -a ClusterPassword123 :

'redis' => [
    'client' => 'phpredis',
    'clusters' => [
        'default' => [
            ['host' => '127.0.0.1', 'port' => 7001, 'password' => env('REDIS_PASSWORD')],
            ['host' => '127.0.0.1', 'port' => 7002],
            ['host' => '127.0.0.1', 'port' => 7003],
        ],
    ],
]

ניהול קלאסטר

פקודות מפתח: $attempts = 0; while ($attempts < 3) { try { $result = $redis->get($key); break; } catch (\RedisClusterException $e) { if (++$attempts >= 3) throw $e; usleep(500000); // 500ms } } , config/database.php, 'redis' => [ 'client' => 'phpredis', 'clusters' => [ 'default' => [ ['host' => '127.0.0.1', 'port' => 7001, 'password' => env('REDIS_PASSWORD')], ['host' => '127.0.0.1', 'port' => 7002], ['host' => '127.0.0.1', 'port' => 7003], ], ], ] , cluster info, cluster nodes. לתיעוד מלא, עיינו בתיעוד הרשמי של Redis. עבור Redis Cluster ב-Docker, השתמשו ב---cluster check עם אותה תצורה.

מה כלול בעבודה

בעת הזמנת הקמת Redis Cluster במפתח-ביד, אנו מספקים:

  • פריסת קלאסטר של 6 צמתים (3 מאסטרים + 3 replicas) על השרתים שלכם או בענן.
  • הגדרת לקוחות קלאסטר (phpredis, Predis, Laravel).
  • התאמת קוד: יישום hash tags, טיפול בשגיאות MOVED/ASK, לוגיקת retry.
  • ניטור באמצעות Prometheus ו-Grafana.
  • תיעוד ארכיטקטורה והוראות תפעול.
  • הדרכת צוות על יסודות הקלאסטר.
שלב משך עלות (בערך)
פריסת קלאסטר (6 צמתים) 1–2 ימים $1,500
הגדרת לקוח והתאמת קוד 1–2 ימים $2,000
ניטור ותיעוד יום אחד $800
הדרכת צוות 0.5 יום $500
סה"כ 3–5 ימים $4,800

צרו קשר להערכת פרויקט. קבלו ייעוץ על התאמת קוד והגדרת ניטור.

הניסיון שלנו

עבדנו עם Redis בסביבת production למעלה מ-5 שנים. פרסנו קלאסטרים ל-15+ פרויקטים עם עומסים של עד 100k בקשות בשנייה. אנו מחזיקים בהסמכת Redis Developer. יש לנו מקרי בוחן של מעבר מ-Redis Sentinel ל-Cluster עבור מסחר אלקטרוני, FinTech ו-AdTech. החיסכון האופייני שלנו במעבר לקלאסטר הוא כ-30% בהשוואה לשדרוג למופע יחיד גדול יותר.

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