איזון עומסים עם Nginx ו-HAProxy: תצורה מוכנה לשימוש

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

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
איזון עומסים עם Nginx ו-HAProxy: תצורה מוכנה לשימוש
מורכב
~2-3 ימים

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

שאלות נפוצות

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

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1504
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1050
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

איזון עומסים עם Nginx ו-HAProxy

פעם פנתה אלינו פרויקט עם חמישה שרתים: בשיא של 3000 RPS, חלק מהבקשות החזירו 503 עקב חלוקה לא אופטימלית. לאחר יישום איזון עומסים עם בדיקות בריאות אקטיביות וחיבור מינימלי (least-connections), העומס התחלק באופן שווה, וזמינות המערכת עלתה ל-99.99%. אנו מגדירים איזון עומסים שמחלק בקשות בין מספר שרתי backend, מבטל נקודות כשל בודדות, ומאפשר קנה מידה ללא הפסקת שירות. במשך יותר מ-5 שנים, השלמנו יותר מ-50 פרויקטים עם תשתית בעומס גבוה, שבהם העומס השיא הגיע ל-30,000 RPS, ואף אחד מהם לא קרס לאחר פריסת איזון העומסים.

אילו בעיות פותר איזון עומסים?

איזון עומסים מטפל בשלוש משימות מרכזיות. ראשית, סובלנות לתקלות: כאשר שרת backend אחד נופל, התעבורה מופנית אוטומטית לאחרים, ומשיגה זמינות של 99.95%. שנית, קנה מידה אופקי: ניתן להוסיף שרתים תוך כדי תנועה ללא צורך בהפעלה מחדש של מאזן העומסים. שלישית, חלוקת עומס אופטימלית: אלגוריתמים כמו least-connections ו-weighted round-robin מפזרים בקשות באופן שווה, ומונעים עומס יתר על צמתים בודדים.

מדוע בדיקות בריאות חשובות וכיצד להגדיר אותן?

ללא בדיקות בריאות, מאזן העומסים ממשיך לשלוח בקשות לשרת שנפל, מה שגורם לשגיאות לחלק מהמשתמשים. בדיקות פסיביות (מובנות ב-Nginx) מוציאות שרת לאחר מספר מסוים של שגיאות בתוך מרווח נתון. בדיקות אקטיביות (HAProxy, Nginx Plus) בודקות את נקודת הקצה /health כל 2–3 שניות ומוציאות מיד שרת בעייתי. בפרויקט עם 10,000 RPS, החלפת בדיקות פסיביות באקטיביות הפחיתה שגיאות 5xx ב-80%.

השוואה בין Nginx ל-HAProxy

פרמטר Nginx HAProxy
RPS מקסימלי ~20,000 ~50,000+
בדיקות בריאות פסיביות (חינם) / אקטיביות (Plus) אקטיביות מובנות
ACL/ניתוב מוגבל (location) ACLs גמישים, use_backend
סטטיסטיקות בסיסיות (stub_status) מפורטות (stats)
סיום SSL כן (מובנה) כן (מובנה)
סשנים דביקים ip_hash cookie insert
איזון TCP מודול stream כן (mode tcp)

HAProxy מתמודד עם עד 50,000 RPS—בערך פי 2.5 יותר מ-Nginx במצב איזון. יתרה מזאת, HAProxy מזהה תקלות מהר יותר בזכות בדיקות אקטיביות: לפי התיעוד הרשמי של HAProxy, זמן הזיהוי של שרת שנפל מצטמצם ל-2 שניות.

כיצד לבחור בין Nginx ל-HAProxy?

הבחירה תלויה בעומס ובדרישות נוספות. Nginx מתאים אם אתה צריך שרת אינטרנט ומאזן עומסים באחד, עם עומס של עד 20,000 RPS. HAProxy מיועד לאיזון טהור עם ביצועים גבוהים (עד 50,000+ RPS) ו-ACLs גמישים. בפרויקט אחד, החלפת Nginx ב-HAProxy הפחיתה את זמן ההשהיה ב-20% בזכות בדיקות בריאות מהירות ו-least-connections.

הגדרת איזון עומסים עם Nginx

Nginx הוא כלי רב-תכליתי: הוא עובד גם כשרת אינטרנט וגם כמאזן עומסים. עבור 5–20 שרתי backend, היכולות שלו מספיקות. תצורה בסיסית כוללת בלוק upstream עם keepalive ופרוקסי עם timeouts:

upstream myapp_backend {
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
    server 10.0.1.12:8080;
    keepalive 32;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://myapp_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
        proxy_next_upstream error timeout http_502 http_503;
    }
}

