بازنگری RAID
وقتی یک تکنسین تازهکار بودم و تقریباً هیچچیزی درباره مدیریت سیستم نمیدانستم، یکی از موضوعاتی که همیشه انتظار میرفت بهخوبی بدانیم RAID بود – آرایه افزونه دیسکهای ارزان. این پاسخ به تمام مشکلات ذخیرهسازی ما بود. با RAID میتوانستیم سیستمفایلهایمان را بزرگتر کنیم، throughput بهتری داشته باشیم و حتی افزونگی اضافه کنیم که به ما امکان میداد از دست دادن یک دیسک را تحمل کنیم که بهویژه در آن روزها کاملاً معمول بود. با ظهور دستگاههای ذخیرهساز NAS و SAN، مهارتهای پایین رفتن به سطح ذخیرهسازی فیزیکی و تنظیم آن برای پاسخگویی به نیازهای سیستم بهسرعت در حال از بین رفتن هستند. این خوب نیست. فقط به این دلیل که ذخیرهسازی را به دستگاههای خارجی برونسپاری میکنیم، این واقعیت را تغییر نمیدهد که باید اساساً ذخیرهسازی خود را درک کنیم و آن را برای رفع نیازهای خاص سیستمهایمان پیکربندی کنیم.
یک سوءتفاهم که ظاهراً در طول پنج تا ده سال گذشته وارد این حوزه شده است، این باور است که RAID نوعی پشتیبانگیری سیستم است. اینطور نیست. RAID نوعی تحمل خطا است. پشتیبانگیری و تحمل خطا از نظر مفهومی بسیار متفاوت هستند. پشتیبانگیری برای این طراحی شده که به شما اجازه دهد پس از وقوع یک فاجعه بازیابی کنید. تحمل خطا برای کاهش احتمال وقوع فاجعه در درجه اول طراحی شده است. تحمل خطا را بهعنوان ساختن یک حصار در بالای یک صخره و پشتیبانگیری را بهعنوان ساختن یک بیمارستان در پایین آن تصور کنید. هیچوقت واقعاً نمیخواهید در موقعیتی باشید که هم حصار و هم بیمارستان را نداشته باشید، اما قطعاً چیزهای متفاوتی هستند.
وقتی RAID را برای درایوهایمان پیادهسازی میکنیم، چه متصل به صورت محلی یا روی یک دستگاه راه دور مانند SAN، چهار راهکار اصلی RAID برای انتخاب در کسبوکار امروز داریم: RAID 1 (آینهسازی)، RAID 5 (استرایپینگ با پاریتی)، RAID 6 (استرایپینگ با پاریتی دوتایی) و RAID 10 (آینهسازی با استرایپینگ). موارد دیگری مانند RAID 0 وجود دارند که تنها باید در شرایط نادر استفاده شوند وقتی واقعاً نیازهای زیرسیستم درایو خود را درک میکنید. RAID 50 و 51 نیز استفاده میشوند اما بسیار کمتر رایج هستند و چندان مؤثر نیستند. ده سال پیش RAID 1 و RAID 5 رایج بودند، اما امروز گزینههای بیشتری داریم.
بیایید از میان گزینهها عبور کنیم و برخی اعداد پایه را مورد بحث قرار دهیم. در مثالهای ما از n برای نمایش تعداد درایوها در آرایه و از s برای نمایش اندازه هر درایو منفرد استفاده خواهیم کرد. با استفاده از اینها میتوانیم فضای ذخیرهسازی قابل استفاده یک آرایه را بیان کنیم و مقایسهها را از نظر ظرفیت ذخیرهسازی آسان کنیم.
RAID 1: در این نوع RAID، درایوها آینه میشوند. دو درایو دارید و همه چیز را همزمان با هم انجام میدهند، از این رو «آینهسازی». آینهسازی بسیار پایدار است زیرا فرآیند بسیار ساده است، اما به شما نیاز دارد دو برابر درایوهایی که بدون استفاده از RAID نیاز داشتید خریداری کنید زیرا درایو دوم شما به افزونگی اختصاص یافته است. مزیت این است که اطمینان دارید هر بیتی که به دیسک مینویسید دو بار برای محافظت از شما نوشته میشود. بنابراین با RAID 1 ظرفیت ما (n*s/2) محاسبه میشود. RAID 1 از ارائه حداقل دستاوردهای عملکردی نسبت به درایوهای غیر RAID رنج میبرد. سرعت نوشتن معادل یک سیستم غیر RAID است در حالی که سرعت خواندن تقریباً دو برابر سریعتر در اکثر موقعیتهاست زیرا در طول عملیات خواندن، درایوها میتوانند بهصورت موازی دسترسی داشته باشند تا throughput را افزایش دهند. RAID 1 به دو مجموعه درایو محدود است.
RAID 5: استرایپینگ با پاریتی تنها، در این نوع RAID داده در یک stripe پیچیده در سراسر همه درایوهای آرایه نوشته میشود با یک بلوک پاریتی توزیعشده که در سراسر همه درایوها وجود دارد. با انجام این کار RAID 5 میتواند از آرایهای با اندازه دلخواه از سه یا بیشتر دیسک استفاده کند و تنها ظرفیت ذخیرهسازی معادل یک دیسک را برای پاریتی از دست میدهد، هرچند پاریتی توزیع شده است و تنها روی هیچ دیسک فیزیکی خاصی وجود ندارد. RAID 5 اغلب به دلیل مقرونبهصرفه بودن ناشی از کمبود ضرر ظرفیت ذخیرهسازی در آرایههای بزرگ استفاده میشود. برخلاف آینهسازی، استرایپینگ با پاریتی نیاز دارد یک محاسبه برای هر stripe نوشته شده روی دیسکها انجام شود و این یک سربار ایجاد میکند. بنابراین throughput همیشه یک محاسبه آشکار نیست و شدیداً به قدرت محاسباتی سیستمی که محاسبه پاریتی را انجام میدهد وابسته است. محاسبه ظرفیت RAID 5 بسیار آسان است زیرا بهسادگی ((n-1)*s) است. یک آرایه RAID 5 میتواند از دست دادن هر یک از درایوهای آرایه را تحمل کند.
RAID 6: استرایپینگ افزونه با پاریتی دوتایی. RAID 6 عملاً با RAID 5 یکسان است اما از دو بلوک پاریتی به ازای هر stripe بهجای یک بلوک استفاده میکند تا از محافظت اضافی در برابر خرابی دیسک برخوردار شود. RAID 6 یک عضو جدیدتر از خانواده RAID است که چندین سال پس از استانداردسازی سطوح دیگر اضافه شد. RAID 6 این ویژگی خاص را دارد که اجازه میدهد هر دو درایو در یک آرایه بدون از دست دادن داده خراب شوند. اما برای ایجاد سطح افزونگی اضافی، یک آرایه RAID 6 معادل دو درایو در ظرفیت ذخیرهسازی از دست میدهد و حداقل به چهار درایو نیاز دارد. میتوانیم ظرفیت یک آرایه RAID 6 را با ((n-2)*s) محاسبه کنیم.
RAID 10: آینهسازی بهعلاوه استرایپینگ. از نظر فنی RAID 10 یک نوع RAID ترکیبی است که شامل مجموعهای از آینههای RAID 1 در یک stripe بدون پاریتی (RAID 0) است. بسیاری از فروشندگان از اصطلاح RAID 10 (یا RAID 1+0) هنگام صحبت از تنها دو درایو در یک آرایه استفاده میکنند اما از نظر فنی این RAID 1 است زیرا استرایپینگ تا حداقل چهار درایو در آرایه نمیتواند رخ دهد. با RAID 10 باید درایوها در جفت اضافه شوند، بنابراین تنها تعداد زوج درایو میتواند در یک آرایه وجود داشته باشد. RAID 10 میتواند از دست دادن تا نیمی از مجموع مجموعه درایوها را تحمل کند اما حداکثر یکی از هر جفت. RAID 10 شامل محاسبه پاریتی نمیشود که به آن مزیت عملکردی نسبت به RAID 5 یا RAID 6 میدهد و قدرت محاسباتی کمتری برای اجرای آرایه لازم دارد. RAID 10 بهترین عملکرد خواندن از میان هر نوع RAID رایج را ارائه میدهد زیرا همه درایوهای آرایه میتوانند بهطور همزمان در عملیات خواندن استفاده شوند، هرچند عملکرد نوشتن آن بسیار پایینتر است. محاسبه ظرفیت RAID 10 با RAID 1 یکسان است، (n*s/2).
در سازمانهای امروزی، نادر است که بخش IT نیاز جدی به در نظر گرفتن هر پیکربندی درایوی خارج از چهار مورد ذکر شده داشته باشد، صرفنظر از اینکه RAID نرمافزاری یا سختافزاری پیادهسازی میشود. بهطور سنتی بزرگترین نگرانی در تصمیمگیری آرایه RAID بر اساس ظرفیت قابل استفاده بود. این به این دلیل بود که درایوها گران و کوچک بودند. امروزه درایوها آنقدر بزرگ هستند که ظرفیت ذخیرهسازی بهندرت مشکل است، حداقل نه مثل چند سال پیش، و هزینهها به اندازهای کاهش یافته که خرید درایوهای اضافی لازم برای افزونگی بهتر درایو معمولاً نگرانی کمی است. وقتی ظرفیت در اولویت است، RAID 5 انتخاب محبوبی است زیرا نسبت به انواع دیگر آرایه کمترین ظرفیت ذخیرهسازی را از دست میدهد و در آرایههای بزرگ ضرر ذخیرهسازی اسمی است.
امروزه معمولاً نگرانیهای دیگری داریم، در درجه اول ایمنی داده و عملکرد. هزینه کمی بیشتر برای اطمینان از حفاظت از دادهها باید انتخاب آشکاری باشد. RAID 5 از این ضعف رنج میبرد که تنها میتواند یک درایو را از دست بدهد. در آرایهای از تنها سه عضو، این تنها کمی خطرناکتر از حفاظتی است که RAID 1 ارائه میدهد. میتوانستیم از دست دادن هر یک از سه درایو را تحمل کنیم. در مقایسه با از دست دادن هر یک از دو درایو، ترسناک نیست. اما در مورد یک آرایه بزرگ، مثلاً شانزده درایو، چطور؟ توانایی از دست دادن تنها یک از شانزده درایو باید ما را وادار کند قابلیت اطمینان را کمی بیشتر بررسی کنیم.
اینجاست که RAID 6 برای پر کردن این شکاف قدم گذاشت. RAID 6، وقتی در یک آرایه بزرگ استفاده میشود، کاهش بسیار کمی در ظرفیت ذخیرهسازی و عملکرد معرفی میکند در حالی که اطمینان از توانایی از دست دادن هر دو درایو را فراهم میکند. طرفداران کمپ استرایپینگ با پاریتی اغلب این اعداد را نقل میکنند تا مدیریت را متقاعد کنند که RAID 5/6 میتواند «ارزش برای هزینه» کافی در زیرسیستمهای ذخیرهسازی ارائه دهد، اما عوامل دیگری نیز دخیل هستند.
تقریباً در تمام بحثهای قابلیت اطمینان RAID، که بهخودیخود موضوعی است که خیلی کمتر از آنچه باید مورد بحث قرار میگیرد، سوال قابلیت اطمینان محاسبه پاریتی نادیده گرفته میشود. با RAID 1 یا RAID 10 هیچ «محاسبه»ای برای ایجاد یک stripe با پاریتی انجام نمیشود. داده به شیوهای پایدار نوشته میشود. وقتی یک درایو خراب میشود، شریک آن بار را برمیگیرد و عملکرد درایو کمی تنزل پیدا میکند تا شریک جایگزین شود. هیچ فرآیند بازسازیای که بر اعضای موجود درایو تأثیر بگذارد وجود ندارد. با stripe های پاریتی اینطور نیست.
آرایههای RAID با پاریتی عملیاتی دارند که شامل محاسبه آنچه روی درایوها است و آنچه باید باشد میشوند. در حالی که این محاسبه بسیار ساده است، یک فرصت برای اشتباه ایجاد میکند. یک کنترلر آرایه که با RAID 1 یا RAID 10 خراب میشود، میتواند از نظر نظری داده بدی را روی محتوای درایوها بنویسد اما هیچ فرآیندی وجود ندارد که از طریق آن کنترلر بهتنهایی تغییرات درایو ایجاد کند، بنابراین این بعید است که هرگز رخ دهد زیرا هیچ فرآیند «بازسازی» به جز در ایجاد یک آینه وجود ندارد.
وقتی آرایههای دارای پاریتی یک عملیات بازسازی انجام میدهند، یک فرآیند پیچیده انجام میدهند که در آن از تمام محتوای آرایه عبور میکنند و دادههای گمشده را به درایو جایگزین بازمینویسند. بهخودیخود این نسبتاً ساده است و نباید نگرانکننده باشد. آنچه من و دیگران مستقیماً دیدهایم یک سناریوی کمی متفاوت است که شامل دیسکهایی میشود که به دلیل اتصالدهندههای شل به آرایه اتصال خود را از دست دادهاند. درایوها معمولاً میتوانند در طول زمان «شل» شوند زیرا در یک سرور مینشینند، بهویژه پس از چندین سال خدمت در یک سیستم همیشه روشن.
آنچه میتواند در سناریوهای افراطی اتفاق بیفتد این است که دادههای خوب روی درایوها توسط دادههای پاریتی بد بازنویسی شوند وقتی یک کنترلر آرایه فکر میکند یک یا چند درایو بهصورت متوالی خراب شدهاند و برای بازسازی آنلاین شدهاند. در این مورد خود درایوها خراب نشدهاند و هیچ از دست دادن دادهای وجود ندارد. تنها چیزی که لازم است این است که درایوها از نو نصب شوند، از نظر نظری. در سیستمهای hot swap، مدیریت بازسازی درایو اغلب بر اساس برداشتن و جایگزینی یک درایو خراب بهصورت خودکار است. بنابراین این فرآیند از دست دادن و جایگزینی یک درایو ممکن است بدون هیچ دخالت انسانی رخ دهد – و یک فرآیند بازسازی میتواند شروع شود. در طول این فرآیند سیستم درایو در معرض خطر است و اگر همین اتفاق دوباره رخ دهد، آرایه درایو ممکن است بر اساس وضعیت درایوها، شروع به stripe کردن دادههای بد در سراسر درایوها کند و سیستمفایل خوب را بازنویسی کند. یکی از غمانگیزترین مناظر برای یک مدیر سرور این است که سیستمی بدون درایو خراب، کل آرایه را به دلیل یک عملیات بازسازی غیرضروری از دست میدهد.
از نظر نظری این نوع موقعیت نباید رخ دهد و حفاظتهایی برای جلوگیری از آن وجود دارد، اما تعیین یک کنترلر درایو سطح پایین درباره وضعیت یک درایو در حال حاضر و قبلاً و کیفیت دادههای موجود در آن درایو به سادگی نیست که به نظر میرسد و اشتباهاتی ممکن است رخ دهند. در حالی که این موقعیت بعید است اتفاق بیفتد، اما میافتد و یک ریسک تقریباً غیرقابل محاسبه به سیستمهای RAID 5 و RAID 6 اضافه میکند. باید ریسک خرابی پاریتی را علاوه بر ریسک سنتی محاسبهشده از تعداد از دست دادنهای درایو که یک آرایه میتواند از یک استخر تحمل کند، در نظر بگیریم. با قابل اطمینانتر شدن درایوها، اهمیت رویداد ریسک خرابی پاریتی بیشتر میشود.
علاوه بر این، پاریتی RAID 5 و RAID 6 سربار سیستم را به دلیل محاسبه پاریتی معرفی میکند که اغلب از طریق سختافزار RAID اختصاصی انجام میشود. این محاسبه تأخیری را در زیرسیستم درایو معرفی میکند که به شدت در اجرا، هم در سختافزار و هم در نرمافزار متفاوت است و بیان اعداد عملکردی سطوح RAID در برابر یکدیگر را غیرممکن میکند زیرا هر پیادهسازی منحصربهفرد خواهد بود.
شاید بزرگترین مشکل با انتخابهای RAID امروز این است که سهولتی که با آن متریکهای کارایی ذخیرهسازی و قابلیت بقا از دست دادن درایو قابل دسترسی هستند، تصویر بزرگ قابلیت اطمینان و عملکرد را پنهان میکنند، زیرا این آمارها تقریباً کاملاً در دسترس نیستند. یکی از خطرات متریکها این است که مردم بر روی عواملی که بهراحتی قابل اندازهگیری هستند تمرکز میکنند و آنهایی را که نمیتوانند بهراحتی اندازه گرفته شوند، صرفنظر از پتانسیل تأثیرشان، نادیده میگیرند.
در حالی که همه سطوح مدرن RAID جایگاه خود را دارند، این حیاتی است که در زمینه و با درک کل محدوده ریسکها در نظر گرفته شوند. باید سخت کار کنیم تا صنعت خود را از پیشفرض RAID 5 به پیشفرض RAID 10 تغییر دهیم. درایوها ارزان هستند و از دست دادن دادهها گران است.
[ویرایش: در سالهای پس از نوشتن اولیه این مقاله، ظهور خطرات URE (خطاهای خواندن غیرقابل بازیابی) در طول یک عملیات بازسازی، خطرات اصلی را از آنچه فهرست شده به خطرات مرتبط با URE برای آرایههای پاریتی تغییر داده است.]
