لود بالانسینگ (Load Balancing) چیست ؟

لود بالانسینگ به زبان ساده یعنی پخش کردن ترافیک بین چندین سرور یا منابع مختلف تا هیچ سروری تحت فشار زیاد قرار نگیرد و همه چیز روان و سریع اجرا شود. این کار باعث افزایش سرعت، کارایی و پایداری سرویس‌ها می‌شود. به کمک لود بالانسینگ، وقتی کاربران زیادی وارد یک سایت یا اپلیکیشن می‌شوند، درخواست‌های آن‌ها به‌طور مساوی بین سرورها توزیع می‌شود تا سایت کند نشود و همه بتوانند بدون مشکل از آن استفاده کنند.

انواع لود بالانسرها

لود بالانسرها را می‌توان بر اساس معیارهای مختلفی طبقه‌بندی کرد:

بر اساس لایه عملیاتی

  • لود بالانسرهای لایه ۴ (Layer 4 Load Balancers): این مدل فقط بر اساس اطلاعات پایه‌ای مثل آدرس‌های IP و پورت‌ها تصمیم می‌گیرد که درخواست را به کدام سرور بفرستد. سریع و ساده است اما خیلی هوشمندانه عمل نمی‌کند.
  • لود بالانسرهای لایه ۷ (Layer 7 Load Balancers): این نوع پیشرفته‌تر است و می‌تواند تصمیماتش را بر اساس محتوای درخواست‌ها بگیرد، مثلاً بررسی کند که کاربر چه صفحه‌ای از سایت را درخواست داده و آن را به مناسب‌ترین سرور بفرستد. به همین دلیل، انعطاف‌پذیری بیشتری دارد.

بر اساس نحوه پیاده‌سازی

  • لود بالانسر سخت‌افزاری چیست؟

لود بالانسر سخت‌افزاری یک دستگاه فیزیکی است که به‌صورت اختصاصی برای توزیع ترافیک شبکه طراحی شده است. این نوع لود بالانسرها معمولاً در دیتاسنترهای بزرگ و سازمان‌های پرمصرف استفاده می‌شوند، زیرا می‌توانند حجم بالایی از درخواست‌ها را پردازش کرده و عملکرد پایداری ارائه دهند.

  • مزایا:
  • عملکرد بسیار سریع و پایدار
  • قابلیت پردازش حجم بالای درخواست‌ها
  • امنیت بالاتر نسبت به مدل‌های نرم‌افزاری
  • معایب:
  • هزینه بالا
  • نیاز به نگهداری و مدیریت فیزیکی
  • برندهایی مانند F5 Networks، Cisco  و Barracuda  از معروف‌ترین تولیدکنندگان لود بالانسرهای سخت‌افزاری هستند.
  • لود بالانسرهای نرم‌افزاری: این لود بالانسرها به صورت نرم‌افزاری پیاده‌سازی می‌شوند و می‌توانند روی سرورهای معمولی اجرا شوند. آن‌ها انعطاف‌پذیری بیشتری دارند و معمولاً هزینه کمتری نسبت به نسخه‌های سخت‌افزاری دارند.
  • لود بالانسرهای ابری: این سرویس‌ها توسط ارائه‌دهندگان ابری ارائه می‌شوند و به صورت مقیاس‌پذیر و با هزینه مبتنی بر مصرف قابل استفاده هستند.

الگوریتم‌های لود بالانسینگ

برای توزیع ترافیک، لود بالانسرها از الگوریتم‌های مختلفی استفاده می‌کنند:

  • Round Robin :  درخواست‌ها به ترتیب بین سرورها توزیع می‌شوند.
  • Least Connections :  درخواست به سروری که کمترین تعداد اتصال فعال را دارد، ارسال می‌شود.
  • IP Hash :  بر اساس آدرس IP کلاینت، یک سرور مشخص انتخاب می‌شود تا همیشه به همان سرور متصل شود.
  • Weighted Round Robin :  مشابه Round Robin اما به برخی سرورها مقدار بیشتری داده می‌شود.
  • Least Response Time :  درخواست‌ها به سروری که سریع‌ترین پاسخ را دارد، ارسال می‌شود.

