آموزش High Availability نصب و کانفیگ CoroSync و Pacemaker سرور مجازی لینوکس CentOS

مفهوم High Availability در دنیای اینترنت و وب هاستینگ و شبکه ، بسیار گسترده و وسیع است و شامل مباحث فراوانی است . در این قسمت قصد داریم تا سیستم High Availability را به صورت خیلی ساده و با نصب و کانفیگ برنامه های CoroSync و Pacemaker بر روی سیستم عامل لینوکس CentOS 5.8 نسخه فاینال پیاده سازی کنیم . در انتهای این مقاله ، قادر خواهید بود تا ۲ سرور مجازی مختلف را Sync کرده و در صورت متوقف شدن سرویس دهی هر یک از ۲ سرور یا node ، پینگ آی پی شما نخوابد و سرویس دهی وب سرور آپاچی ادامه داشته باشد .

در گذشته برای کلاسترینگ و پیاده سازی High Availability در سرور های لینوکسی از نرم افزار قدیمی Hearbeat استفاده میشد . امروزه برنامه Pacemaker جای هارت بیت را گرفته است و مشهور ترین نرم افزار کلاسترینگ به حساب می آید .

اجرای High Availability و کلاسترینگ در سرور مجازی لینوکس

اجرای High Availability و کلاسترینگ در سرور مجازی لینوکس

ابتدا selinux و iptables را در سیستم عاملی لینوکس کلیه سرور ها غیر فعال کنید

به روز رسانی پکیج های مورد نیاز  لینوکس :

yum install yum-utils

yum provides */libperl.so

yum install perl

yum provides */libesmtp.so.5

 نصب پیش نیاز های پیس میکر و کورو سینک :

su –

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/$(uname -i)/epel-release-5-4.noarch.rpm

wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo

حالا با اجرای فرمان زیر برنامه های  CoroSync و Pacemaker را بر روی لینوکس CentOS نود اول که در اینجا سرور مجازی A هست نصب میکنیم :

yum install -y pacemaker.$(uname -i) corosync.$(uname -i)

نصب برنامه Pacemaker بر روی سرور مجازی لینوکس

نصب برنامه Pacemaker بر روی سرور مجازی لینوکس

کانفیگ کردن CoroSync :

ابتدا برای ایجاد یک تاییدیه و تصدیق یا authentication باید یک فایل با نام و مسیر /etc/corosync/authkey در تمام node های کلاستر یا خوشه و از طریق ssh ایجاد نماییم . در صورتی که در انجام این مراحل و اجرای کورو سینک ، با پیغام خطای Invalid digest مواجه شوید ، بدان معناست که که authentication یا هنوز بین node ها تایید نشده است ، و یا مشکلی در مرحله authentication به وجود آمده است .

# Generate Key

corosync-keygen

# Define receiving server and copy to it.

node=172.25.3.26

cat /etc/corosync/authkey | ssh root@$node “cat >> /etc/corosync/authkey; chmod 0400 /etc/corosync/authkey; chown hacluster:haclient /etc/corosync/authkey”

در مرحله بعدی باید فایل corosync.conf.example  واقع در مسیر /etc/corosync/ را به corosync.conf تغییر نام داده و سپس آن را ویرایش کنیم . در اینجا من یک کپی جدید از این فایل را در همان مسیر ایجاد میکنم تا در صورت بروز اشتباه ، فایل اصلی از بین نرود . سپس با کمک فرمان vi فایل فوق را باز میکنیم و تغییرات زیر را در آن اعمال می نماییم :

cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

vi /etc/corosync/corosync.conf

با اضافه کردن این دستورات به فایل مذکور ، CoroSync را وادار به اجرا با یوزر root میکنیم . تنها در این صورت است که CoroSyn قابلیت تعامل با Pacemaker را به دست خواهد آورد  :

 aisexec {

# Run as root – this is necessary to be able to manage resources with Pacemaker

user: root

group: root

}

مقادیر زیر را بری شروع کار Pacemaker وارد میکنیم :

cat <<-END >>/etc/corosync/corosync.conf

service {

# Load the Pacemaker Cluster Resource Manager

name: pacemaker

ver: 0

}

END

با اجرای دستوارت زیر و با کمک ssh و root ، تنظیمات اعمال شده در فایل corosync.conf را در تمام node های موجود در کلاستر و خوشه کپی می کنیم :

