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

ابتدا selinux و iptables را در سیستم عاملی لینوکس کلیه سرور ها غیر فعال کنید.
به روز رسانی پکیج های مورد نیاز لینوکس :
نصب پیش نیاز های پیس میکر و کورو سینک :
حالا با اجرای فرمان زیر برنامه های CoroSync و Pacemaker را بر روی لینوکس CentOS نود اول که در اینجا سرور مجازی A هست نصب میکنیم :
نصب برنامه Pacemaker بر روی سرور مجازی لینوکس

کانفیگ کردن CoroSync :
ابتدا برای ایجاد یک تاییدیه و تصدیق یا authentication باید یک فایل با نام و مسیر /etc/corosync/authkey در تمام node های کلاستر یا خوشه و از طریق ssh ایجاد نماییم . در صورتی که در انجام این مراحل و اجرای کورو سینک ، با پیغام خطای Invalid digest مواجه شوید ، بدان معناست که که authentication یا هنوز بین node ها تایید نشده است ، و یا مشکلی در مرحله authentication به وجود آمده است .
در مرحله بعدی باید فایل corosync.conf.example واقع در مسیر /etc/corosync/ را به corosync.conf تغییر نام داده و سپس آن را ویرایش کنیم . در اینجا من یک کپی جدید از این فایل را در همان مسیر ایجاد میکنم تا در صورت بروز اشتباه ، فایل اصلی از بین نرود . سپس با کمک فرمان vi فایل فوق را باز میکنیم و تغییرات زیر را در آن اعمال می نماییم :
با اضافه کردن این دستورات به فایل مذکور ، CoroSync را وادار به اجرا با یوزر root میکنیم . تنها در این صورت است که CoroSyn قابلیت تعامل با Pacemaker را به دست خواهد آورد :
مقادیر زیر را بری شروع کار Pacemaker وارد میکنیم :
با اجرای دستوارت زیر و با کمک ssh و root ، تنظیمات اعمال شده در فایل corosync.conf را در تمام node های موجود در کلاستر و خوشه کپی می کنیم :
توجه داشته باشید که پکیج rpm ای که کوروسینک و پیس میکر را با آن نصب کردیم ، فولدر لاگ log را نساخته است در حالی که وجود این فلدر ضروری است . بنا بر این به صورت دستی و با اجرای دستورات زیر اقدام به ساخت این فولدر در node های کلاستر می نماییم :
ابتدا در node اول و با دستور زیر فولدر لاگ را ایجاد میکنیم :
سپس به صورت ریموت ، و از طریق ssh این فولدر را روی بقیه نود های کلاستر میسازیم :
با اجرای فرمان زیر ، سرویس CoroSync را استارت میکنیم :
با یکی از فرمان های زیر ، وضعیت CoroSync در سرور را چک میکنیم . در صورتی که کورو سینک به درستی اجرا نشده باشد ، با اجرای دستورات زیر با پیغام خطا و همچنین توضیحاتی در رابطه با علت بروز مشکل مواجه میشویم :
برای آشنایی با سایر command ها و دستورات CoroSync میتوانید از فرمان زیر استفاده کنید :
در صورتی که کورو سینک در node اول کلاستر بدون مشکل و ارور خاصی اجرا شد ، میتوانید در node های بعدی نیز به صورت remote و از طریق ssh سرویس کورو سینک را اجرا نمایید :
قبل از ادامه کار ، با اجرای دستور زیر چک کنید آیا همه چیز به درستی کار میکند یا خیر :
همانطور که ملاحظه میکنید با پیغام خطا مواجه میشوید.دلیل بروز این پیام خطا ، استفاده کردن Pacemaker از سرویس STONITH است . برای حل مشکل دستورات زیر را در تمام نود ها اجرا کنید :
کلاسترینگ Clustering

