نحوه راه اندازی High Availability/Clustering در لینوکس

High Availability
اصطلاح High Availability به کیفیت کار سیستم بدون توقف برای مدت زمان طولانی اشاره دارد. راهکار HA را میتوان با استفاده از روشهای مختلفی از جمله سختافزاری و نرمافزاری پیادهسازی و استفاده کرد. یکی از راهکارهای معمول برای پیادهسازی HA راهاندازی Cluster میباشد.
در روشهای cloud computing، یک کلاستر از دو یا تعداد بیشتری از کامپیوتر ( که به عنوان Node یا Member شناخته میشوند) تشکیل میشود که در کنار هم وظیفه مشخصی را انجام میدهند. اما در پیادهسازی HA تنها یک نود وظیفه ارائه سرویس را بر عهده دارد. در این معماری در صورت وقوع هر گونه مشکل برای نود اصلی، نود پشتیبان وظیفه ارائه سرویس را برعهده میگیرد.
چهار دسته اصلی کلاسترها
Storage
این نوع کلاستر فایل سیستم یکپارچهای برای سرورهای موجود در کلاستر فراهم میکند که به سروها اجازه میدهد به صورت موازی بر روی یک فایل سیستم اشتراکی بخوانند و بنویسند.
High Availability
این نوع کلاستر نگرانی مربوط به توقف سرویسدهی در صورت Fail شدن سرور اصلی را برطرف میکند.
Load Balancing
در این نوع کلاستر درخواستها به سرورهای مختلف ارسال و از این طریق بار بین نودهای مختلف کلاستر تقسیم میشود.
High Performance
این نوع کلاستر امکان پردازشهای موازی یا همزمان را فراهم میکند و از این طریق کارایی برنامههای کاربردی را بهبود میدهد.
برای راه اندازی یک failover cluster حداقل به دو نود نیاز داریم.
node1:172.16.30.2
node2:172.16.30.3
تنظیم DNS های Local بر روی هر کدام از سرورها
برای اینکه سرورها بتوانند با هم ارتباط برقرار کنند بایستی بر روی هر دو سرور DNS های زیر را به فایل hosts هر دو سرور اضافه کنیم.
$ sudo nano /etc/hosts
$ 172.16.30.2 node1.iranshell.co
$ 172.16.30.3 node2.iranshell.co
نصب و تنظیم Corosync و Pacemaker
با استفاده از دستور زیر پکیچهای مورد نیاز را بر روی هر دو سرور نصب میکنیم.
$ sudo apt install pcs pacemaker corosync
بعد از اتمام نصب با استفاده از دستورات زیر سروریس pcs را بر روی هر دور سرو فعال کرده و از اجرا بودن آنها مطمئن میشویم.
$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd
ایجاد Cluster
حین نصب پکیجهای بالا یک کاربر سیستمی به اسم hacluster به سیستم اضافه میشود که بایستی بر روی هر دو سرور پسوردی برای آن تنظیم کنیم.
$ sudo passwd hacluster
با استفاده از پسور در نظر گرفته شده در مرحله قبل با اجرای دستور زیر مجوزهای لازم برای احراز هویت دو نود را تست میکنیم.
$ sudo pcs host auth node1.iranshell.co node2.iranshell.co -u hacluster -p password_here
در ادامه با استفاده از دستور زیر کلاستر مورد نظرمان را ایجاد میکنیم.
$ ssh-keygen
$ ssh-cpoy-id [email protected]
sudo pcs cluster setup iranshell_cl node1.iranshell.co node2.iranshell.co
برای اینکه کلاستر در هربار بوت شدن سیستم به صورت اتوماتیک استارت شود از دستورات زیر استفاده میکنیم.
$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

تنظیم Option های مربوط به Cluster
$ sudo pcs property set stonith-enabled=false
$ sudo pcs property set no-quorum-policy=ignore
$ sudo pcs property list
اضافه کردن Resource ها به کلاستر
$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=172.16.30.4 cidr_netmask=24 op monitor interval=60s
$ sudo pcs resource group add resource_g floating_ip floating_ip2
$ sudo pcs status resources

تنظیمات iptables
$ sudo iptables -A INPUT -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -A OUTPUT -o eth1 -p udp -m multiport --sports 5404,5405,5406 -m conntrack --ctstate ESTABLISHED -j ACCEPT