- چرا سرورها را کلاستر میکنیم؟
- کلاستر سرور چگونه کار میکند؟
- Failover چیست؟
- Load Balancing چه تفاوتی با Failover دارد؟
- اهمیت کلاسترینگ در زیرساختهای سازمانی
- کلاسترینگ چه مشکلاتی را میتواند کاهش دهد؟
- آیا کلاستر سرور برای پشتیبانگیری از دادههاست؟
- Storage در معماری کلاستر چه نقشی دارد؟
- Quorum در کلاستر چیست؟
- انواع معماری کلاستر سرور
- Active-Passive Cluster
- Active-Active Cluster
- کلاستر تکگرهای
- تفاوت Cluster با Backup، Replication و Load Balancing
- مزایای استفاده از Server Cluster
- افزایش دسترسپذیری
- کاهش اثر خرابی سختافزار
- افزایش ظرفیت
- امکان توسعه تدریجی
- مدیریت بهتر بارهای سنگین
- کلاستر سرور چه محدودیتهایی دارد؟
- هنگام طراحی کلاستر سرور به چه نکاتی توجه کنیم؟
- کلاستر سرور برای چه کسبوکارهایی مناسب است؟
- یک نکته مهم درباره انتخاب سرور برای کلاستر
- چه زمانی کلاسترینگ انتخاب مناسبی نیست؟
- کلاسترینگ؛ یک معماری است، نه صرفاً چند سرور کنار هم
کلاستر سرور (Server Cluster) به مجموعهای از دو یا چند سرور گفته میشود که بهصورت هماهنگ برای ارائه یک سرویس یا اجرای یک برنامه مشخص با یکدیگر همکاری میکنند. هر سرور در این ساختار یک Node یا گره محسوب میشود و منابع پردازشی، حافظه، فضای ذخیرهسازی و سیستمعامل مخصوص خود را دارد.
ایده اصلی کلاسترینگ این است که سرویس موردنظر به یک سرور منفرد وابسته نباشد. اگر یک Node از دسترس خارج شود، بسته به نوع معماری کلاستر، گره دیگری میتواند سرویس را ادامه دهد. در معماریهای دیگر نیز چند سرور بهصورت همزمان بخشی از بار کاری را بر عهده میگیرند تا ظرفیت و توان پاسخگویی کل سیستم افزایش پیدا کند.
به همین دلیل، کلاستر سرورها بیشتر در زیرساختهایی استفاده میشود که دسترسپذیری بالا، تحمل خطا، مقیاسپذیری یا توان پردازشی بیشتر اهمیت دارد. دیتابیسهای حساس، سرویسهای سازمانی، وبسایتهای پرترافیک و بسیاری از سامانههای حیاتی نمونههایی از این کاربردها هستند.
چرا سرورها را کلاستر میکنیم؟
یک سرور منفرد، هرچقدر هم قدرتمند باشد، همچنان یک نقطه شکست بالقوه است. خرابی منبع تغذیه، مادربرد، حافظه، سیستمعامل، نرمافزار یا حتی یک خطای انسانی میتواند سرویسهای روی آن را متوقف کند.
کلاسترینگ با اضافه کردن چند گره، این وابستگی را کاهش میدهد. البته میزان این حفاظت کاملاً به معماری کلاستر بستگی دارد؛ صرفاً قرار دادن چند سرور کنار یکدیگر به معنای ایجاد یک کلاستر High Availability نیست.
معمولاً سه هدف اصلی پشت استفاده از کلاسترینگ وجود دارد:
- افزایش دسترسپذیری (High Availability)
- توزیع بار کاری و افزایش ظرفیت پردازشی
- کاهش اثر خرابی یک سرور یا جزء زیرساختی بر سرویس
در برخی معماریها، هدف اصلی استمرار سرویس است و در برخی دیگر، چند Node بهصورت همزمان فعالیت میکنند تا بتوانند تعداد بیشتری درخواست را پاسخ دهند.
کلاستر سرور چگونه کار میکند؟
در یک معماری کلاستری، سرورها علاوه بر منابع داخلی خود، از طریق شبکه و نرمافزار مدیریت کلاستر با یکدیگر در ارتباط هستند. این نرمافزار وضعیت Nodeها، سرویسها و در برخی معماریها منابع مشترک را کنترل میکند.
فرض کنید یک سرویس سازمانی روی Node اول در حال اجراست و Node دوم بهعنوان پشتیبان در نظر گرفته شده است. اگر سیستم مدیریت کلاستر تشخیص دهد Node اول دیگر قادر به ارائه سرویس نیست، میتواند سرویس را روی Node دوم فعال کند. این فرایند Failover نام دارد.
در معماریهای Active-Active، وضعیت متفاوت است. چند Node میتوانند بهصورت همزمان سرویسدهی کنند و درخواستها میان آنها توزیع شود. در این حالت، از کار افتادن یکی از Nodeها علاوه بر ایجاد کاهش ظرفیت، لزوماً به توقف کامل سرویس منجر نمیشود.
بنابراین نباید همه کلاسترها را با یک الگوی «یک سرور فعال و یک سرور آمادهبهکار» تصور کرد. نوع عملکرد به فناوری و معماری مورد استفاده بستگی دارد.
Failover چیست؟
Failover به فرایندی گفته میشود که در آن، پس از شناسایی خرابی یا از دسترس خارج شدن یک Node، سرویس به Node دیگری منتقل میشود.
برای مثال، اگر یک برنامه حیاتی روی Server A اجرا شود و این سرور دچار مشکل سختافزاری شود، Cluster Manager میتواند Server B را برای اجرای سرویس انتخاب کند.
هدف این فرآیند این است که خرابی یک سرور به توقف طولانی سرویس منجر نشود.
با این حال، Failover همیشه به معنای «بدون قطعی» نیست. بسته به معماری، نوع برنامه، وضعیت Storage و نحوه طراحی کلاستر، ممکن است هنگام انتقال سرویس چند ثانیه یا بیشتر وقفه ایجاد شود.
Load Balancing چه تفاوتی با Failover دارد؟
Load Balancing و Failover دو مفهوم نزدیک اما متفاوت هستند.
در Load Balancing، چند سرور میتوانند همزمان به درخواستها پاسخ دهند و بار میان آنها توزیع شود. در نتیجه ظرفیت سیستم افزایش پیدا میکند و یک سرور مجبور نیست تمام درخواستها را پردازش کند.
در Failover، تمرکز اصلی روی تداوم سرویس هنگام خرابی است.
برای نمونه، یک وبسایت پرترافیک ممکن است از چند Web Server استفاده کند و درخواستها را میان آنها توزیع کند. اگر یکی از سرورها از دسترس خارج شود، Load Balancer میتواند درخواستهای جدید را به Nodeهای سالم هدایت کند.
این معماری هم ظرفیت را افزایش میدهد و هم میتواند تحمل خطا را بهتر کند.
اهمیت کلاسترینگ در زیرساختهای سازمانی
اهمیت Cluster زمانی بیشتر مشخص میشود که توقف یک سرویس برای سازمان هزینهبر باشد.
فرض کنید یک سیستم ERP، سامانه فروش، دیتابیس عملیاتی یا سرویس احراز هویت تنها روی یک سرور اجرا شود. در چنین شرایطی، خرابی همان یک سرور میتواند کاربران زیادی را تحت تأثیر قرار دهد.
در یک معماری مناسب، سرویس میتواند بین چند Node توزیع شود یا در صورت خرابی Node اصلی، روی گره دیگری ادامه پیدا کند.
البته کلاسترینگ بهتنهایی تمام مشکلات Availability را حل نمیکند. اگر چند سرور کلاستر به یک منبع تغذیه، یک مسیر شبکه یا یک Storage مشترک وابسته باشند و همان منبع دچار خرابی شود، ممکن است کل کلاستر تحت تأثیر قرار بگیرد.
به همین دلیل، طراحی صحیح کلاستر باید نقاط شکست مشترک (Single Point of Failure) را نیز شناسایی کند.
کلاسترینگ چه مشکلاتی را میتواند کاهش دهد؟
کلاستر مناسب میتواند در برابر طیف مختلفی از خرابیها مقاومت بیشتری ایجاد کند؛ از جمله:
- خرابی سختافزار یک Node
- از کار افتادن سیستمعامل
- Crash شدن یک سرویس یا برنامه
- خطاهای نرمافزاری
- افزایش ناگهانی بار کاری
- خرابی برخی اجزای زیرساختی
- قطعی یک سرور یا مسیر ارتباطی
اما این موضوع به طراحی کلاستر وابسته است. برای مثال، اگر تمام Nodeها از یک Storage مشترک استفاده کنند، خرابی Storage میتواند همزمان تمام آنها را تحت تأثیر قرار دهد.
بنابراین High Availability واقعی، حاصل طراحی کل زیرساخت است، نه صرفاً اضافه کردن چند سرور.
آیا کلاستر سرور برای پشتیبانگیری از دادههاست؟
یکی از نکات مهمی که هنگام صحبت درباره Cluster باید به آن توجه کرد، تفاوت بین کلاسترینگ و Backup است.
در برخی معماریهای کلاستری، دادهها بین چند Node یا Storage Replicate میشوند. این موضوع میتواند در زمان خرابی یک Node به ادامه سرویس کمک کند.
اما Replication بهتنهایی Backup محسوب نمیشود.
اگر یک فایل به اشتباه حذف شود و این تغییر بلافاصله روی Replicaها نیز اعمال شود، نسخههای کلاستر ممکن است همگی همان فایل حذفشده را داشته باشند. به همین دلیل، سازمانها معمولاً علاوه بر Cluster به یک سیستم Backup مستقل و سیاست نگهداری نسخههای قبلی نیاز دارند.
این تفاوت در طراحی زیرساختهای سازمانی بسیار مهم است:
Cluster برای تداوم سرویس و دسترسپذیری طراحی میشود؛ Backup برای امکان بازیابی داده در صورت از دست رفتن یا خراب شدن اطلاعات.
Storage در معماری کلاستر چه نقشی دارد؟
در برخی کلاسترها، چند Node به یک Storage مشترک متصل میشوند. این Storage میتواند از فناوریهایی مانند SAN یا سایر معماریهای ذخیرهسازی اشتراکی استفاده کند.
در چنین ساختاری، Nodeها میتوانند به دادههای موردنیاز سرویس دسترسی داشته باشند و در صورت انتقال نقش سرویس از یک Node به Node دیگر، اطلاعات موردنیاز در اختیار گره جدید قرار گیرد.
البته همه کلاسترها الزاماً از Shared Storage استفاده نمیکنند. برخی معماریها به جای آن از Replication، Distributed Storage یا روشهای دیگری برای حفظ و توزیع داده استفاده میکنند.
بنابراین عبارت «هر کلاستر حتماً یک Storage مشترک دارد» یک قانون عمومی نیست.
Quorum در کلاستر چیست؟
در کلاسترهای توزیعشده، یکی از مسائل مهم این است که Nodeها بتوانند درباره وضعیت کلاستر و مالکیت منابع به یک تصمیم معتبر برسند.
Quorum یا حد نصاب به مکانیزمی گفته میشود که به کلاستر کمک میکند مشخص کند چه تعداد یا چه مجموعهای از اعضا باید در دسترس باشند تا کلاستر بتواند به فعالیت خود ادامه دهد.
اهمیت Quorum زمانی بیشتر میشود که ارتباط میان Nodeها قطع شود. اگر دو بخش یک کلاستر تصور کنند که بخش دیگر از کار افتاده است و هر دو بهصورت مستقل شروع به ارائه سرویس کنند، ممکن است مشکلات جدی مانند Split-Brain ایجاد شود.
به همین دلیل، Quorum یکی از عناصر مهم در بسیاری از معماریهای High Availability است.
انواع معماری کلاستر سرور
کلاسترها را میتوان بر اساس نحوه فعالیت Nodeها، نوع سرویس، روش مدیریت داده و فناوری مورد استفاده به شکلهای مختلف دستهبندی کرد. یکی از تقسیمبندیهای کاربردی، بررسی معماریهای Active-Passive، Active-Active و برخی مدلهای خاص کلاستر است.
Active-Passive Cluster
در این معماری، یک Node سرویس اصلی را اجرا میکند و Node دیگر برای زمان خرابی یا انتقال سرویس آماده است.
مزیت اصلی این مدل، سادگی نسبی طراحی و مدیریت است. در مقابل، بخشی از ظرفیت سختافزاری Node پشتیبان ممکن است در حالت عادی مورد استفاده قرار نگیرد.
این مدل برای سرویسهایی مناسب است که استمرار فعالیت آنها مهمتر از استفاده حداکثری از ظرفیت تمام سرورهاست.
Active-Active Cluster
در مدل Active-Active چند Node بهصورت همزمان در سرویسدهی مشارکت میکنند.
این معماری میتواند ظرفیت پردازشی بیشتری در اختیار سرویس قرار دهد و در صورت خرابی یکی از Nodeها، سایر گرهها به فعالیت ادامه دهند.
البته پیادهسازی Active-Active معمولاً پیچیدهتر است؛ زیرا برنامه و دادهها باید به شکلی طراحی شوند که فعالیت همزمان چند Node را پشتیبانی کند.
کلاستر تکگرهای
کلاستر تکگرهای از نظر مفهومی تفاوت زیادی با یک Cluster چندگرهای دارد، زیرا تنها یک Node در آن وجود دارد و بنابراین مزیت واقعی High Availability ایجاد نمیکند.
چنین ساختاری بیشتر میتواند برای آزمایش، توسعه، آموزش یا شبیهسازی یک محیط کلاستری مورد استفاده قرار گیرد.
تفاوت Cluster با Backup، Replication و Load Balancing
این چهار مفهوم گاهی بهاشتباه به جای یکدیگر استفاده میشوند، در حالی که اهداف متفاوتی دارند.
| فناوری | هدف اصلی |
|---|---|
| Cluster | افزایش دسترسپذیری و/یا ظرفیت سرویس |
| Failover | انتقال سرویس پس از خرابی |
| Load Balancing | توزیع درخواستها بین چند سرور |
| Replication | ایجاد نسخه یا کپی از داده در یک سیستم دیگر |
| Backup | امکان بازیابی داده از یک نسخه پشتیبان |
ممکن است یک زیرساخت سازمانی همه این فناوریها را همزمان داشته باشد. برای مثال، چند Web Server پشت یک Load Balancer قرار بگیرند، دیتابیس روی یک معماری High Availability اجرا شود و در کنار آن، Backupهای مستقل نیز تهیه شوند.
مزایای استفاده از Server Cluster
استفاده صحیح از کلاستر میتواند چند مزیت مهم برای سازمان ایجاد کند:
افزایش دسترسپذیری
خرابی یک Node الزاماً نباید باعث توقف کامل سرویس شود.
کاهش اثر خرابی سختافزار
در صورت طراحی مناسب، سرویس میتواند روی Node دیگری ادامه پیدا کند.
افزایش ظرفیت
در معماریهای Active-Active یا Load Balanced، چند سرور میتوانند همزمان بخشی از بار کاری را پردازش کنند.
امکان توسعه تدریجی
در برخی معماریها میتوان با اضافه کردن Nodeهای جدید، ظرفیت زیرساخت را افزایش داد؛ البته این قابلیت به نرمافزار و معماری سرویس بستگی دارد.
مدیریت بهتر بارهای سنگین
توزیع درخواستها بین چند Node میتواند فشار روی هر سرور را کاهش دهد و ظرفیت پاسخگویی کل سیستم را افزایش دهد.
کلاستر سرور چه محدودیتهایی دارد؟
کلاسترینگ راهحل جادویی برای همه مشکلات زیرساخت نیست.
پیادهسازی یک کلاستر مناسب معمولاً نسبت به اجرای یک سرویس روی یک سرور منفرد، پیچیدگی بیشتری دارد. علاوه بر خود سرورها، باید شبکه، Storage، نرمافزار Cluster، مانیتورینگ، امنیت و روش مدیریت Failover نیز بهدرستی طراحی شوند.
هزینه نیز مسئله دیگری است. اضافه کردن Nodeهای بیشتر به معنی افزایش هزینه سختافزار، لایسنس، برق، خنکسازی، فضای رک و نگهداری خواهد بود.
از طرف دیگر، اگر برنامه موردنظر از معماری کلاستری پشتیبانی نکند، اضافه کردن سرور دوم لزوماً باعث افزایش Performance یا Availability نمیشود.
بنابراین قبل از خرید سرورهای بیشتر، ابتدا باید مشخص شود مشکل اصلی زیرساخت چیست و کلاستر قرار است دقیقاً کدام مشکل را حل کند.
هنگام طراحی کلاستر سرور به چه نکاتی توجه کنیم؟
اولین قدم، مشخص کردن نیاز واقعی سرویس است. آیا هدف اصلی جلوگیری از Downtime است؟ آیا مشکل اصلی حجم زیاد درخواستهاست؟ آیا پردازشهای سنگین دارید؟ یا مسئله، رشد مداوم داده و نیاز به مقیاسپذیری است؟
بعد از مشخص شدن هدف، باید معماری مناسب انتخاب شود.
در این مرحله مواردی مانند تعداد Nodeها، ظرفیت پردازنده و RAM، نوع Storage، شبکه، روش Replication، نحوه مدیریت Quorum، سیاست Failover و سیستم مانیتورینگ اهمیت پیدا میکنند.
همچنین باید مشخص شود در صورت خرابی یک Node، چه مقدار از ظرفیت سرویس باقی میماند. یک کلاستر که در شرایط عادی با 100 درصد ظرفیت کار میکند اما با خرابی یک سرور دیگر توان پاسخگویی ندارد، از نظر طراحی High Availability مناسبی ندارد.
به بیان ساده، ظرفیت Failover باید از ابتدا در طراحی زیرساخت محاسبه شود، نه اینکه بعد از وقوع خرابی درباره آن تصمیم گرفته شود.
کلاستر سرور برای چه کسبوکارهایی مناسب است؟
کلاسترینگ زمانی ارزش بیشتری پیدا میکند که توقف سرویس هزینه یا ریسک قابل توجهی برای سازمان داشته باشد.
نمونههای رایج شامل:
- دیتابیسهای حیاتی
- سامانههای مالی و حسابداری
- نرمافزارهای ERP
- سرویسهای مجازیسازی
- وبسایتها و فروشگاههای پرترافیک
- سرویسهای احراز هویت
- سامانههای پردازش تراکنش
- سرویسهای سازمانی 24/7
- زیرساختهایی که Downtime در آنها قابل قبول نیست
در چنین محیطهایی، استفاده از چند سرور در یک معماری مناسب میتواند ریسک وابستگی به یک سختافزار منفرد را کاهش دهد.
یک نکته مهم درباره انتخاب سرور برای کلاستر
انتخاب Nodeهای کلاستر فقط به تعداد هستههای CPU یا مقدار RAM محدود نمیشود. هماهنگی سختافزارها، سازگاری Firmware و Driverها، نوع Storage، کارت شبکه و پشتیبانی نرمافزار کلاستر نیز اهمیت دارد.
برای مثال، اگر دو سرور قرار است در یک معماری High Availability استفاده شوند، بهتر است قبل از خرید، سازگاری کامل سختافزار با نرمافزار کلاستر و Storage موردنظر بررسی شود.
در محیطهای سازمانی، این مرحله میتواند از بسیاری از مشکلاتی که بعد از راهاندازی کلاستر ظاهر میشوند جلوگیری کند.
چه زمانی کلاسترینگ انتخاب مناسبی نیست؟
اگر یک سرویس اهمیت بالایی ندارد و توقف آن برای چند ساعت مشکلی ایجاد نمیکند، هزینه و پیچیدگی کلاستر ممکن است توجیه اقتصادی نداشته باشد.
همچنین اگر مشکل اصلی کمبود ظرفیت Storage یا کندی یک Query در دیتابیس باشد، اضافه کردن Nodeهای بیشتر لزوماً مشکل را حل نمیکند.
گاهی ارتقای CPU، افزایش RAM، استفاده از Storage سریعتر، اصلاح معماری نرمافزار یا بهینهسازی دیتابیس، نتیجه بسیار بهتری نسبت به ایجاد یک Cluster جدید دارد.
به همین دلیل، کلاستر باید پاسخ یک نیاز مشخص باشد، نه صرفاً یک گزینه سختافزاری برای افزایش تعداد سرورها.
کلاسترینگ؛ یک معماری است، نه صرفاً چند سرور کنار هم
مهمترین نکته در طراحی Server Cluster این است که کلاستر را نباید صرفاً مجموعهای از چند سرور تصور کرد. ارزش واقعی آن از هماهنگی میان Nodeها، نرمافزار مدیریت کلاستر، شبکه، Storage، دادهها و مکانیزمهای تشخیص خطا و Failover ایجاد میشود.
یک Cluster خوب باید مشخص کند در زمان خرابی چه اتفاقی میافتد، سرویس چگونه جابهجا میشود، دادهها چگونه حفظ میشوند و در صورت قطع ارتباط میان Nodeها، کدام بخش از سیستم اجازه ادامه فعالیت دارد.
به همین دلیل، قبل از اجرای کلاسترینگ بهتر است ابتدا Workload، سطح دسترسپذیری موردنیاز، نقاط شکست احتمالی و هزینه قابل قبول Downtime مشخص شوند. سپس بر اساس این اطلاعات، تعداد Nodeها و معماری مناسب انتخاب شود.






