ترجمه مقاله در آستانه شروع دوره آماده شد
تعادل بار یک راه حل متداول برای مقیاس افقی برنامه های وب در چندین میزبان است در حالی که یک نقطه دسترسی به سرویس را برای کاربران فراهم می کند.
HAProxy در تلاش است تا استفاده از منابع را بهینه کند، توان عملیاتی را به حداکثر برساند، زمان پاسخ را به حداقل برساند و از بارگذاری بیش از حد هر منبع فردی جلوگیری کند. می توان آن را بر روی انواع توزیع های لینوکس مانند CentOS 8 که در این راهنما بر روی آن تمرکز خواهیم کرد و همچنین سیستم ها نصب کرد.
HAProxy به ویژه برای وب سایت هایی با ترافیک بسیار بالا مناسب است و بنابراین اغلب برای بهبود قابلیت اطمینان و عملکرد تنظیمات وب سرویس چند سرور استفاده می شود. این راهنما مراحل راه اندازی HAProxy را به عنوان متعادل کننده بار در یک میزبان ابری CentOS 8 تشریح می کند، که سپس ترافیک را به سرورهای وب شما هدایت می کند.
به عنوان پیش نیاز برای بهترین نتایج، شما باید حداقل دو وب سرور و یک سرور متعادل کننده بار داشته باشید. وب سرورها باید حداقل یک وب سرویس اولیه مانند nginx یا httpd را اجرا کنند تا تعادل بار بین آنها را آزمایش کنند.
نصب HAProxy در CentOS 8
از آنجایی که HAProxy یک برنامه منبع باز است که به سرعت در حال توسعه است، ممکن است توزیعی که در مخازن استاندارد CentOS برای شما در دسترس است آخرین نسخه نباشد. برای اطلاع از نسخه فعلی، دستور زیر را اجرا کنید:
sudo yum info haproxy
HAProxy همیشه سه نسخه پایدار را برای انتخاب فراهم می کند: دو نسخه اخیر پشتیبانی شده و نسخه سوم قدیمی که هنوز به روز رسانی های مهم را دریافت می کند. همیشه می توانید آخرین نسخه پایدار فهرست شده در وب سایت HAProxy را بررسی کنید و سپس تصمیم بگیرید که با کدام نسخه کار کنید.
در این راهنما، ما آخرین نسخه پایدار 2.0 را نصب خواهیم کرد که در زمان نوشتن راهنما هنوز در مخازن استاندارد موجود نبود. شما باید آن را از منبع اصلی نصب کنید. اما ابتدا بررسی کنید که آیا شرایط لازم برای دانلود و کامپایل برنامه را دارید یا خیر.
sudo yum install gcc pcre-devel tar make -y
کد منبع را با استفاده از دستور زیر دانلود کنید. می توانید بررسی کنید که آیا نسخه جدیدتری در دسترس است یا خیر
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
پس از اتمام دانلود، فایل ها را با استفاده از دستور زیر استخراج کنید:
tar xzvf ~/haproxy.tar.gz -C ~/
به فهرست منبع بدون بسته بندی بروید:
cd ~/haproxy-2.0.7
سپس برنامه را برای سیستم خود کامپایل کنید:
make TARGET=linux-glibc
و در نهایت، خود HAProxy را نصب کنید:
sudo make install
HAProxy اکنون نصب شده است، اما برای کارکردن به برخی دستکاریهای اضافی نیاز دارد. اجازه دهید راه اندازی نرم افزار و سرویس های زیر را ادامه دهیم.
راه اندازی HAProxy برای سرور شما
اکنون دایرکتوری ها و فایل آماری زیر را برای ورودی های HAProxy اضافه کنید:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
یک پیوند نمادین برای باینری ها ایجاد کنید تا بتوانید دستورات HAProxy را به عنوان یک کاربر معمولی اجرا کنید:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
اگر می خواهید یک پروکسی به عنوان سرویس به سیستم خود اضافه کنید، فایل haproxy.init را از نمونه ها در پوشه /etc/init.d خود کپی کنید. مجوزهای فایل را ویرایش کنید تا اسکریپت اجرا شود و سپس سیستم دیمون را مجددا راه اندازی کنید:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
همچنین باید به سرویس اجازه دهید که به طور خودکار هنگام شروع سیستم راه اندازی مجدد شود:
sudo chkconfig haproxy on
برای راحتی، همچنین توصیه می شود یک کاربر جدید برای اجرای HAProxy اضافه کنید:
sudo useradd -r haproxy
پس از این، می توانید با استفاده از دستور زیر دوباره شماره نسخه نصب شده را بررسی کنید:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
در مورد ما، نسخه باید 2.0.7 باشد، همانطور که در خروجی مثال بالا نشان داده شده است.
در نهایت، فایروال پیش فرض در CentOS 8 برای این پروژه کاملاً محدود است. از دستورات زیر برای اجازه دادن به خدمات مورد نیاز و تنظیم مجدد فایروال استفاده کنید:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
تنظیم بار متعادل کننده
راه اندازی HAProxy یک فرآیند نسبتا ساده است. اساسا، تنها کاری که باید انجام دهید این است که به HAProxy بگویید چه اتصالاتی باید به آنها گوش دهد و کجا باید آنها را انتقال دهد.
این کار با ایجاد یک فایل پیکربندی /etc/haproxy/haproxy.cfg با تعریف تنظیمات انجام می شود. می توانید در مورد گزینه های پیکربندی HAProxy مطالعه کنید
تعادل بار در لایه انتقال (لایه 4)
بیایید با تنظیمات اولیه شروع کنیم. یک فایل پیکربندی جدید ایجاد کنید، به عنوان مثال با استفاده از vi با دستور زیر:
sudo vi /etc/haproxy/haproxy.cfg
بخش های زیر را به فایل اضافه کنید. جایگزین کردن نام ارائهکننده چه چیزی باید سرورهای شما را در صفحه آمار فراخوانی کند، و private_ip - آدرس های IP خصوصی سرورهایی که می خواهید ترافیک وب را به آنها هدایت کنید. می توانید آدرس های IP خصوصی را بررسی کنید
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
این یک متعادل کننده بار لایه انتقال (لایه 4) با نام خارجی http_front listening در پورت 80 را تعریف می کند، که سپس ترافیک را به یک باطن پیش فرض به نام http_back هدایت می کند. آمار اضافی /haproxy?stats صفحه آمار را به آدرس مشخص شده متصل می کند.
الگوریتم های متعادل کننده بار مختلف
مشخص کردن سرورها در بخش backend به HAProxy اجازه می دهد تا در صورت امکان از این سرورها برای متعادل کردن بار طبق یک الگوریتم دور رابین استفاده کند.
الگوریتم های متعادل کننده برای تعیین اینکه هر اتصال به کدام سرور در backend ارسال می شود استفاده می شود. در اینجا برخی از گزینه های مفید وجود دارد:
- درخواست کتبی: هر سرور به نوبه خود با توجه به وزن خود استفاده می شود. این نرمترین و منصفانهترین الگوریتم زمانی است که زمان پردازش سرورها به طور مساوی توزیع شود. این الگوریتم پویا است و به شما اجازه می دهد تا وزن سرور را در لحظه تنظیم کنید.
- Leastconn: سرور با کمترین اتصالات انتخاب شده است. Round Robin بین سرورهایی با بار یکسان انجام می شود. استفاده از این الگوریتم برای جلسات طولانی مانند LDAP، SQL، TSE و ... توصیه می شود، اما برای جلسات کوتاه مانند HTTP چندان مناسب نیست.
- اولین: اولین سرور با اسلات های اتصال موجود، اتصال را دریافت می کند. سرورها از پایین ترین شناسه عددی تا بالاترین، که به طور پیش فرض موقعیت سرور در مزرعه است، انتخاب می شوند. هنگامی که یک سرور به maxconn رسید، سرور بعدی استفاده می شود.
- منبع: آدرس IP منبع هش شده و بر وزن کل سرورهای در حال اجرا تقسیم می شود تا مشخص شود کدام سرور درخواست را دریافت می کند. به این ترتیب، همان آدرس IP مشتری همیشه به همان سرور می رود، در حالی که سرورها ثابت می مانند.
راه اندازی تعادل بار در سطح برنامه (لایه 7)
یکی دیگر از گزینه های موجود، پیکربندی یک متعادل کننده بار برای اجرا در لایه برنامه (لایه 7) است، که زمانی مفید است که بخش هایی از برنامه وب شما در هاست های مختلف قرار دارد. این را می توان با مهار کردن انتقال اتصال، به عنوان مثال با URL، به دست آورد.
فایل پیکربندی HAProxy را با استفاده از یک ویرایشگر متن باز کنید:
sudo vi /etc/haproxy/haproxy.cfg
سپس طبق مثال زیر قسمت های frontend و backend را پیکربندی کنید:
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 check
قسمت جلویی یک قانون ACL به نام url_blog را اعلام می کند که برای همه اتصالات با مسیرهایی که با /blog شروع می شوند اعمال می شود. Use_backend مشخص میکند که اتصالات منطبق با شرایط url_blog باید توسط یک باطن به نام blog_back ارائه شوند و همه درخواستهای دیگر توسط backend پیشفرض مدیریت میشوند.
در قسمت پشتیبان، پیکربندی دو گروه از سرورها را تنظیم می کند: http_back، مانند قبل، و یک جدید به نام blog_back، که اتصالات به example.com/blog را مدیریت می کند.
پس از تغییر تنظیمات، فایل را ذخیره کرده و HAProxy را با استفاده از دستور زیر راه اندازی مجدد کنید:
sudo systemctl restart haproxy
اگر در حین راه اندازی اخطار یا پیام خطایی دریافت کردید، پیکربندی خود را برای آنها بررسی کنید و مطمئن شوید که همه فایل ها و پوشه های لازم را ایجاد کرده اید، سپس دوباره راه اندازی مجدد را امتحان کنید.
تست تنظیمات
هنگامی که HAProxy پیکربندی و اجرا شد، آدرس IP عمومی سرور بار متعادل کننده را در یک مرورگر باز کنید و بررسی کنید که آیا به درستی به backend متصل شده اید یا خیر. پارامتر stats uri در پیکربندی یک صفحه آمار در آدرس مشخص شده ایجاد می کند.
http://load_balancer_public_ip/haproxy?stats
وقتی صفحه آمار را بارگذاری می کنید، اگر همه سرورهای شما سبز نشان داده شوند، آنگاه راه اندازی با موفقیت انجام شد!
صفحه آمار حاوی اطلاعات مفیدی برای ردیابی میزبان وب شما، از جمله زمان بالا/پایین و تعداد جلسات است. اگر سرور قرمز علامت گذاری شده است، مطمئن شوید که سرور روشن است و می توانید آن را از دستگاه متعادل کننده بار پینگ کنید.
اگر متعادل کننده بار شما پاسخ نمی دهد، مطمئن شوید که اتصالات HTTP توسط فایروال مسدود نشده اند. همچنین مطمئن شوید که HAProxy با استفاده از دستور زیر کار می کند:
sudo systemctl status haproxy
محافظت از صفحه آمار با رمز عبور
با این حال، اگر صفحه آمار به سادگی در قسمت جلو لیست شده باشد، برای دیدن همه باز است، که ممکن است ایده خوبی نباشد. در عوض، میتوانید با افزودن مثال زیر به انتهای فایل haproxy.cfg، یک شماره پورت سفارشی به آن اختصاص دهید. جایگزین کردن نام کاربری и کلمه عبور برای چیزی امن:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
پس از افزودن یک گروه شنونده جدید، پیوند قدیمی stats uri را از گروه frontend حذف کنید. پس از اتمام، فایل را ذخیره کرده و HAProxy را مجددا راه اندازی کنید.
sudo systemctl restart haproxy
سپس بار دیگر با شماره پورت جدید Load Balanser را باز کنید و با نام کاربری و رمز عبوری که در فایل کانفیگ مشخص کرده اید وارد شوید.
http://load_balancer_public_ip:8181
مطمئن شوید که همه سرورهای شما هنوز سبز نشان داده می شوند و سپس فقط IP متعادل کننده بار را بدون هیچ شماره پورتی در مرورگر خود باز کنید.
http://load_balancer_public_ip/
اگر حداقل صفحات فرود متنوعی در سرورهای بکاند خود داشته باشید، متوجه خواهید شد که هر بار که صفحه را مجدداً بارگذاری میکنید، پاسخی از میزبان متفاوت دریافت میکنید. می توانید الگوریتم های مختلف تعادل را در بخش پیکربندی امتحان کنید یا بررسی کنید
نتیجه گیری: HAProxy Load Balancer
بابت راه اندازی موفقیت آمیز بار متعادل کننده HAProxy خود را تبریک می گویم! حتی با یک راهاندازی متعادل بار اولیه، میتوانید عملکرد و در دسترس بودن برنامه وب خود را به میزان قابل توجهی بهبود بخشید. این راهنما فقط مقدمه ای برای متعادل کردن بار با HAProxy است، که قادر است بسیار بیشتر از آنچه در راهنمای راه اندازی سریع پوشش داده شود. ما توصیه می کنیم با استفاده از پیکربندی های مختلف آزمایش کنید
با استفاده از میزبان های متعدد برای محافظت از وب سرویس شما با headroom، خود متعادل کننده بار ممکن است هنوز یک نقطه خرابی را نشان دهد. شما می توانید با نصب یک IP شناور بین متعادل کننده های بار متعدد، دسترسی بالا را بیشتر بهبود بخشید. شما می توانید در مورد این در ما بیشتر بدانید
بیشتر در مورد دوره
منبع: www.habr.com