افزونگی در ذخیره سازهای اطلاعات

چکیده

در این مقاله به مبحث افزونگی۱ در دنیای استوریج‌ها پرداخته خواهد شد. افزونگی در سطوح مختلف یک SAN Storage۲ اشاره خواهد شد و همچنین تکنولوژی Hot-swap در افزونگی قطعات بررسی خواهد شد. توپولوژی‌های موجود در اعمال افزونگی در تجهیزات ذخیره سازی مورد بررسی قرار خواهند گرفت و نقاط ضعف و قوت هر یک مشروح گردیده است. در انتها نیز ویژگی اکتیو-اکتیو بودن کنترلرهای استوریج‌ها با جزییات بیشتر بررسی گردیده است.

مقدمه

افزونگی در طراحی‌های IT به اصولی گفته می‌شود که در آن از هر عنصری در مجموعه بیش از یکی وجود داشته باشد تا در هنگامی که ممکن است این عنصر خراب شود، سیستم‌های موجود قادر باشند تا استقامت کنند و به سرویس‌دهی ادامه دهند. طراحی‌های افزونه اغلب N+1 هستند، یعنی هر عنصر (N) یک عنصر جایگزین دارد که می‌تواند در صورتی که N خراب شود زیرِ بار قرار بگیرد. طراحی افزونه IT جزء ملزومات دنیای انترپرایزها در عصر دیجیتالی است، به طوری که حتی مقادیر کوچکی از زمان خرابی می‌تواند برای کسب و کارها فاجعه بار باشد.

استوریج‌های مختلف با سطوح مختلف افزونگی ساخته شده‌اند. استوریج‌های ارزان قیمت با کمترین قطعات افزونه همراه هستند، در حالی که تقریباً تمام عناصر استوریج‌های کلاس انترپرایز با ساختاری افزونه ارائه می‌شود (عناصری مانند منبع تغذیه‌ها، پورت‌های front-end، CPUها، گذرگاه‌های داخلی، ماژول‌های cache، drive shelveها، و درایورها).

بیشتر این عناصر hot-swappable هستند. هدف نهایی برای استوریج‌ها این است که قادر باشند کارهای زیادی را انجام دهند و بتوانند I/O های متعددی را با وجود چندین خرابی عناصرش سرویس‌دهد کنند.

Hot swap

Hot swap به توانمندی جایگزین کردن فیزیکی عناصر در یک سیستم کامپیوتری بدون نیاز به خاموش شدن برق گفته می‌شود. یک مثال رایج دیسک درایو می‌باشد، که باید همیشه قادر باشد در هنگامی که سیستم بالا است و I/O ها را سرویس‌دهی می‌کند، جایگزین شود.

معماری‌های دو کنترلره

در ساده‌ترین تعریف ممکن می‌توان به استوریج‌های با دو کنترلر اشاره کرد. کنترلر‌ها اغلب به وسیله نام‌های دیگری از قبیل گره‌ها، یا موتورها، یا به طور راجی به عنوان هدها در دنیای NAS۳ اشاره می‌شوند. در اغلب پیکربندی‌های دو کنترلری، هنگامی که هر دوی کنترلرها در یک زمان فعال هستند، واقعاً اکتیو/اکتیو نیستند. هر LUN۴ تنها مالک یکی از کنترلرها است. به همین دلیل رایج است که LUNهای با شماره‌های فرد متعلق به یک کنترلر می‌باشند، در حالی که LUNهای با شماره زوج متعلق به کنترلر دیگر هستند. تنها کنترلری که مالک LUN است می‌تواند به طور مستقیم از آن بخواند یا در آن بنویسد. در این مقطع، این دو کنترلر به صورت اکتیو/پسیو برای یک LUN هستند. کنترلری که مالک LUN است اکتیو است و قادر است روی آن بنویسد و بخواند، ولی کنترلر دیگر پسیو است چوم چنین امکاناتی ندارد. این امر به عنوان دسترسی واحد منطقی نامتقارن شناخته شده است (ALUA۵).

اگر میزبان از طریق کنترلری که مالک LUN نیتس به آن دسترسی پیدا کند، مجبور خواهد بود تا درخواست‌هایش را از طریق ارسال به کنترلر مالک LUN پیگیری نماید و ایت امر منجر به تحمیل تأخیر در روال انجام کار می‌گردد. اگر این شرایط باقی بماند، مالک LUN (کنترلر مالک) می‌بایست تغییر کند. نرم‌افزارهای مخصوص نصب شده بر روی میزبان، که به عنوان نرم‌افزارهای چند مسیری۶ یاد می‌شوند، کمک می‌کنند که این امر مدیریت گردد، و تملک LUN به طور خودکار به وسیله سیستم و بدون مداخله کاربر تغییر نماید.

