نصب و راه‌اندازی HAProxy در Ubuntu 16.04

حامد الهی فر ۰۸ آذر ۱۳۹۶ ۰ دیدگاه

درباره HAProxy

(HAProxy) یا همان (High Availability Proxy)، یک نرم‌افزار (Open Source) جهت متعادل کردن بار یا همان (Loan Balancer) است که توانایی تعادل برای هر نوع سرویس (TCP) را داراست؛ به‌خصوص پروتوکل (HTTP) با پشتیبانی از لایه 7 شبکه.

 

مقدمه

برای این آموزش شما به 3 سرور مجازی احتیاج خواهید داشت.

Server 1 – Load Balancer
Hostname: haproxy
OS: Ubuntu Public IP: 1.1.1.1 Private IP: 10.0.0.100

Server 2 – Node 1
Hostname: lamp1
OS: LAMP on Ubuntu Private IP: 10.0.0.1

Server 2 – Node 2
Hostname: lamp2
OS: LAMP on Ubuntu Private IP: 10.0.0.2

 

نصب (HAProxy)

 

جهت نصب به‌راحتی می‌توان از دستور (apt-get) استفاده کرد:

apt-get install haproxy

سپس نیاز است تا اجرای اتوماتیک نرم‌افزار را پس از بوت شدن سیستم فعال کرد:

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) جهت مشخص کردن لاگ سرور برای ارسال اطلاعات است.

در خط مربوط به (maxconn)، تعداد کانکشن‌های همزمان را مشخص کنید که به‌صورت پیش فرض عدد 2000 است. این عدد بسته به توان سرور شما متغییر است.

خطوط (user , group) مشخص‌کننده‌ی مجوز اجرایی (HAProxy) تحت این نام و گروه است، این متغیر را تغییر ندهید.

defaults

    log     global

    mode    http

    option  httplog

    option  dontlognull

    retries 3

    option redispatch

    timeout connect  5000

    timeout client  10000

    timeout server  10000

در این بخش تنظیمات پیش فرض را اعمال می‌کنیم.

گزینه‌ی (connect) تعیین‌کننده‌ی زمان اتمام اعتبار ارتباط است؛ همچنین زمان‌های مربوط به (client , server) نیز هر کدام تعیین می‌کنند که در چه زمانی (acknowledge) اطلاعات ارسال شده منقضی شوند. (HAProxy) پیشنهاد می‌کند که این 2 مقدار با هم برابر باشند.

(Retries) مشخص‌کننده‌ی تعداد تلاش‌ها برای برقراری ارتباط پس از قطع ارتباط به صورت اتفاقی است.

(option redispatch) تعیین‌کننده‌ی توضیع ارتباط در صورت از مدار خارج شدن یک سرور است.

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

 

این بخش تنظیمات هر دو سمت ارتباط را مشخص می‌کند. (HAProxy) بر روی پورت 80 تنظیم شده است و (appname) نمایان‌گر نام برنامه است. گزینه‌های (state) برای احراز هویت بر روی بستر (HTTP) است.

برای مشاهده وضعیت سلامت خود (HAProxy)، لینک مشخص شده (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 <name> <address>[:port] [param*]

 

نام مشخص شده در این‌جا در لاگ‌ها ظاهر می‌شود و پارامتر (check) بیان‌گر بررسی سلامت سرور توسط (HAProxy) جهت ارسال اطلاعات است. درصورت فقدان کلمه (check) سلامت سرور همیشه تاییدشده است.

بعد از تنظیمات اولیه، سرویس را ریست کنید.

service haproxy start

 

تست (HAProxy)

برای تست یک فایل (PHP) با اطلاعات زیر را در تمام سرورها ایجاد می‌کنیم.

/var/www/file.php

<?php

header(‘Content-Type: text/plain’);

echo “Server IP: “.$_SERVER[‘SERVER_ADDR’];

echo “\nClient IP: “.$_SERVER[‘REMOTE_ADDR’];

echo “\nX-Forwarded-for: “.$_SERVER[‘HTTP_X_FORWARDED_FOR’];

?>

هم‌اکنون فایل را با (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

 

به روش (Round Robin) در ارائه اطلاعات توجه کنید. ببینید چگونه 2 سرور موجود به‌ترتیب به درخواست ما پاسخ می‌دهند.

در ادامه یک سرور را از مدار خارج می‌کنیم تا رفتار (HAProxy) را بررسی کنیم.

lamp1@haproxy:~#service apache2 stop

مجددا با (Curl) چند درخواست ارسال کنید تا عمکرد (HAProxy) برای شما محرز شود.

فناوران شبکه سینداد (آهنگ نوآوری)

سینداد یعنی هدیه‌ی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.