نحوه استفاده از HAProxy برای تعادل بار بر روی سرور مجازی اوبونتو(قسمت اول)
درباره HAProxy
HAProxy(پروکسی با دسترسی بالا) یک لودبالانسر منبع باز است که می تواند هر سرویس TCP را لودبالانس کند.آن به طور ویژه برای لودبالانسینگ HTTP از آنجا که می تواند تداوم نشست و پردازش لایه 7 را پشتیبانی کند،مناسب است.
با معرفی شبکه های خصوصی اشتراکی در DigitalOcean ، HAProxy می تواند به عنوان یک لودبالانسر front-endدر دو سرورمجازی از طریق اتصال به شبکه خصوصی ،پیکربندی شود.
مقدمه
ما از سه vps(بخش) در اینجا استفاده خواهیم کرد:
بخش اول – لودبالانسر
نام سرور: haproxy
سیستم عامل اوبنتو آی پی عمومی: 1.1.1.1 آی پی اختصاصی: 10.0.0.100
بخش دوم -گره اول
نام سرور: lamp1
سیستم عامل : lamp بر روی ابونتو آی پی اختصاصی : 10.0.0.1
بخش دوم – گره دوم
نام سرور : lamp2
سیستم عامل : lamp بر روی ابونتو آی پی اختصاصی : 10.0.0.2
نصب haproxy
از دستور apt-get برای نصب haproxy استفاده کنید.
ما نیاز به فعال کردن haproxyبرای آغاز شدن توسط اسکریپت init داریم.
nano /etc/default/haproxy
گزینه ENABLED را بر روی 1 تنظیم کنید.
ENABLED=1
برای چک کردن اینکه این تغییر به خوبی اعمال شده است،اسکریپت init مربوط به haproxy را بدون هیچ پارامتری اجرا کنید.
شما باید موارد زیر را ببینید:
root@haproxy:~# service haproxy
Usage: /etc/init.d/haproxy {start|stop|reload|restart|status}
پیکربندی haproxy
ما فایل پیکربندی پیش فرض را انتقال داده و مال خودمان را ایجاد خواهیم کرد:
mv /etc/haproxy/haproxy.cfg{,.original}
ایجاد و ویرایش یک فایل پیکربندی جدید:
nano /etc/haproxy/haproxy.cfg
اجازه دهید ما با اضافه کردن پیکربندی بلوک به بلوک به این فایل شروع نماییم:
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
دستور log به یک سرور SYSLOG که پیام های ورود ارسال خواهد شد اشاره دارد. در ابونتو rsyslog قبلا نصب واجرا شده است اما بر روی هیچ آدرس IP ، listen نیست . ما فایل های پیکربندی rsyslog را بعدا اصلاح خواهیم کرد.
دستور maxconn تعداد اتصالات همزمان را در ظاهر مشخص می کند.مقدار پیش فرض 2000 است و باید بر اساس پیکربندی سرور مجازی تنظیم شود.
دستورات گروهها و کاربران پردازش HAProxy را به کاربریا گروه خاصی تغییر می دهد .اینها نباید تغییر کند.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
ما در حال تعیین مقادیر پیش فرض در این بخش هستیم.مقادیری که باید اصلاح شود دستورات timeout هستند.گزینه connect حداکثر زمان برای انتظار تلاش برای اتصال موفق به سرور مجازی می باشد.
وقفه های سرورو کلاینت ها زمانی که انتظار می رود کلاینت ها یا سرور تصدیق شوند یااطلاعات را در طول پردازش tcp ارسال کنند،اعمال می شوند.
دستور rertries تعداد rertries را برای انجام در سرور مجازی بعد از ناموفق بودن اتصال تنظیم می کند.
گزینه redispatch توزیع مجدد نشست را در صورت شکست اتصال فعال می کند.بنابراین اگر یک سرور مجازی خاموش شود نشست stickness لغو می شود.
listen appname 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
stats realm Strictly\ Private
stats auth A_Username:YourPassword
stats auth Another_User:passwd
balance roundrobin
option httpclose
option forwardfor
server lamp1 10.0.0.1:80 check
server lamp2 10.0.0.2:80 check
این شامل پیکربندی frontendو backend است. ما HAProxy را برای listen کردن بر روی پورت 80 برای appname که فقط یک نام برای شناسایی نرم افزار است ، پیکربندی می کنیم.دستور stats، صفحه آمار اتصال را فعال می کند و از آن با احراز هویت عمومی http با استفاده از اعتبار مشخص شده توسط دستور تایید stats،محافظت می کند.
این صفحه می تواند با url ذکر شده در stats uri مشاهده شود.بنابراین در این مورد ، آن به صورت زیر است:
http://1.1.1.1/haproxy?stats;
نسخه آزمایشی از این صفحه را می توانید در اینجا ببینید
دستور balance الگوریتم لودبالانسینگ استفاده شده را مشخص می کند. گزینه های موجود اینها هستند:
Round Robin (roundrobin), Static Round Robin (static-rr), Least Connections (leastconn), Source (source), URI (uri) and URL parameter (url_param)
اطلاعات مربوط به هر الگوریتم می تواند از داکیومنت های رسمی بدست آید
دستور server،سرور backend را اعلام می کند. دستور این است:
server <name> <address>[:port] [param*]
نامی که ما در اینجا ذکر کردیم در بخش logها و هشدارها ظاهر خواهد شد.پارامترهای زیادی توسط این دستور پشتیبانی می شوند و از پارامترهای check و cookie در این مقاله استفاده خواهیم کرد. گزینه check ، health check را بر روی سرور مجازی فعال می کند، در غیر این صورت سرورمجازی همیشه در دسترس در نظر گرفته می شود.
هنگامی که شما پیکربندی را انجام دادید سرویس HAProxy را آغاز نمایید.
service haproxy start
تست لودبالانسینگ و غلبه بر شکست
برای آزمایش این راه اندازی ،یک اسکریپت php را بر روی تمام وب سرورهایتان ایجاد کنید.(سرورهای backend-LAMP1 and LAMP2 )
/var/www/file.php
حالا ما از curl استفاده کرده و این فایل را چند بار درخواست خواهیم داد.
> curl http://1.1.1.1/file.php
Server IP: 10.0.0.1
Client IP: 10.0.0.100
X-Forwarded-for: 117.213.X.X
> curl http://1.1.1.1/file.php
Server IP: 10.0.0.2
Client IP: 10.0.0.100
X-Forwarded-for: 117.213.X.X
> curl http://1.1.1.1/file.php
Server IP: 10.0.0.1
Client IP: 10.0.0.100
X-Forwarded-for: 117.213.X.X
توجه کنید در اینجا چگونه HAProxy متناوبا اتصال را مابینLAMP1 و LAMP2 برقرار می کند،این روشی است که Round Robin با آن کار می کند. آی پی کلاینت که ما در اینجا می بینیم آدرس آی پی اختصاصی لود بالانسر وهدر X-Forwarded-For آی پی شماست.
برای دیدن اینکه غلبه بر شکست چگونه کار می کند، به وب سرور رفته و سرویس را متوقف کنید.
lamp1@haproxy:~#service apache2 stop
با curl برای دیدن اینکه همه چیز چگونه کار می کند، درخواست ارسال کنید.
نشست Stickiness
اگر سرویس برنامه تحت وب شما برای محتوای پویا بر اساس جلسات ورود کاربران به کار می رود،بازدیدکنندگان چیزهای عجیب و غریب را به علت تعویض مداوم تجربه خواهند کرد. نشست Stickiness این اطمینان را می دهد که بازدیدکننده ای بر روی سرور مجازی است که اولین درخواست خود را دریافت کرده است.این توسط برچسب زدن هر سرورbackend توسط یک کوکی انجام می گیرد.
ما از کد php زیر برای نشان دادن اینکه نشست stickiness چگونه کار می کند استفاده خواهیم کرد.
/var/www/session.php
<?php
header('Content-Type: text/plain');
session_start();
if(!isset($_SESSION['visit']))
{
echo "This is the first time you're visiting this server";
$_SESSION['visit'] = 0;
}
else
echo "Your number of visits: ".$_SESSION['visit'];
$_SESSION['visit']++;
echo "\nServer IP: ".$_SERVER['SERVER_ADDR'];
echo "\nClient IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR']."\n";
print_r($_COOKIE);
?>
این کد یک نشست php را ایجاد کرده و تعداد بازدید از صفحات را در یک نشست تکی نمایش می دهد.
ترجمه شده توسط : آرزو رنجبرپور
پست های توصیه شده
آموزش نصب لاراول در سرور دایرکت ادمین
۶ خرداد, ۱۳۹۹