اختصاص دادن یک IP به خوشه و کلاستر :
یکی از مهم ترین قسمت های کار ، اختصاص دادن یک IP به کلاستر ایجاد شده است . این کار به ما توانایی ارتباط بر قرار کردن با کلاستر را فارغ از اینکه کدام یک از node ها با کدام آدرس های IP در حال سرویس دهی و یا down هستند را میدهد . بنا بر این آدرس IP خوشه ، یک آدرس جدید است که در هیچ یک از نود ها نباید استفاده شده باشد .
نکته : من یک بار اینجا ip رو اشتباه وارد کردم و بعد از اون هر کاری که کردم نتونستم عوضش کنم…هنگام ست کردم مجدد ip با پیغام خطایی مبنی بر اینکه قبلا این عملیات انجام شده مواجه میشدم ، در نهایت همه چیز رو پاک کردم از اول کانفیگ کردم!!!بنا بر این دقت کنید اشتباه وارد نکنید چون دردسرش زیاده . اگر کسی از دوستان هم بلده چجوری میشه ClusterIP رو تغییر داد ، اعلام کنه تا ضمیمه کنم.
برای اختصاص دادن آدرس به کلاستر دستورات زیر را با همین شکل و ip انتخاب شده توسط شما در تمام نود ها اجرا میکنیم تا node های موجود در خوشه قرار بگیرند :
دستورات زیر را در نود ها اجرا میکنیم تا از اختصاص پیدا کردن ip به کلاستر و قرار گرفتن موفقیت آمیز هر نود در خوشه اطمینان حاصل کنیم :
حالا باید failback را غیر فعال کنیم زیرا در اینجا نیازی به failback برای هیچ یک از نود ها نداریم :
ما در اینجا فقط ۲ نود داریم ، بنا بر این نیازی به چک کردم تعداد node ها و اینکه آیا به حد نصاب رسیده اند یا خیر نداریم . این قابلیت برای زمانی است که تعداد نود ها زیاد باشد . بنا بر این این سرویس را در Pacemaker متوقف و Disable میکنیم :
هم اکنون اگر یکی از node ها از حالت سرویس دهی خارج شده یا Down شود ، سرویس دهی به node دیگر انتقال می یابد و قطع نمیشود .
کلاستر کردن وب سرور آپاچی :
هم اکنون می توانیم به خوشه ایجاد شده ، recouce معرفی کنیم تا بر اساس مفاهیم High Availability آن را پایدار کنیم . در صورت خارج شدن یک نود از سرویس دهی ، وب سرور آپاچی بر روی node دیگر به سرویس دهی خود ادامه خواهد داد .
ابتدا وب سرور آپاچی Apache و بنامه دانلود Wget را در لینوکس CentOS نصب میکنیم :
با اجرای دستورات زیر ، صفحه پیش فرض ایندکس را برای وب سرور آپاچی میسازیم تا متوجه شوید وب سرور آپاچی در حال پردازش کدام درخواست ها می باشد :
کلاستر کردن وب سرور آپاچی