لود بالانسینگ در سرویس‌های ابری و کلود فلر (Cloudflare)

با پیشرفت فناوری‌های ابری، بسیاری از شرکت‌ها از سرویس‌های CDN (Content Delivery Network)  و لود بالانسینگ ابری استفاده می‌کنند. یکی از معروف‌ترین ارائه‌دهندگان این خدمات Cloudflare  است. این شرکت علاوه بر توزیع بار، امنیت وب‌سایت‌ها را نیز بهبود می‌بخشد و از حملات DDoS جلوگیری می‌کند.

مثال: نقش Cloudflare در لود بالانسینگ

فرض کنید یک فروشگاه اینترنتی دارید که در زمان‌های خاصی از سال، مانند فصل تخفیفات، ترافیک بالایی را تجربه می‌کند. بدون لود بالانسینگ، ممکن است سرور اصلی تحت فشار قرار گیرد و کاربران با کندی یا عدم دسترسی مواجه شوند.  Cloudflare  با استفاده از شبکه‌ای از سرورها در نقاط مختلف جهان، ترافیک را بین نزدیک‌ترین سرورها توزیع می‌کند تا:

  • سرعت لود صفحات برای کاربران بهبود یابد.
  • بار روی سرور اصلی کاهش پیدا کند.
  • از حملات مخرب جلوگیری شود.
  • لودبالانسر های ابری مشابه cloudflare

علاوه بر Cloudflare، شرکت‌های دیگری نیز خدمات لود بالانسینگ ارائه می‌دهند، از جمله:

  • Amazon AWS Elastic Load Balancing (ELB) :  یکی از محبوب‌ترین سرویس‌های لود بالانسینگ برای وب‌سایت‌ها و اپلیکیشن‌های ابری.
  • Google Cloud Load Balancer :  سرویسی که به توزیع بار در بین سرورهای مختلف کمک می‌کند.
  • Azure Load Balancer :  محصول مایکروسافت که در سرویس‌های ابری Azure استفاده می‌شود.

مزایای لود بالانسینگ

  • افزایش پایداری: در صورت خرابی یک سرور، لود بالانسر ترافیک را به سرورهای دیگر هدایت می‌کند.
  • بهبود کارایی: توزیع متوازن ترافیک باعث استفاده بهینه از منابع و کاهش زمان پاسخ‌دهی می‌شود.
  • مقیاس‌پذیری: امکان افزودن سرورهای جدید به سیستم بدون ایجاد وقفه در سرویس‌دهی.
  • افزایش امنیت: برخی از لود بالانسرها می‌توانند ترافیک‌های مشکوک را شناسایی و مسدود کنند تا حملات سایبری مانند DDoS کاهش یابد.

در این مقاله قصد داریم الگوریتم‌ لود بالانسینگ Round Robin را پیاده سازی کنیم.

برای راه اندازی نیاز به سه سرور داریم که میبایست یکی از آنها به عنوان پروکسی قرار گیرد و دوسرور مستر باشند.
همچنین سیستم عامل هر سه سرورubuntu  میباشد.

الگوریتم Round-robin در Nginx

 به طور پیش‌فرض فعال است و به این معنی است که درخواست‌ها به صورت یکسان و به ترتیب به سرورهای مستر منتقل می‌شوند. اگر دو سرور مستر داشته باشید، درخواست اول به سرور مستر ۱، درخواست دوم به سرور مستر ۲، درخواست سوم به سرور مستر ۱ و همینطور به همین ترتیب تقسیم خواهد شد.

. نصب Nginx روی سرور پروکسی:

sudo apt update

sudo apt install nginx

پیکربندی Nginx

فایل کانفیگ Nginx رو باز کنید:

sudo nano /etc/nginx/nginx.conf

و مقادیر زیر را در آن قرار دهید:

http {

    log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

                     ‘$status $body_bytes_sent “$http_referer” ‘

                     ‘”$http_user_agent” “$http_x_forwarded_for” ‘

                     ‘”$upstream_addr”‘;  # آی‌پی سرور مستر

    access_log /var/log/nginx/access.log main;

    upstream backend {

        server 192.168.1.2;  # سرور مستر ۱

        server 192.168.1.3;  # سرور مستر ۲

    }

    server {

        listen 80;

        server_name proxy.example.com;  # آی‌پی یا دامنه پروکسی

        location / {

            proxy_pass http://backend;

            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;

        }

    }

}