# Define receiving server and copy to it

node=172.25.3.26

scp /etc/corosync/corosync.conf root@$node:/etc/corosync/corosync.conf

توجه داشته باشید که پکیج rpm ای که کوروسینک و پیس میکر را با آن نصب کردیم ، فولدر لاگ log را نساخته است در حالی که وجود این فلدر ضروری است . بنا بر این به صورت دستی و با اجرای دستورات زیر اقدام به ساخت این فولدر در node های کلاستر می نماییم :

ابتدا در node اول و با دستور زیر فولدر لاگ را ایجاد میکنیم :

mkdir /var/log/cluster/

 سپس به صورت ریموت ، و از طریق ssh این فولدر را روی بقیه نود های کلاستر میسازیم :

node=172.25.3.26

ssh root@$node “mkdir /var/log/cluster/”

با اجرای فرمان زیر ، سرویس CoroSync را استارت میکنیم :

service corosync start

با یکی از فرمان های زیر ، وضعیت CoroSync در سرور را چک میکنیم . در صورتی که کورو سینک به درستی اجرا نشده باشد ، با اجرای دستورات زیر با پیغام خطا و همچنین توضیحاتی در رابطه با علت بروز مشکل مواجه میشویم :

crm_mon

# Or for a single chunk of info

crm status

برای آشنایی با سایر command ها و دستورات CoroSync میتوانید از فرمان زیر استفاده کنید :

crm –help

در صورتی که کورو سینک در node اول کلاستر بدون مشکل و ارور خاصی اجرا شد ، میتوانید در node های بعدی نیز به صورت remote و از طریق ssh سرویس کورو سینک را اجرا نمایید :

node=172.25.3.26

ssh root@$node — service corosync start

قبل از ادامه کار ، با اجرای دستور زیر چک کنید آیا همه چیز به درستی کار میکند یا خیر :

crm_verify -L

همانطور که ملاحظه میکنید با پیغام خطا مواجه میشوید.دلیل بروز این پیام خطا ، استفاده کردن Pacemaker از سرویس STONITH است . برای حل مشکل دستورات زیر را در تمام نود ها اجرا کنید :

crm configure property stonith-enabled=false

crm_verify -L

کلاسترینگ Clustering

کلاسترینگ Clustering

اختصاص دادن یک IP به خوشه و کلاستر :

یکی از مهم ترین قسمت های کار ، اختصاص دادن یک IP به کلاستر ایجاد شده است . این کار به ما توانایی ارتباط بر قرار کردن با کلاستر را فارغ از اینکه کدام یک از node ها با کدام آدرس های IP در حال سرویس دهی و یا down هستند را میدهد . بنا بر این آدرس IP خوشه ، یک آدرس جدید است که در هیچ یک از نود ها نباید استفاده شده باشد .
نکته : من یک بار اینجا ip رو اشتباه وارد کردم و بعد از اون هر کاری که کردم نتونستم عوضش کنم…هنگام ست کردم مجدد ip با پیغام خطایی مبنی بر اینکه قبلا این عملیات انجام شده مواجه میشدم ، در نهایت همه چیز رو پاک کردم از اول کانفیگ کردم!!!بنا بر این دقت کنید اشتباه وارد نکنید چون دردسرش زیاده . اگر کسی از دوستان هم بلده چجوری میشه ClusterIP رو تغییر داد ، اعلام کنه تا ضمیمه کنم
برای اختصاص دادن آدرس به کلاستر دستورات زیر را با همین شکل و ip انتخاب شده توسط شما در تمام نود ها اجرا میکنیم تا node های موجود در خوشه قرار بگیرند :
crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=172.25.3.20 cidr_netmask=21 \
op monitor interval=30s
دستورات زیر را در نود ها اجرا میکنیم تا از اختصاص پیدا کردن ip به کلاستر و قرار گرفتن موفقیت آمیز هر نود در خوشه اطمینان حاصل کنیم :
crm configure show
crm status
حالا باید failback را غیر فعال کنیم زیرا در اینجا نیازی به failback برای هیچ یک از نود ها نداریم :
crm configure rsc_defaults resource-stickiness=100
crm configure show
ما در اینجا فقط ۲ نود داریم ، بنا بر این نیازی به چک کردم تعداد node ها و اینکه آیا به حد نصاب رسیده اند یا خیر نداریم . این قابلیت برای زمانی است که تعداد نود ها زیاد باشد . بنا بر این این سرویس را در Pacemaker متوقف و Disable میکنیم :
crm configure property no-quorum-policy=ignore 
crm configure show
هم اکنون اگر یکی از node ها از حالت سرویس دهی خارج شده یا Down شود ، سرویس دهی به node دیگر انتقال می یابد و قطع نمیشود .
کلاستر کردن وب سرور آپاچی : 
هم اکنون می توانیم به خوشه ایجاد شده ، recouce معرفی کنیم تا بر اساس مفاهیم  High Availability آن را پایدار کنیم . در صورت خارج شدن یک نود از سرویس دهی ، وب سرور آپاچی بر روی node دیگر به سرویس دهی خود ادامه خواهد داد .
ابتدا وب سرور آپاچی Apache و بنامه دانلود Wget را  در لینوکس CentOS نصب میکنیم :
yum install -y httpd wget
با اجرای دستورات زیر ، صفحه پیش فرض ایندکس را برای وب سرور آپاچی میسازیم تا متوجه شوید وب سرور آپاچی در حال پردازش کدام درخواست ها می باشد :
source /etc/sysconfig/network 
cat <<-END >/var/www/html/index.html
<html>
<body>The Apache cluster is on: $HOSTNAME</body>
</html>
END
کلاستر کردن وب سرور آپاچی

