آموزش نصب و راه اندازی Keepalive

Keepalived یک نرم افزار routing  است که با هدف دستیابی به load balancing و  high availability در سیستم های لینوکسی نوشته شده است. این نرم افزارd برای ایجاد load balancing از ماژول معروف Linux Virtual Server (IPVS) که امکان انجام load balancing  را در لایه 4 از هفت لایه OSI را فراهم میکند، استفاه می کند. Keepalived با استفاده از ایجاد چکر هایی (checker) به صورت پویا و انطباق پذیر و بر اساس Health سرور های تعریف شده در pool خود، عملیات load balancing را انجام دهد.

Keepalived برای ایجاد high availability  نیز از پروتکل VRRP استفاده می کند که یکی از اساس های router failover  است. همچنین برای تشخیص failure در شبکه در سریع ترین زمان ممکن نیز از پروتکل BFS استفاده می کند. ( این پروتکل یک نوع پروتکل hello است که وابسته به پروتکل مسیر یابی خاصی نیست و میتواند وجود خطا در شبکه را زیر یک ثانیه تشخیض دهد)

 

ذر این آموزش قصد داریم با استفاده از keepalived نسبت به تعریف و ایجاد virtual IP اقدام نمائیم. virtual IP یا VIP در واقع IPی است که به هیچ کارت شبکه فیزیکی ای اختصاص ندارد و به صورت شناور بین اینترفیس های مختلف جابجا می شود. VIP در مواردی مانند NAT و  fault-tolerance کاربرد دازد.

تصور کنید دو دیتابیس به صورت master/master  دارید که قرار است با برنامه یا وب سروی کار کند و قصد دارید توپولوژی خود را به صورتی ایجاد کنید که در صورتی که نود دیتابیس اول دچار مشکل شد و ارتباط آن از دست رفت، دیتابیس master  دوم جایگزین دیتابیس اول شود. یا تصور کنید وب سایتی پر بازدید دارید که نودی پشتیبان نیز برای آن در نظر گرفتید و قصد دارید در صورت down شدن نود اول، سرور پشتیبان جایگزین آن شود بدون این که نیازی باشد IP دیتا بیس یا نود جدید در جایی تعریف شود. با این روش شما یک VIP تعریف می کنید و به برنامه ها یا وب سرور خود این IP را معرفی می کنید در حالی که هر دو ماشین شما دارای آدرسی مجزا بر روی اینترفیس های فیزیکی خود هستند. اما از دید سایر برنامه ها و سایر سرور ها و کاربران یک IP در شبکه وجود خواهد داشت و آنها درکی از این که کدام ماشین در حال پاسخگویی درخواست ها هستند ندارد.

Virtual IP sample topology

 

نصب و پیکربندی Keepalived

Keepalived

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

# yum install keepalived

پس از نصب keepalived برای ایجاد امکان استفاده از VIP نیاز است تا IP Forwarding  بر را بر روی هر دو سرور نیز فعال کنیم. برای این کار از دستور زیر استفاده می کنیم

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

با زدن دستور زیر می بایست عبارت “net.ipv4.ip_forward = 1” را در خروجی مشاهده کنیم.

# sysctl -p
net.ipv4.ip_forward = 1

از آنجا که keepalive برای ایجاد VIP باید از پروتکل VRRP استفاده کند، نیاز است تا ابتدا rule های مربوط به این پروتکل در فایروال سیستم تعریف شود تا امکان برقراری ارتباط از طریق IP آدرس 244.0.0.18 یا آدرس مالتی کست از طریق اینترفیس فیزیکی که keepalive مدیریت میکند فراهم شود. به عنوان نمونه اینترفیس های مورد استفاده ما در هر دو سرور ens33 است.

در صورتی که از firewalld استفاده شود از دستورات زیر برای اضافه کردن rule های مربوطه در هر دو سرور استفاده میکنیم.

# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --reload

در صورتی که از iptables  استفاده شوداز دستورات زیر برای ایجاد rule  ها در هر دو سرور استفاده می نمائیم.

# iptables -I INPUT -p vrrp -j ACCEPT
# iptables-save > /etc/sysconfig/iptables
# systemctl restart iptables

حال نوبت به فعال سازی سرویس keepalived پس از بوت شدن سیستم و Start  کردن سرویس است.

# systemctl enable keepalived
# systemctl start keepalived

 

پیکربندی سرویس بر روی سرور master

برای پیکربندی سرور master باید در فایل /etc/keepalived/keepalived.conf instance آن را ایجاد نمود. نمونه ای از پیکربندی ساده سرور master به شکل زیر است.

vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state MASTER
interface ens33
virtual_router_id 1
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass mypass
}
virtual_ipaddress {
192.168.200.50e
}
}