در ادامه به یک مثال ساده از پیاده سازی سیستم ALUA دو کنترلری اشاره خواهد شد. یک سیستم دو کنترلی با یک کنترلر به نام CTL0 و دیگری با نام CTL1 را تصور کنید. این سیستم ۱۰ تا LUN دارد. CTL0 مالک تمام LUNهای با شماره فرد خواهد بود و CTL1 مالک تمام LUNهای با شماره‌های زوج خواهد بود. وقتی که گفته می‌شود کنترلر مالک یک LUN است یعنی قادر است تا به صورت انحصاری در داخل آن LUN بنویسد و بخواند. در این پیکربندی، شما می‌توانید ببینید که هر دوی کنترلرها فعال هستند (به همین دلیل است که آنها را اکتیو/اکتیو خطاب می کنند). به هر حال، تنها یک کنترل عمل خواندن/نوشتن را روی هر یک LUN در هر لحظه از زمان قادر است تا انجام دهد.

اگر یکی از کنترل‌ها در یک سیستم دو کنترلری خراب شود، کنترلر باقی‌مانده تملک LUNهایی که قبلاً توسط کنترلر خراب شده کار می‌کردند را در دست می‌گیرد. خوب، این کار عالی به نظر می‌رسد، اما باید در نظر داشت که workload روی کنترلر باقی‌مانده دو برابر شده است و این موضوع خیلی خوب نیست. همچنین اگر هر دو کنترلر قبلاً مشغول بوده باشند، کنترلر باقی‌مانده ممکن است با کارهایی بیشتر از آنکه توانمندی انجامش را دارد، مواجه شود. هدف متعالی این است که برنامه‌ای برای خرابی‌ها وجود داشته باشد و سیستم‌های موجود دچار overload نشوند. سیستم‌های دو کنترلری سال‌هاست که هستند و نسبتاً پیاده سازی آسانی دارند و اغلب به عنوان استوریج‌های میان رده به آنها اشاره می‌شود.

کاستی‌های دو کنترلرها

موارد زیر نقاط ضعف اساسی معماری‌های دو کنترلره هستند:

  • هنگامی که یک کنترلر خراب می‌شود، کنترلر دیگر workloadهای کنترلر خراب شده را تقبل می‌کند. بدیهی است که این امر workloadهای کنترلر باقی‌مانده را افزایش می‌دهد. اگر استوریج دو کنترلری در نظر گرفته شده با ۸۰٪ ظرفیت عملکرد هر دو کنترلر مشغول به کار باشد، باید منتظر مشکلات به وجود آمده در کارایی در هنگام خرابی یک کنترلر بود.
  • هنگامی که یک کنترلر در یک سیستم دو کنترلری خراب می‌شود، سیستم وارد حالت write-through mode می‌شود. در این حالت، I/O باید در backend دیسک قبل از اینکه یک acknowledgment (ACK) به میزبان منتشر شود، مورد مراقبت قرار بگیرد. این موضوع مهم است، زیرا انتشار یک ACK هنگامی که داده در حافظه نهان است (با کنترلر دیگر چون خراب شده یکسان نشده است) اگر کنترلر باقی‌مانده هم خراب شود منتج به از دست رفتن داده می‌شود. زیرا حالت write-through هنگامی که یک I/O حافظه نهان را ملاقات می‌کند یک ACK منتشر نمی‌کند، و کارایی به شدت تحت تأثیر قرار می‌گیرد.
  • معماری‌های دو کنترلری در مقیاس‌پذیری به شدت محدود هستند و نمی‌توانند بیش از دو node کنترل داشته باشند.

معماری‌های استوریج گرید۷

معماری‌های استوریج گرید، گاهی اوقات به عنوان معماری‌های با مقیاس بالا۸ و خوشه‌ای۹ شناخته می شوند، که پاسخی به محدودیت‌های معماری‌های دو کنترلری می‌باشد. آنها شامل بیش از دو کنترلر می‌شوند و از معماری‌های دو کنترلری بسیار بهتر و مدرن‌تر هستند.

کنترلرهای اکتیو/اکتیو واقعی

تفاوت اصلی طراحی در هنگام مقایسه با اکثر معماری‌های دو کنترلری این است که همه کنترلرها در استوریج‌های مبتنی بر گرید به عنوان یک واحد منطقی واحد کار می‌کنند و از این رو در یک پیکربندی اکتیو/اکتیو واقعی کار می‌کنند. هنگامی که می‌گوییم اکتیو/اکتیو واقعی، منظور این است که محدود به هیچ‌کدام از ویژگی‌های ALUA که در معماری‌های دوکنترلری‌ها داریم، نخواهیم بود. در معماری‌های گرید، چندین node۱۰ می‌توانند مالک LUNها باشند و روی همه آنها بنویسند. به این معنی که یک میزبان می‌تواند I/O را به یک LUN روی تمام مسیرهای در دسترس LUN موجود مطرح۱۱ کند. در مقابل، با استوریج‌های دو کنترلری، میزبان می‌تواند I/O را به یک LUN مخصوص و تنها روی مسیر کنترلر مالک بدون وقوع تأخیر اضافی مطرح کند.