לעומסים גבוהים, אנו משתמשים באלגוריתמים של least-connections או ip-hash (לסשנים דביקים). שרתי גיבוי ובדיקות בריאות פסיביות מוגדרים באמצעות פרמטרים upstream myapp_backend { server 10.0.1.10:8080; server 10.0.1.11:8080; server 10.0.1.12:8080; keepalive 32; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://myapp_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 5s; proxy_read_timeout 60s; proxy_next_upstream error timeout http_502 http_503; } } ו-max_fails.

הגדרת איזון עומסים עם HAProxy

HAProxy הוא מאזן עומסים ייעודי לעומסים מ-10,000 RPS. הוא מציע ACLs גמישים, סטטיסטיקות מפורטות, ובדיקות בריאות אקטיביות. דוגמת תצורה ליישום אינטרנט ו-API:

global
    maxconn 100000
    nbthread 4
    stats socket /run/haproxy/admin.sock mode 660 level admin

defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 60s

frontend http_front
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certs/example.com.pem alpn h2,http/1.1
    acl is_api path_beg /api/
    use_backend api_backend if is_api
    default_backend web_backend

backend web_backend
    balance leastconn
    option httpchk GET /health
    cookie SERVERID insert indirect nocache
    server web01 10.0.1.10:8080 check inter 3s rise 2 fall 3 cookie web01
    server web02 10.0.1.11:8080 check inter 3s rise 2 fall 3 cookie web02

backend api_backend
    balance roundrobin
    server api01 10.0.2.10:3000 check inter 2s
    server api02 10.0.2.11:3000 check inter 2s

HAProxy תומך בסיום SSL (שילוב אישור ומפתח לקובץ PEM יחיד), איזון TCP למסדי נתונים ו-WebSocket, וסטטיסטיקות מובנות על פורט 8404.

כיצד להגדיר זמינות גבוהה עם Keepalived?

כדי למנוע ממאזן העומסים עצמו להפוך לנקודת כשל בודדת, אנו מגדירים זוג Keepalived עם VIP צף. כאשר המאזן הראשי נופל, המאזן המשני מקבל את ה-IP תוך שניות, ומבטיח זמינות של 99.99%. התצורה כוללת מופע VRRP עם מרווח פרסום של שנייה אחת ומעקב אחר תהליך HAProxy.

מה כלול בהתקנה?

  • ביקורת על הארכיטקטורה הנוכחית: שרתים, יישומים, רוחב פס.
  • תכנון תוכנית האיזון: בחירת אלגוריתם, בדיקות בריאות, סיום SSL.
  • הגדרת upstream ושרתי גיבוי.
  • פיתוח סקריפטים לעדכונים דינמיים של backend (אם נדרש).
  • בדיקות עומס עד 100,000 RPS.
  • תיעוד תפעולי והוראות לצוות התמיכה.
  • אחריות ל-3 חודשים על פעילות רציפה של מאזן העומסים.

תהליך ולוחות זמנים

שלב משך
ביקורת ותכנון 1–2 ימים
Nginx + SSL 1–2 ימים
HAProxy + ACLs + סטטיסטיקות 2–3 ימים
Keepalived +יום אחד
עדכונים דינמיים +1–2 ימים
בדיקות ותיעוד 1–2 ימים

המחזור המלא אורך בין 3 ל-6 ימי עבודה, תלוי במורכבות.

טעויות נפוצות בתצורה

טעות השלכות פתרון
אין בדיקות בריאות תעבורה לשרת מת, שגיאות 5xx הגדר בדיקות אקטיביות
timeouts קטנים מדי (<30 שניות) timeouts בבקשות ארוכות הגדל proxy_read_timeout ל-60–120 שניות
תצורת סשנים דביקים שגויה סשנים קופצים בין שרתים הפעל cookie insert עם פרמטר מתאים

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

דוגמת סקריפט לעדכון דינמי של upstream עבור Nginx
import subprocess
import boto3

def update_nginx_upstream():
    ec2 = boto3.client('ec2', region_name='eu-west-1')
    response = ec2.describe_instances(Filters=[
        {'Name': 'tag:Role', 'Values': ['app']},
        {'Name': 'instance-state-name', 'Values': ['running']},
    ])
    ips = [i['PrivateIpAddress'] for r in response['Reservations'] for i in r['Instances']]
    config = "upstream myapp_backend {\n" + "\n".join(f" server {ip}:8080;" for ip in ips) + "\n keepalive 32;\n}\n"
    with open('/etc/nginx/conf.d/upstream.conf', 'w') as f:
        f.write(config)
    subprocess.run(['nginx', '-t'], check=True)
    subprocess.run(['nginx', '-s', 'reload'], check=True)

אנו מבטיחים זמינות של 99.99% ומספקים תמיכה לאחר הפריסה. המהנדסים שלנו מחזיקים בהסמכות Nginx ו-HAProxy. בקש ייעוץ כבר עכשיו.