که در آن

  • VI_1 نام instance تعریف شده
  • state  بیانگر نقش سرور است (master or slave)
  • interface بیانگر نام اینترفیس مورد استفاده است که آدرس فیزیکی اصلی سرور بر روی آن تنظیم می شود.
  • virtual_router_id و عددی که به آن تعلق میگیرد برای هر instance  در هر دو سرور می بایست یکسان باشد.  برای هر اینترفیس این عدد بین 0 تا 255 می تواند باشد.
  • priority بیانگر اولویت سرور می باشد. باید توجه داشت که این id برای سرور master  می بایست بالاتر از سرور یا سرور های backup باشد. در صورتی که از بیش از یک سرور به عنوان backup  استفاده می نمایید ( دو نود backup و یک نود master)، در صورتی که سرور مستر دچار مشکل شود سروری جایگزین خواهد شدکه priority  بالاتری داشته باشد.
  • advert_int فاصله بین Advert های VRRP به ثانیه است.
  • و در نهایت virtual_ipaddress  بیانگر IP آدرسی است که به عنوان VIP یا float IP  مورد استفاده قرار خواهد گرفت.
پیکربندی سرور backup

برای پیکربندی سرور backup باید در فایل  /etc/keepalived/keepalived.conf instance آن را ایجاد نمود. نمونه ای از پیکربندی ساده سرور backup به شکل زیر است. همانطور که در زیر مشاهده می کنید instance و virtual_router_id  برای این instance در هر دو سرور یکسان می باشد اما priority در سرور backup از سرور master  کمتر می باشد.

vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass mypass
}
virtual_ipaddress {
192.168.200.50
}
}

پس از اعمال تغییرات در پیکربندی  تنها کافست تا سرویس را reload کنیم تا تغییرات اعمال گردد.

# systemctl reload keepalived

برای تست این که VIP بر روی اینترفیس مربوطه در حال کار است دستور زیر را وارد میکنیم. در خروجی دستور خطی همانند خط زیر می بایست مشاهده شود.

# ip addr list ens33
    inet 192.168.20.50/24 scope global ens33

همچنین میتوانید در فایل /var/log/messages خطوطی مانند خطوط زیر را مشاهده کنید که بیانگر وضعیت keepalive  است.

 VRRP_Instance(VRRP1) Transition to MASTER STATE
 VRRP_Instance(VRRP1) Entering MASTER STATE
 VRRP_Instance(VRRP1) setting protocol VIPs.
 VRRP_Instance(VRRP1) Sending gratuitous ARPs on ens33 for 192.168.20.50
نکات مهم
  • نام vrrp_instance  در هر دو سرور باید یکسان باشد.
  • virtual_router_id  در هر instance و برای هر دو سرور باید یکسان باشد.
  • مقدار priority  در سرور backup  میبایست ازسرور master  کمتر باشد.
  • اگر فایروال در سرور ها فعال باشد یا به هر دلیلی امکان برقراری ارتباط از طریق پروتکل VRRP میسر نباشد، در هر دو سرور و در messages پیغامی مانند زیر مشاهده میکنید. این به این معنی است که سرور ها یکدیگر را به اصطلاح نمی بینند و هر کدام از سرور ها خود را در وضعیت master  تصور میکند. به این وضعیت به اصطلاح Split brain  نیز گفته می شود.
state with this message "Transition to MASTER STATE".
  • در هر instance  تنها امکان معرفی 20 VIP وجود دارد. در صورتی که نیاز به تعریف VIP های بیشتری باشد باید instance دیگری ایجاد نمود.
  • امکان ایجاد اسکریپت و track کردن وضعیت آن برای تصمیم گیری این که کی وضعیت تغییر کند یا بعد از تغییر وضعیت چه کارهایی انجام شود نیز وجود دارد که در آموزش های بعدی به آنها خواهم پرداخت.

در صورتی که پیکربندی صحیح باشد با قطع کردن شبکه یا خاموش کردن یکی از سرور ها، VIP در شبکه از طریق سرور backup قابل دسترس خواهد بود.

امیدوارم مفید واقع شود.

پیروز باشید.

# iptables -I INPUT -p vrrp -j ACCEPT
# iptables-save > /etc/sysconfig/iptables
# systemctl restart iptables
حامد
اشتراک دانش رو دوست دارم برای همین سعی میکنم مطالب آموزشی ای تهیه شده دارای جزئیات خوب و به صورت کامل تهیه بشوند.استفاده از مطالب این سایت در هر جایی بلا مانع می باشد. اما ذکر منبع رفتاری حرفه ای و اخلاقی خواهد بود. من را از نظرات خود مطلع سازید. و اگر میخواهید در مورد من بیشتر بدانید سری به صفحه "در باره من" بزنید.