اصطلاح مقیاس بالا به این معنی است که شما می‌توانید به صورت مستقل nodeهای بیشتر اضافه کنید، که می‌تواند شامل CPUها، مموری و پورت‌های به سیستم و همچنین درایوهای بیشتر باشد. این از سیستم‌های scale-up متفاوت است، که می‌توان تنها درایوهای بیشتری اضافه نماید.

با نگاه مجدد به مثال ساده مطرح شده از قسمت «معماری دو کنترلری» خواهیم داشت که ما ۱۰ تا LUN روی استوریج داریم، ولی این بار در یک استوریج چهار کنترلری. از آنجایی که این یک معماری گرید است، تمام چهار node می‌توانند برای هر ۱۰ تا LUN فعال باشند و روی آنها بنویسند. این موضوع می‌تواند به طور چشمگیری کارایی را بهبود ببخشد.

خرابی‌های کنترلر

استوریج‌های گرید همچنین می‌توانند با خرابی‌های مربوط به کنترلر مسالمت‌آمیزتر مواجه گردند. به این دلیل که آنها نباید وارد حالت write-through حافظه نهان بشوند. لازم به ذکر است که تمام استوریج‌ها به اندازه کافی هوشمند هستند تا وارد این حالت نگردند.

یک استوریج با ۴ کنترلر و با یک کنترلر خراب، کماکان ۳ کنترلر سالم دارد که در حال کار خواهند بود. دلیلی به جز طراحی ضعیف در اینجا وجود ندارد اگر که ۳ کنترلر باقی‌مانده قادر به ادامه ایجاد فرایند همسان سازی حافظه نهان (محافظت شده) نباشند.

توانایی‌های مقیاس بالا

استوریج‌های گرید همچنین از استوریج‌های دو کنترلری در مقیاس پذیری بسیار بهتر هستند. به این دلیل که می‌توان CPU، حافظه نهان، پهنای باند، و دیسک‌ها را اضافه کرد. معماری‌های دو کنترلری اغلب اجازه می‌دهد تا تنها درایو اضافه گردد.

فرض کنید کنترلری دارید که قادر است ۱۰۰۰۰ عمل IO را در هر ثانیه انجام دهد. یک استوریج دو کنترلری مبتنی بر این کنترلر‌ها می‌تواند تا ۲۰۰۰۰ عمل IOPS را انجام دهد (البته اگر یکی از کنترلرها خراب شود، این عدد به همان ۱۰۰۰۰ باز خواهد گشت). حتی اگر دیسک درایوهای کافی پشت کنترلرها اضافه شود تا قادر باشد ۴۰۰۰۰  IOPS پشتیبانی کند، کنترلرها در front end هرگز قادر نخواهند بود تا درایوها را برای پتانسیل ۴۰۰۰۰ IOPSی خود وارد نمایند. اگر این یک استوریج مبتنی بر گرید بود، شما همچنین می‌توانستید کنترلرهای بیشتری را به Front end اضافه نمایید، برای اینکه front end به اندازه کافی قدرتمند شود تا درایوها را به محدودیت خود وارد نماید.

این مقیاس پذیری، کارایی و حالت کارایی افزایش یافته با هزینه همراه است! استوریج‌های مبتنی بر گرید معمولاً به عنوان کلاس انترپرایز و با برچسب قیمتی نسبتاً بالاتر بررسی می‌شوند.

جمع‌بندی

افزونگی یکی از فاکتورهایی است که در قیمت استوریج‌ها تأثیر مستقیم دارد. اما باید در نظر داشت که با اینکه معماری‌های استوریج گرید از قابلیت اعتماد بیشتری نسبت به استوریج‌های دو کنترلری بهره‌مند هستند، اما با توجه به محدودیت‌های مالیِ اکثر مشتریان نمی‌توان همواره به عنوان تنها گزینه به آنها پیشنهاد داد. معماری‌های دو کنترلری با تمام مطالب توضیح داده شده، باز هم بخش عمده‌ای از نیازهای مشتریان میان‌رده را برآورده می‌سازند. البته افزونگی در سایر قطعات مرتبط با استوریج‌ها امکان پذیر است. به عنوان مثال در هاردهای استفاده شده در داخل استوریج‌ها، با قرار دادن یک یا چند هارد به عنوان جایگزین۱۲، یا در کارت‌های HBA با استفاده از کارت‌های دو پورت و … امکان پذیر می‌باشد.

۱  Redundancy
۲  Storage Area Network
۳  Network-Attached Storage
۴  Logical Unit Number
۵  Asymmetric Logical Unit Access
۶  Multipathing
۷  Grid Storage Architecture
۸  Scale-out
۹  Clustered
۱۰  در اینجا کنترلر استوریج مد نظر می‌باشد.
۱۱  Issue
۱۲  Spare

نگارنده:

علیرضا فتحعلی بیگی