کلاستر کردن وب سرور آپاچی

وب سرور آپاچی به صورت پیش فرض به پیس میکر Pacemaker اجازه چک کردن سرویس و آگاهی یافتن از اصطلاحا live بودن آپاچی و اینکه آیا وب سرور در حال سرویس دهی می باشد یا از حالت سرویس دهی خارج شده است را نمیدهد . برای ایجاد این مجوز و آگاه کردن Pacemaker از وضعیت لحظه ای سرویس وب سرور آپاچی باید فایل httpd.conf را که به صورت پیش فرض در مسیر /etc/httpd/conf/httpd.conf در لینوکس واقع شده است ، به صورت زیر کانفیگ کنید :
ابتدا با کمک دستور ویرایش فایل vi فایل httpd.conf را باز و آماده ویرایش میکنیم :
vim /etc/httpd/conf/httpd.conf
سپس ExtendedStatus on و </Location /server-status> را در فایل httpd.conf پیدا کرده و آن ها را Uncomment میکنیم و از حالت کامنت بودن خارج میکنیم . سپس به دنبال عبارت All from .example.com در فایل httpd.conf گشته و آن را به Allow from 172.25 تغییر میدهیم . ip وارد شده در اینجا فقط برای مثال است و شما باید بر اساس تنظیمات سیستم خود آن را ست کنید . در نهایت با دستور :wq فایل را ذخیره کرده و سرویس آپاچی را مجددا راه اندازی میکنیم :
service httpd restart
حالا باید تنظیمات مربوط به کلاستر کردن آپاچی را در CoroSync و Pacemaker نیز اضافه کنیم تا وب سرور آپاچی به صورت کامل کلاستر و در محدوده خوشه قرار بگیرد :
crm configure primitive WebSite ocf:heartbeat:apache \

params configfile=/etc/httpd/conf/httpd.conf \

op monitor interval=1min

crm configure show

crm status

 برنامه Pacemaker را برای قابلیت زنده نگه داشتن چندین recourse کانفیگ میکنیم :

 

 crm configure colocation website-with-ip INFINITY: WebSite ClusterIP
crm configure show
crm_mon
حالا باید pacemaker را طوری کانفیگ کنیم تا ClusterIP قبل از وب سایت استارت شود و فقط زمانی متوقف شود که سرویس دهی وب سایت متوقف شده است .
crm configure order apache-after-ip mandatory: ClusterIP WebSite
crm configure show 
سیستم High Availability با موفقیت بر روی ۲ نود که در اینجا ۲ سرور مجازی با سیستم عامل لینوکس توزیع CentOS هستند ، پیاده سازی شد و وب سرور آپاچی اصطحا کلاستر شد .
موفق باشید
پاسخ به کلیه سوالات شما در زمینه وب هاستینگ و مدیریت سرور در انجمن کامپایلر

پاسخ دهید

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