راه اندازی یک highavailable system به همراه لود بالانسر
تصور کنید یه وب سایت داریم که محبوب شده و روز به روز بازدیدش بالاتر میره، کم کم با زیاد شدن بازدید ها سرور دیگه توانایی پاسخگویی نداره و اصطلاحا down میشه!
برای مدیریت این حجم درخواست دو راه وجود داره:
۱- سرورمون رو ارتقا بدیم
۲-به جای یه سرور چند تا سرور داشته باشیم
روش اول خیلی ساده پیاده سازی میشه، در عوض یکسری محدودیت ها داره. اولین محدودیت اینه که سرور تا یه حدی توانایی ارتقا داره، و دومین مورد اینه که اگر به هر دلیلی ( مثل خرابی ، ارتقا وب سایت و ...) سرور از دسترس خارج بشه عملا سایتمون از دسترس خارج میشه.
توی این پست قصد داریم پیاده سازی روش دوم رو اموزش بدیم.
ببینیم لود بالانسینگ چیه:
لود بالانسر کارش اینه درخواست هایی که برای سایتمون میاد رو تحویل میگیره، و بین دو یا چند سرورمون تقسیم میکنه و ساختار سیستم هامون هم به این صورت میشه:
خب شروع میکنیم به راه اندازی یه وب سرور ساده بههمراه لود بالانسر:(توزیعی که من در نظر گرفتم اوپن سوزه هستش ولی غیر از دستورات پایه ای مراحل تقریبا مشابه بقیه توزیع هاست)
نصب nginx بعنوان وب سرور:(اینجا قصد نداریم کانفیگ nginx رو توضیح بدیم و فقط قراره در حد اجرای یه صفحه html تنظیمش کنیم)
zypper refresh
zypper install -y nginx
حالا یکسری تنظیمات ساده روی nginx انجام میدیم. فایل /etc/nginx/nginx.conf رو باز میکنیم:
و بخش سرور رو پیدا میکنیم و این تغییرات رو انجام میدیم:
listen 80;
server_name _;
همونطور که تو عکس بالا مشخصه دایرکتوری روت srv/www/htdocs هستش(تو توزیع های مختلف متفاوته باید از طریق فایل کانفیگ ببینید کجاس) یه فایل index.html توی این مسیر میسازیم:
touch /srv/www/htdocs/index.html
echo " hello i am SERVER 1" > /srv/www/htdocs/index.html
همین مراحل رو توی سرور دوم انجام بدیدم فقط تو دستور بالا بجای SERVER 1 بزنید SERVER 2 .
برای لود بالانس کردن نرم افزار haproxy رو انتخاب کردیم. همونطور که توی شکل بالا مشخصه لود بالانسر روی سرور سوم نصب میشه و به درخواست هارو به وب سرور ها انتقال میده.
نصب HaProxy
zypper install -y haproxy
تنظیم haproxy:
vi /etc/haproxy/haproxy.cfg
خطوط زیر رو به انتهای فایل کانفیگ اضافه میکنیم:
frontend http-in
bind *:80
default_backend webserver
backend webserver
balance roundrobin
server web1 192.168.1.70:80 check
server web2 192.168.1.71:80 check
بخش frontend مربوط به لود بالانسر میشه که مشخص میکنه چه ورودی هایی رو دریافت کنه و به کجا بفرسته:
این اپشن یعنی هر ورودی ای که رو پورت ۸۰ بود رو دریافت کن
bind *:80
حالا ورودی هایی رو که دریافت کردی برای بک اند سرور به این اسم بفرست ( ادرس های ای پی که وارد شده ادرس وب سرورهامونه)
default_backend webservers
بخش backend webserver هم مربوط به سرورهامون میشه که مشخص میکنه چند تا سرور داریم و ادرسشون چیه و با یه اسم دلخواه به frontend معرفی میشه
balance roundrobin
server web1 192.168.1.70:80 check سرور رو معرفی میکنه که کجا قرار داره و چک کن که در حال سرویس دهی هم باشه
حالا سرویس هامونو روی سرور های اول و دوم اجرا میکنیم
systemctl start nginx.service
systemctl enable nginx.service
و روی سرور لود بالانسر هم سرویس Haproxy رو اجرا میکنیم:
systemctl start haproxy
systemctl enable haproxy
حالا اگر توی Browser ادرس آی پی لودبالانسر رو وارد کنید باید متن hello i am SERVER 1 نمایش داده بشه اگه رفرش کنید میبینید که صفحه عوض میشه به hello i am SERVER 2
[طبیعیه که سرور ها و لود بالانسر باید تو یه شبکه باشن تا بتونن با هم ارتباط برقرار کنن]
شاید تا اینجا برای شما هم سوال شده باشه اگه لود بالانسر به مشکل بخوره چی؟ اینجاست که Highavailability نقششو ایفا میکنه.
به این صورت که یه لود بالانسر دیگه به عنوان بک اپ تنظیم میکنیم و در صورتی که اولی از کار افتاد دومیه دست بکار میشه.
پس باید یه لودبالانسر دیگه روی سرور چهارم نصب میکنیم (کانفیگ ها هیچ تغییری نمیکنه)
برای Highavailability از نرم افزار Keepalive استفاده میکنیم
روش کار این دست نرم افزار ها به این صورته که یه ای پی مجازی میسازه (اینجا ۱۹۲.۱۶۸.۱.۷۳ ) و درخواست ها برای این ادرس ای پی مجازی فرستاده میشه.
سرور Master به درخواست ها جواب میده . به محض اینکه این سرور از دسترس خارج بشه سرور Backup به درخواست های ای پی مجازی جواب میده
نرم افزار Keepalive رو روی سرور لود بالانسر اول نصب میکنیم و اون رو بعنوان Master در نظر میگیریم
zypper install keepalived
کافیگ ها سرور Master
vi /etc/keepalived/keepalaived.conf
script chk_haproxy { #یه اسکریپت بهش میدیم که لود بالانسر رو مانیتور کنه و اگه جواب نداد یعنی سرور از
دسترس خارج شده و سرور بعدی باید جایگزین بشه
script “killall -0 haproxy”
interval 2
weight 2
}
vrrp_instance VRRP1 {
state MASTER
# ادرس کارت شبکه ای که قراره باهاش کار کنیم
interface eth1
# مربوط به پروتکل مورد استفاده نرم افزاره و باید رو دوتا سیستم یکسان باشه تا همدیگرو شناسایی کنن
virtual_router_id 41
# سیستم مستر از اولویت بالاتری برخورداره
priority 200
advert_int 1
authentication { یوزر پس برای امنیت
auth_type PASS
auth_pass 1066
}
virtual_ipaddress { ادرس ای پی مجازی
192.168.1.73/24
}
track_script{ اسکریپتی که بالا تعریف کردیم رو تست میکنه
Chk_haproxy
}
کانفیگ Keepalived روی سرور لودبالانسر دوم به عنوان سرور Backup
vi /etc/keepalived/keepalived.conf
script chk_haproxy {
script “killall -0 haproxy”
interval 2
weight 2
}
vrrp_instance VRRP1 {
state BACKUP
interface eth1
virtual_router_id 41
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1066
}
virtual_ipaddress {
192.168.1.73/24
}
track_script{
Chk_haproxy
}
حالا دیگه فقط یه ای پی داریم، اگر ای پی رو توی Browser وارد کنیم صفحه سایت لود میشه. برای تست هم میتونید سرور اصلی رو ریستارت کنید و ببینید که سایت همچنان در دسترسه :)
(دقت داشته باشید High Available کردن دیتا بیس ها بخاطر تغییرات لحظه به لحظه داده ها فرایند های پیچیده تری رو نیازمنده که توی این پست قصد نداریم در موردش بحث کنیم)
سیستمی که بالا توضیح داده شد اصطلاحا Active/Passive گفته میشه و همیشه یه لود بالانسر غیر فعال و در حالت اماده به کاره اگر بخوایم هر دوتا لود بالانسر همزمان کار کنن باید حالت active/passive رو به active/active تبدیل کنیم.(آموزش حالت Active/Active رو توی یه پست جداگانه میزارم)
لزوما لازم نیست که سرور های لود بالانسر جداگانه باشن و برای کاهش هزینه میشه از وب سرور ها برای نصب Haproxy و Keepalived استفاده کرد فقط باید پورت Nginx رو از ۸۰ به ۸۰۸۰ تغییر بدیم چون قراره Haproxy به پورت ۸۰ جواب بده و تنظیمات Haproxy هم برای معرفی Backend به پورت ۸۰۸۰ تغییر پیدا میکنه.
مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند میکنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.
مطلبی دیگر از این انتشارات
۷۰ میلیون کلمه ترجمه در روز!
مطلبی دیگر از این انتشارات
قصه ترگمان: بدون رانت هم مگر میشود؟
مطلبی دیگر از این انتشارات
چطور امریه دانش بنیان گرفتم؟