وب سرور آپاچی به صورت پیش فرض به پیس میکر Pacemaker اجازه چک کردن سرویس و آگاهی یافتن از اصطلاحا live بودن آپاچی و اینکه آیا وب سرور در حال سرویس دهی می باشد یا از حالت سرویس دهی خارج شده است را نمیدهد . برای ایجاد این مجوز و آگاه کردن Pacemaker از وضعیت لحظه ای سرویس وب سرور آپاچی باید فایل httpd.conf را که به صورت پیش فرض در مسیر /etc/httpd/conf/httpd.conf در لینوکس واقع شده است ، به صورت زیر کانفیگ کنید :
ابتدا با کمک دستور ویرایش فایل vi فایل httpd.conf را باز و آماده ویرایش میکنیم :
سپس ExtendedStatus on و </Location /server-status> را در فایل httpd.conf پیدا کرده و آن ها را Uncomment میکنیم و از حالت کامنت بودن خارج میکنیم . سپس به دنبال عبارت All from .example.com در فایل httpd.conf گشته و آن را به Allow from 172.25 تغییر میدهیم . ip وارد شده در اینجا فقط برای مثال است و شما باید بر اساس تنظیمات سیستم خود آن را ست کنید . در نهایت با دستور :wq فایل را ذخیره کرده و سرویس آپاچی را مجددا راه اندازی میکنیم :
حالا باید تنظیمات مربوط به کلاستر کردن آپاچی را در CoroSync و Pacemaker نیز اضافه کنیم تا وب سرور آپاچی به صورت کامل کلاستر و در محدوده خوشه قرار بگیرد :
برنامه Pacemaker را برای قابلیت زنده نگه داشتن چندین recourse کانفیگ میکنیم :
حالا باید pacemaker را طوری کانفیگ کنیم تا ClusterIP قبل از وب سایت استارت شود و فقط زمانی متوقف شود که سرویس دهی وب سایت متوقف شده است .
سیستم High Availability با موفقیت بر روی ۲ نود که در اینجا ۲ سرور مجازی با سیستم عامل لینوکس توزیع CentOS هستند ، پیاده سازی شد و وب سرور آپاچی اصطحا کلاستر شد .
نویسنده Babak Ajideh
در گذشته برای کلاسترینگ و پیاده سازی High Availability در سرور های لینوکسی از نرم افزار قدیمی Hearbeat استفاده میشد . امروزه برنامه Pacemaker جای هارت بیت را گرفته است و مشهور ترین نرم افزار کلاسترینگ به حساب می آید .
اجرای High Availability و کلاسترینگ در سرور مجازی لینوکس
ابتدا selinux و iptables را در سیستم عاملی لینوکس کلیه سرور ها غیر فعال کنید.
به روز رسانی پکیج های مورد نیاز لینوکس :
کد PHP:
yum install yum-utils
yum provides */libperl.so
yum install perl
yum provides */libesmtp.so.5
کد PHP:
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
کد PHP:
yum install -y pacemaker.$(uname -i) corosync.$(uname -i)
کانفیگ کردن CoroSync :
ابتدا برای ایجاد یک تاییدیه و تصدیق یا authentication باید یک فایل با نام و مسیر /etc/corosync/authkey در تمام node های کلاستر یا خوشه و از طریق ssh ایجاد نماییم . در صورتی که در انجام این مراحل و اجرای کورو سینک ، با پیغام خطای Invalid digest مواجه شوید ، بدان معناست که که authentication یا هنوز بین node ها تایید نشده است ، و یا مشکلی در مرحله authentication به وجود آمده است .
کد PHP:
# 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”
کد PHP:
cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
vi /etc/corosync/corosync.conf
کد PHP:
aisexec {
# Run as root – this is necessary to be able to manage resources with Pacemaker
user: root
group: root
}
کد PHP:
cat <<-END >>/etc/corosync/corosync.conf
service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 0
}
END
کد PHP:
# Define receiving server and copy to it
node=172.25.3.26
scp /etc/corosync/corosync.conf root@$node:/etc/corosync/corosync.conf
ابتدا در node اول و با دستور زیر فولدر لاگ را ایجاد میکنیم :
کد PHP:
mkdir /var/log/cluster/
کد PHP:
node=172.25.3.26
ssh root@$node “mkdir /var/log/cluster/”
کد PHP:
service corosync start
کد PHP:
crm_mon
# Or for a single chunk of info
crm status
کد PHP:
crm –help
کد PHP:
node=172.25.3.26
ssh root@$node — service corosync start
کد PHP:
crm_verify -L
کد PHP:
crm configure property stonith-enabled=false
crm_verify -L
اختصاص دادن یک IP به خوشه و کلاستر :
یکی از مهم ترین قسمت های کار ، اختصاص دادن یک IP به کلاستر ایجاد شده است . این کار به ما توانایی ارتباط بر قرار کردن با کلاستر را فارغ از اینکه کدام یک از node ها با کدام آدرس های IP در حال سرویس دهی و یا down هستند را میدهد . بنا بر این آدرس IP خوشه ، یک آدرس جدید است که در هیچ یک از نود ها نباید استفاده شده باشد .
نکته : من یک بار اینجا ip رو اشتباه وارد کردم و بعد از اون هر کاری که کردم نتونستم عوضش کنم…هنگام ست کردم مجدد ip با پیغام خطایی مبنی بر اینکه قبلا این عملیات انجام شده مواجه میشدم ، در نهایت همه چیز رو پاک کردم از اول کانفیگ کردم!!!بنا بر این دقت کنید اشتباه وارد نکنید چون دردسرش زیاده . اگر کسی از دوستان هم بلده چجوری میشه ClusterIP رو تغییر داد ، اعلام کنه تا ضمیمه کنم.
برای اختصاص دادن آدرس به کلاستر دستورات زیر را با همین شکل و ip انتخاب شده توسط شما در تمام نود ها اجرا میکنیم تا node های موجود در خوشه قرار بگیرند :
کد PHP:
crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=172.25.3.20 cidr_netmask=21 \
op monitor interval=30s
کد PHP:
crm configure show
crm status
کد PHP:
crm configure rsc_defaults resource-stickiness=100
crm configure show
کد PHP:
crm configure property no-quorum-policy=ignore
crm configure show
کلاستر کردن وب سرور آپاچی :
هم اکنون می توانیم به خوشه ایجاد شده ، recouce معرفی کنیم تا بر اساس مفاهیم High Availability آن را پایدار کنیم . در صورت خارج شدن یک نود از سرویس دهی ، وب سرور آپاچی بر روی node دیگر به سرویس دهی خود ادامه خواهد داد .
ابتدا وب سرور آپاچی Apache و بنامه دانلود Wget را در لینوکس CentOS نصب میکنیم :
کد PHP:
yum install -y httpd wget
کد PHP:
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 را باز و آماده ویرایش میکنیم :
کد PHP:
vim /etc/httpd/conf/httpd.conf
کد PHP:
service httpd restart
کد PHP:
crm configure primitive WebSite ocf:heartbeat:apache \
params configfile=/etc/httpd/conf/httpd.conf \
op monitor interval=1min
crm configure show
crm status
کد PHP:
crm configure colocation website-with-ip INFINITY: WebSite ClusterIP
crm configure show
crm_mon
کد PHP:
crm configure order apache-after-ip mandatory: ClusterIP WebSite
crm configure show
نویسنده Babak Ajideh
کامنت