نصب HAProxy به همراه keepalived

در این مقاله به بررسی نصب HAProxy به همراه keepalived به عنوان load balancer میپردازیم

 

haproxy concept

 

لازم به ذکر است که برای درک کامل این مقاله باید آشنایی نصبی با لینوکس را داشته باشید.

برای شروع نصب ابتدا باید ۴ سرور یا ماشین مجازی مانند لیست زیر را آماده کنید.

Load Balancer 1: lb1.example.com, IP address: 192.168.0.100
Load Balancer 2: lb2.example.com, IP address: 192.168.0.101
Web Server 1: http1.example.com, IP address: 192.168.0.102
Web Server 2: http2.example.com, IP address: 192.168.0.103
We also need a virtual IP address that floats between lb1 and lb2: 192.168.0.99

برای ابتدای کار شمای کلی از سیستمی که می خواهیم آن را پیاده سازی کنیم را در زیر آورده ایم که بهتر بشود آن را متصور شد

haproxy schemaتوضیح اینکه در اینجا ما دو وب سرور و دو load balancer داریم که این دو وب سرور در پشت به عنوان backend قرار میگیرند و load balancer ها در جلوی کار و به عنوان frontend چیزی که کاربرها آن را میبینند قرار میگیرند.

بعد از توضیحات بالا ما شروع می کنیم به آماده کردن سرورها و نصب تمام مولفه های مورد نیاز

در مرحله اول بر روی سرورهای http1 و http2 که وب سرورهای ما هستند سرویس apache2 را نصب میکنیم

apt-get install apache2 -y

بعد از نصب apache2 فایل زیر را باز میکنیم و موارد زیر را در آن قرار میدهیم .

vi /etc/apache2/sites-available/default

SetEnvIf Request_URI “^/check\.txt$” dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

بعد از انجام کارهای بالا ابتدا یک فایل به نام check.txt در مسیر زیر درست میکنیم

touch /var/www/check.txt

و در آخر برای اینکه تنظیمات بر روی apache2 اعمال شود سرویس را ریستارت میکنیم.

/etc/init.d/apache2 restart

در اینجا کار نصب مولفه ها بر روی سرورهای backend تمام شد.

نکته: توجه داشته باشید که این عملیات باید بر روی هر دو سرور http1 و http2 انجام شود.

در مرحله دوم از این قسمت به آماده سازی سرورهای frontend می پردازیم.

برای این منظور دستور زیر را بر روی دو سرور lb1 و lb2 اجرا میکنیم

apt-get install haproxy -y

بعد از نصب haproxy بر روی هر دو سرور lb1 و lb2 نوبت به تنظیمات آن می رسد.

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

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
cat /dev/null > /etc/haproxy/haproxy.cfg

و بعد فایل haproxy.cfg را بصورت زیر ویرایش میکنیم .

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy

defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

     listen webfarm 192.168.0.99:80
mode http
stats enable
stats auth someuser:somepassword
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server webA 192.168.0.102:80 cookie A check
server webB 192.168.0.103:80 cookie B check

و سپس برای اینکه سرویس haproxy در هر بار ریستارت کردن سسینم بصورت اتوماتیک اجرا شود بصورت زیر عمل میکنیم

vi /etc/default/haproxy

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
# Add extra flags here.
#EXTRAOPTS=”-de -m 16″

در مرحله بعدی برای اینکه خود haproxy های نصب شده به گلوگاه و SPOF تبدیل نشوند اقدام به نصب ابزار keepalived میکنیم که باعث می شود یک IP بین دو سیستم اشتراک گذاشته شود.

برای این منظور ابتدا باید به سییستم عامل این اجازه را بدهیم که بتواند بصورت سراسری یک منبع را در شبکه به اشتراک بگذارد و استفاده کنید. به همین دلیل بصورت زیر عمل میکنیم.

vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

و سپس با دستور زیر ان را در سیستم عامل, اعمال میکنیم

sysctl -p

بعد از انجام موارد گفته شده و آماده کردن سیستم عامل نوبت به نصب ابزار keepalived میرسد.

برای این منظور دستور زیر را اجرا میکنیم.

apt-get install keepalived -y

بعد از نصب این ابزار نوبت به تنظیم آن میرسد. به همین منظور بصورت تک تک بر روی ماشین های lb1 و lb2 وارد شده و تنظیمات مربوطه را اعمال میکنیم.

ابتدا بر روی ماشین lb1 وارد میشویم و فایل keepalived.conf را بصورت زیر ویرایش میکنیم .

vi /etc/keepalived/keepalived.conf

vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script “killall -0 haproxy” # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}

vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
۱۹۲٫۱۶۸٫۰٫۹۹
}
track_script {
chk_haproxy
}
}

و بعد برای اینکه تنظیمات اعمال شود سرویس را ریستارت میکنیم

/etc/init.d/keepalived restart

برای اینکه ببینیم آیا تنظیمات درست انجام شده است یا نه دستور زیر را اجرا میکنیم

ip add sh eth0

و باید خروجی مانند زیر ببینیم

۲: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:63:f7:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fe63:f75c/64 scope link
valid_lft forever preferred_lft forever

بعد از این کار وارد lb2 می شویم و بصورت زیر عمل میکنیم

vi /etc/keepalived/keepalived.conf

vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script “killall -0 haproxy” # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}

vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 100 # 101 on master, 100 on backup
virtual_ipaddress {
۱۹۲٫۱۶۸٫۰٫۹۹
}
track_script {
chk_haproxy
}
}

و برای اعمال تنظیمات سرویس را ریستارت میکنیم

/etc/init.d/keepalived restart

و در آخرین مرحله از این قسمت به تست درست بودن تنظیمات می پردازیم

ip add sh eth0

بعد از اجرای دستور باید خزوجی مانند زیر ببینیم

۲: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:be:7b:3b brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:febe:7b3b/64 scope link
valid_lft forever preferred_lft forever

در اینجا کار نصب و تنظیمات تمام شد.

در آخر برای اینکه مطمئن شویم تمام کار ها بدرستی انجام شده است آدرس زیر را در مرورگر خود وارد میکنیم

http://192.168.0.99/haproxy?stats

باید صفحه ای مانند زیر ببینیم

haproxy stat

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *