ابزارهای کلاسترینگ در لینوکس
در زمینه فناوری اطلاعات، یک کلاستر متشکل از دو یا چند کامپیوتر(که به آنها نود نیز اطلاق می شود) است که از طریق شبکه به هم متصل شده و با همکاری با یکدیگر وظیفهای مشترک را انجام میدهند.
در زمینه فناوری اطلاعات، یک کلاستر متشکل از دو یا چند کامپیوتر(که به آنها نود نیز اطلاق می شود) است که از طریق شبکه به هم متصل شده و با همکاری با یکدیگر وظیفهای مشترک را انجام میدهند.
به صورت کلی چهار نوع کلاستر وجود دارند.
Storage
High availability
Load balancing
High performance
استوریج کلاستر یک تصویر یکسان از فایل سیستم برای همه نودهای عضو فراهم مینماید و اجازه read/write همزمان بر روی آن را از جانب تمامی نودها فراهم میکند. یک استوریج کلاستر بوسیله محدود شدن نصب و نگهداری برنامههای کاربردی بر روی یک فایل سیستم واحد را در بین چندین سرور، تسهیل مینماید. همچنین با داشتن فقط یک فایلسیستم که بر روی کلاستر واقع شده، از افزونگی دادهها جلوگیری شده و فرایند backup/recovery سادهتر خواهد شد.
کلاسترهای HA دسترس پذیری بالا را برای سرویسها فراهم میکنند و به وسیله failing over سرویسها بر روی نودهای کلاستر موجب حذف single point of failure در زیر ساخت سرویسها خواهد شد. بنابراین در این نوع کلاستر یکپارچگی دادههای اشتراکی بین نودهای کلاستر باید محفوظ شود. خرابی یک نود در این نوع کلاستر از دید کاربر پنهان خواهد بود.
کلاسترهای Load-balancing با ارسال درخواستهای سرویسهای تحت شبکه به نودهای عضو کلاستر موجب تقسیم بار بر روی آنها خواهد شد. این نوع کلاستر مقیاس پذیری مقرن به صرفه را برای سازمان/شرکت مربوطه فراهم مینماید. زیرا میتوان باتوجه به حجم بار کاری تعداد نودهای کلاستر را کم یا افزایش نمود. در این کلاستر اگر نودی دچار ایراد گردد، نرمافزار Load-balancing این موضوع را تشخیص داده و دیگر درخواستی به آن ارسال نمیکند. در این حالت نیز fail شدن یک نود از دید کاربران پنهان است.
کلاسترهای High-performance از نودهای عضو کلاستر جهت انجام محاسبات همزمان استفاده میشود. در این نوع کلاستر برنامهها میتوانند به صورت همزمان و همروند کار کنند. بنابراین موجب افزایش کارایی انها خواهد شد. به این نوع کلاستر کلاستر محاسباتی یا grid computing گفته میشود.
نکته: در عمل ترکیبی از کلاسترهای فوق پیادهسازی می شود.
در زیر، لیست و توضیح هر یک از ابزارهای موجود تحت لینوکس جهت ایجاد کلاستر ارائه شده است.
Beowulf
این کلاستر متشکل از چندین سیستم(از یک کامپیوتر شخصی گرفته تا سوپر کامپیوترها) است که توسط یک شبکه محلی پرسرعت به هم متصل شدهاند. نودهای موجود در این کلاستر فقط job های کلاستر را اجرا مینمایند و نمیتوان از آنها به صورت مستقل نیز استفاده نمود. برای استفاده از این سیستمهای کلاستر شده، برنامه های کاربردی باید مجددا برای استفاده از آن با استفاده از کتابخانههای کلاسترسازی نوشته شوند. عمومی ترین کتابخانههای کلاسترسازی عبارتند از PVM و MPI. با استفاده از این کتابخانهها، برنامه نویسان قادر به نوشتن برنامه هایی هستند که از منابع روی کلاستر همانند منابع روی یک کامپیوتر، استفاده نمایند. برای بسیاری از برنامه های کاربردی، PVM و MPI امکان افزایش خطی قدرت پردازش کلاسترها را با توجه به تعداد ماشینهای روی آن فراهم مینمایند. در واقع هدف از پیادهسازی این نوع کلاستر افزایش کارایی برنامههای کاربردی تحت کلاستر جهت محاسبات علمی پیچیده و زمانبر است. علاوه براین در موارد زیر نیز از آن استفاده مینمایند.
simulations, biotechnology, and petro-clusters; financial market modeling, data mining and stream processing; and Internet servers for audio and games.
Kerrighed
این نرم افزار یک دید یکتا (single system image) همانند سیستمهای SMP(symmetric multi-processor) بر روی سیستمهای کلاستر شده ارائه میدهد. اهداف Kerrighed عبارتند از سهولت استفاده، عملکرد بالا برنامه ها، دسترس پذیری بالای کلاستر، مدیریت منابع کارآمد و بالا بودن قابلیت سفارشی سازی سیستم عامل. Kerrighed به عنوان یک افزونه به سیستم عامل لینوکس (مجموعه ای از ماژول ها و یک پچ به هسته) پیادهسازی شده است. آخرین نسخه این نرمافزار سال 2010 ارائه شده است.
openMosix
پروژه OpenMosix که بر گرفته از نرم افزار تجاری MOSIX بوده، قابلیت های کلاستر سازی را به هسته لینوکس اضافه کرده است، بنابراین هر پروسه استاندارد لینوکس قادر خواهد بود به طور نامحسوس بر روی هر یک از نودهای کلاستر اجرا شود. با استفاده از تکنیک های موازنه بار تطبیقی (Adaptive Load Balancing) پردازشهای در حال اجرا (نه threads) بر روی یک گره (node) از کلاستر، قادرند تا بطور نامحسوس به یک گره دیگر از کلاستر مهاجرت کرده و بتوانند سریعتر اجرا شوند. در حقیقت، OpenMosix به طور خودکار پردازش ها را به بهترین گره منتقل خواهد کرد. بدلیل اینکه OpenMosix بطور کاملا نامحسوس (Transparent) عمل می کند، پردازشهایی که از یک گره به گره دیگر مهاجرت می کنند، حتی نمی دانند (لازم هم نیست بدانند) که در یک ماشین دیگر در حال اجرا هستند! نامحسوس بودن OpenMosix به این معنی است که برای استفاده از مزایای موازنه بار تطبیقی آن، نیازی به بازنویسی مجدد برنامههای کاربردی جهت استفاده از این کلاستر نیست.
بزرگترین کاری که OpenMosix انجام می دهد(همانند Kerrighed)، تبدیل دسته ای از ماشین های لینوکس به یک سیستم بزرگ مجازی چند پردازنده ای متقارن (Symmetric MultiProcessor) است. هرچند نحوه عملکرد آن با سیستم های SMP واقعی مقداری تفاوت دارد. نخست اینکه سیستم های واقعی SMP که مبتنی بر ۲ یا چند پردازنده هستند، می توانند اطلاعات را با سرعت بسیار بالا تبادل نمایند، در صورتی که در OpenMosix سرعت ارتباط بین گره های کلاستر، محدود به سرعت شبکه محلیای است که گره ها در آن قرار دارند. استفاده از اترنت گیگابیت و یا سایر انواع پر سرعت اترنت باعث خواهد شد تا تبادل داده ها با سرعت بالاتری صورت گرفته و کارایی کلاستر افزایش یابد.
OpenMosix دارای مزایایی نسبت به سیستم های چند پردازندهای سنتی است. با استفاده از OpenMosix شما قادر به ایجاد کلاسترهایی حاوی ده ها و حتی صدها کامپیوتر با سخت افزار ارزان هستید. در حالی که سیستمهای SMP که حاوی تعداد زیادی پردازنده باشند، میتوانند بسیار گرانقیمت باشند. برای بسیاری از برنامه های کاربردی، OpenMosix نسبت به سیستم های SMP یا Mainframe، کارایی بهتری دارد. البته دلیلی وجود ندارد که شما نتوانید OpenMosix را بر روی سیستم های قدرتمند چند پردازنده ای اجرا نمایید. حتی این امکان وجود دارد تا OpenMosix را به همراه برنامه های کاربردی که با MPI یا PVM توسعه یافته اند، اجرا نمایید تا سرعت کلاستر خود را بهینه نمایید.
آخرین نسخه این نرمافزار سال 2008 ارائه شده و پروژه آن متوقف شده است.
OpenSSI
این نرمافزار از منظر عملکرد، بسیار شبیه به openMosix است. این نرمافزار نیز به نحوی عمل میکند که کلیه نودهای عضو کلاستر به صورت یک سیستم بزرگتر و واحد تبدیل شوند. پراسسها میتوانند در هر یک از نودها اجرا شده و همچنین به تمام منابع کلیه نودهای عضو کلاستر دسترسی داشته باشند. علاوه بر این، پراسسها میتوانند به صورت خودکار از نودی به نود دیگر مهاجرت نمایند تا لود بر روی همه نود به صورت یکسان تقسیم شود. حتی کانکشنهای ورودی از شبکه نیز میتوانند به نودهای با بار کمتر هدایت شوند.
OpenSSI طراحی شده تا کلاستری ایجاد نماید که همزمان کارایی و دسترس پذیری بالایی داشته باشد. بنابراین با استفاده از این نرمافزار میتوان کلاستری ساخت که در آن single point of failure وجود نداشته باشد. برای مثال در این کلاستر فایلسیستم می تواند بین نودها mirror شده و با کرش نمودن یک نود پراسسهایی که بر روی آن نود در حال اجرا بودند با مهاجرت به نودهای دیگر به فایلهای خود دسترسی خواهند داشت و عمل fail over بدون اختلال انجام میپذیرد.
در زیر ویژگیهای مهم این نرمافزار ارائه شده است.
Single process space
این ویژگی سبب میشود تا هر پراسسی بر روی هر نودی در کلاستر قابل مشاهده و قابل مدیریت توسط دستورات معمول(kill, ps,…) لینوکس باشد.
Migration
با استفاده از این ویژگی پراسسها میتوانند به صورت خودکار یا دستی در زمان اجرا بین نودهای کلاستر مهاجرت نمایند. در حالی که دسترسی آنها به فایلهای باز شده و همچنین کانکشنهای شبکه خود را بدون هیچ اختلالی حفظ نمایند.
Single root
این ویژگی باعث می شود تا بر روی همه نودهای کلاستر ساختار فایلها و دایرکتوریهای به صورت یکسان دیده شود. OpenSSI با استفاده از چندین مکانیزم مانند CFS(the OpenSSI Cluster File System), SAN cluster filesystems و ماونت موازی فایل سیسمهای شبکهای، این ویژگی را فراهم مینماید.
Single I/O space
با استفاده از این ویژگی کلیه نودهای کلاستر میتوانند به همه I/O های دیوایسهای نودها دسترسی داشته باشند. اما نمیتوانند یک دیوایسی را که به نودی دیگری متصل شده بر روی نود خود ماونت نمایند.
Single IPC space
توسط این ویژگی ارتباطات استاندارد بین پراسسها، مابین نودها مانند share memory, semaphores, SYSV message queues, pipes و unix domain sockets فراهم می شود.
Cluster IP address
با استفاده از این ویژگی امکان تقسیم بار برای ترافیک IP بر روی همه نودهای کلاستر فراهم می شود. ترافیک ورودی شبکه به صورت مستقیم می تواند توسط هر نودی دریافت شده و سپس به نودی دیگر که دارای کمترین لود می باشد redirect شود. آخرین نسخه این نرمافزار سال 2010 ارائه شده است.
Heartbeat
ابزار Heartbeat سرویسی است که زیرساختی برای ایجاد کلاستر برای کلاینتهای خود فراهم مینماید. این ابزار دو سرویس جهت ایجاد زیر ساخت کلاسترینگ فراهم مینماید. COMMUNICATION و MEMBERSHIP. سرویسهای مزبور به کلاینتها این امکان را میدهد تا از وجود یا عدم وجود نودهای دیگر داخل کلاستر آگاهی پیدا نمایند.
برای اینکه این ابزار مفید واقع شود میبایست با ابزار دیگری که مدیریت منابع کلاستر را انجام میدهد، ترکیب شود تا کلاستری با دسترس پذیری بالا برای سرویسهای ارائه شده فراهم نماید. برای این منظور از ابزار Pacemaker به عنوان مدیر منابع کلاستراستفاده میشود.
لازم به ذکر است از سال ۲۰۰۸ در پروژه pacemaker پشتیبانی از Heartbeat متوقف شده و بجای آن از Corosync به عنوان لایه ارتباطات و membership استفاده میشود که وظیفه رد و بدل کردن پیامها بین اعضای کلاستر را به عهده دارد. اما پشتیبانی انجمن linux-ha از heartbeat متوقف نشده و آخرین نسخه آن سال ۲۰۱۶ منتشر شده است.
Pacemaker
در حال حاضر تنها پروژه open-source فعال جهت ایجاد یک کلاستر HA در سطح سرویس، Pacemaker است. همانطور که در بالا نیز ذکر شد این ابزار صرفا مدیر منابع کلاستر است. یعنی start, stop و مدیریت سرویسهای تحت کنترل خود را انجام میدهد. همچنین از منابع اشتراکی مانند فایلسیستم نیز در زمان قطع ارتباط یک یا تعدادی نود از کلاستر، محافظت لازم را به عمل میآورد. بنابراین Pacemaker بر خلاف ابزاری نظیر OpenSSI دید یکتایی از سیستمهای کلاستر شده بدست نمیدهد.
ویژگیهای کلیدی Pacemaker به شرح ذیل میباشند:
تشخیص و بازیابی از شکست در سطح نود و سرویس.
فراهم نمودن قابلیت اطمینان از یکپارچگی دادهها بوسیله ایزوله کردن نود/نودهایی که دچار شکست یا در وضعیت غیر نرمالی قرار گرفتهاند.
هر آن چیزی که قابل اسکریپت شدن باشد میتواند کلاستر شود.
پشتیبانی از shared storage
توانایی ایجاد کلاستر در حالتهای active/passive و active/active
تکثیر خودکار پیکربندیها(تنظیمات) کلاستر بر روی همه نودهای عضو کلاستر
توانایی تعریف روابط بین سرویسها در سطح کلاستر مانند ordering, colocation و anti-colocation
توانایی انتقال(مهاجرت) سرویسها حین سرویسدهی، بر روی نودهای کلاستر بدون بروز down-time
قابلیت مدیریت یکپارچه و انجام کلیه تنظیمات کلاستر از طریق خط فرمان و نیز قابلیت استفاده در اسکریپت نویسی توسط ابزار pcs.