توضیحات:

  • در بخش upstream backend، دو سرور مستر master1 و master2 مشخص شده‌اند که میبایست آی پی هرکدام قرار داده شود.
  • log_format:این قسمت فرمت لاگ‌ها را تعیین می‌کند و مشخص می‌کند که چه اطلاعاتی در لاگ ذخیره بشود.
  •   در اینجا، علاوه بر اطلاعات معمولی مثل آی‌پی کاربر ($remote_addr)، زمان، درخواست‌ها و غیره، “$upstream_addr” اضافه شده که آی‌پی سرور مقصد (سرور مستر) را در لاگ‌ها ثبت می‌کند
  • . access_log:این بخش مشخص می‌کند که لاگ‌ها در کجا ذخیره بشوند و از چه فرمت لاگی استفاده بشه. در اینجا ما از فرمت main که خودمان تعریف کردیم استفاده کردیم و لاگ‌ها را در /var/log/nginx/access.log ذخیره می‌کنیم.
  •  Upstream:این بخش برای تعریف سرورهای مستر استفاده می‌شود. شما دو سرور مستر (۱۹۲٫۱۶۸٫۱٫۲ و ۱۹۲٫۱۶۸٫۱٫۳ را در اینجا تعریف می‌کنید.
  •  Server:بخش سرور پروکسی که به درستی تنظیم شده تا درخواست‌ها را به upstream (یعنی سرورهای مستر) فوروارد کند.

ذخیره کردن فایل و ریستارت Nginx:

sudo systemctl restart nginx

۲ . تنظیمات روی سرور مستر ۱ و ۲

شما باید سرویس‌هایی که می‌خواهید در این سرورها اجرا بشود مثلاً Nginx را نصب و راه‌اندازی کنید.

برای نصب Nginx در هر دو سرور مستر:

sudo apt update

sudo apt install nginx

برای اطمینان از اینکه سرور پروکسی بتونه به سرورهای مستر دسترسی داشته باشه، پورت‌های ۸۰ و ۴۴۳ رو در فایروال باز کنید:

sudo ufw allow 80

sudo ufw allow 443

مطمئن بشوید که سرورهای مستر به درستی در حال کار هستند. می‌توانید این کار را با ارسال یک درخواست به هر کدام از سرورها از طریق مرورگر یا ابزار  curl در سرور پروکسی انجام دهید:

curl http://192.168.1.2

curl http://192.168.1.3

Nginx لاگ‌هایی از درخواست‌ها در فایل‌های لاگ خود نگهداری می‌کنه که می‌توانید بررسی کنید که درخواست‌ها از کدام سرور مستر پاسخ گرفته‌اند.

مراحل:

  1. برای مشاهده لاگ‌ها از دستور زیر استفاده کنید:

tail -f /var/log/nginx/access.log

این دستور به شما اجازه می‌دهد که درخواست‌های جدید رو به صورت لایو ببینید. در این لاگ‌ها، شما می‌توانید ببینید که هر درخواست به کدام سرور مستر هدایت شده است.
ضمنا میتوانید برای تست یک دامین یا سابدامین را به صورت A record به آی پی سرور پروکسی هدایت کنید و این تست را بررسی کنید.

بررسی لاگ‌ها: در هر خط از لاگ، آی‌پی سروری که پاسخ داده را می‌بینید.

http {

    log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

                     ‘$status $body_bytes_sent “$http_referer” ‘

                     ‘”$http_user_agent” “$http_x_forwarded_for” ‘

                     ‘”$upstream_addr”‘;  # آی‌پی سرور مستر

    access_log /var/log/nginx/access.log main;

    upstream backend {

        server 192.168.1.2;  # سرور مستر ۱

        server 192.168.1.3;  # سرور مستر ۲

    }

    server {

        listen 80;

        server_name proxy.example.com;  # آی‌پی یا دامنه پروکسی

        location / {

            proxy_pass http://backend;

            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;

        }

    }

}

ارسال نظر