یدک گرم یا گرفتاری گرم
یک روش رایج برای افزودن لایهای از ایمنی به RAID این است که درایوهای یدکی در دسترس باشند تا زمان جایگزینی درایو خراب به حداقل برسد. افراطیترین شکل این رویکرد به «یدک گرم» معروف است – درایو یدکی که واقعاً درون آرایه نشسته اما استفاده نمیشود تا زمانی که آرایه خرابی درایو را شناسایی کند؛ در آن لحظه سیستم بهطور خودکار درایو خراب را غیرفعال کرده و یدک گرم را فعال میکند، دقیقاً مثل اینکه یک انسان درایو قدیمی را از آرایه بیرون کشیده و درایو جدید را جایش گذاشته باشد تا عملیات resilver (بازسازی آرایه) هرچه سریعتر آغاز شود. این میتواند زمان تعویض درایو را از ساعتها یا روزها به ثانیهها کاهش دهد و از نظر تئوری، افزایش چشمگیری در ایمنی ایجاد کند.
اول میخواهم به چیزی بپردازم که شخصاً آن را اشتباه در قراردادهای نامگذاری میدانم. آنچه ما «یدک گرم» مینامیم باید، به نظر من، «یدک ولرم» نامیده شود زیرا آماده و در انتظار است اما دادههای لازم برای استفاده فوری را ندارد. یک درایو یدکی که خارج از شاسی نگهداری میشود و نیاز به مداخله انسانی برای تعویض دارد، یدک سرد خواهد بود. برای اینکه واقعاً یدک گرم باشد، درایوی باید پر از داده بوده و در نتیجه، عضوی فعال از آرایه RAID باشد. Red Hat مقالهی خوبی درباره کاربرد این اصطلاحشناسی در سایتهای بازیابی پس از فاجعه دارد. این تمایز مهم است زیرا آنچه ما یدک گرم مینامیم از قبل دادهای ندارد و فوراً جای درایو خراب را نمیگیرد بلکه فوراً فرآیند بازگرداندن درایو از دست رفته را آغاز میکند – تمایزی حیاتی.
برای نگه داشتن مفاهیم شفاف، از این پس آنچه فروشندگان یدک گرم مینامند را «یدک ولرم» خواهم نامید. این به زودی منطقی خواهد شد.
دو نگرانی اصلی درباره یدکهای ولرم وجود دارد. اول ماهیت غیرمؤثر یدک ولرم در اکثر موارد کاربردی و دوم خطر «تخریب خودکار آرایه».
اکثر مردم به مفهوم یدک ولرم به عنوان وسیلهای برای کاهش خطر بالای خرابی درایو ثانویه در آرایه RAID 5 با پریتی واحد نگاه میکنند. آرایههای RAID 5 تنها در برابر خرابی یک دیسک درون آرایه محافظت میکنند. وقتی یک دیسک از کار میافتد، آرایه بدون هیچ نوع پریتی باقی میماند و هر خرابی اضافی درایو منجر به از دست رفتن کامل آرایه میشود. RAID 5 به این دلیل انتخاب میشود که هزینهاش برای ظرفیت داده شده بسیار کم است و قابلیت اطمینان را فدای مقرونبهصرفه بودن میکند. از آنجا که RAID 5 در مقایسه با گزینههای دیگر RAID مانند RAID 6 یا RAID 10 پرخطرتر است، رایج شده که یدک ولرم پیادهسازی شود تا زمانی که آرایه در حالت تخریبیافته باقی میماند به حداقل برسد و آرایه بتواند هرچه سریعتر فرآیند resilver را شروع کند.
پس نتیجهگیری مرتبطتر اینجا این است که یدکهای ولرم معمولاً به عنوان سپری در برابر استفاده از انواع آرایه RAID کمتر قابل اعتماد برای صرفهجویی در هزینه استفاده میشوند. یدکهای ولرم در آرایههای RAID 5 بسیار رایجتر هستند و سپس RAID 6. هر دوی اینها به خاطر هزینه برای ظرفیت (نه برای قابلیت اطمینان یا عملکرد) بر RAID 10 ترجیح داده میشوند. یک حالت وجود دارد که ایده یدک ولرم واقعاً برای قابلیت اطمینان بیشتر منطقی است، و آن RAID 10 با یدک ولرم است، اما به آن خواهیم رسید. خارج از آن سناریو، احساس میکنم یدکهای ولرم در دنیای واقعی منطق چندانی ندارند.
با بررسی RAID 1 با یدک ولرم شروع میکنیم. RAID 1 از دو یا بیشتر درایو در یک آینه تشکیل شده. افزودن یدک ولرم خوب است به این معنا که اگر یکی از جفتهای آینهای از بین برود، یدک ولرم فوراً آینهسازی درایو باقیمانده را آغاز میکند و شما به زودی دوباره محافظت خواهید داشت. این فوقالعاده است. به جز یک عیب کوچک؛ به جای استفاده از یدک ولرم، همان درایو میتوانست از ابتدا به آرایه RAID 1 اضافه شده باشد و در آن صورت یک آینه سهگانه میبود. در این ظرفیت آینه سهگانه، درایو میتوانست به عملکرد کلی آرایه بیفزاید و تقریباً پنجاه درصد افزایش عملکرد خواندن با ثابت ماندن عملکرد نوشتن ایجاد کند و در صورت خرابی درایو محافظت فوری (به جای «تا زمانی که دوباره آینهسازی شود») ارائه دهد. اساساً یک «یدک گرم» واقعی بود نه یدک ولرم. پس بدون هیچ هزینه اضافی، سیستم عملکرد آرایه درایو بهتر و قابلیت اطمینان بهتری داشت صرفاً به این دلیل که درایو اضافی به صورت «در آرایه» فعال بود به جای اینکه ولرم و بیکار منتظر فاجعه بنشیند.
با RAID 5 هشدار چشمگیرتری علیه مفهوم یدک ولرم میبینیم، اینجا که رایجترین استفاده است. RAID 5 یک RAID با پریتی واحد است که توانایی بازسازی، با استفاده از پریتی، هر درایو از دست رفته در آرایه را دارد. اینجاست که مشکلات واقعی شروع میشوند. برخلاف RAID 1 که عملیات آینهسازی مجدد میتواند نسبتاً سریع باشد، یک resilver (بازسازی) RAID 5 پتانسیل طولانی شدن بسیار زیادی دارد. یدک ولرم تا زمانی که این فرآیند resilver با موفقیت کامل نشود، در محافظت از آرایه کمکی نخواهد کرد – این معمولاً ساعتهای زیادی طول میکشد و به راحتی روزها و احتمالاً هفتهها یا ماهها بسته به اندازه آرایه و میزان مشغول بودن آن. اگر همان درایو یدک ولرم را به عضوی از آرایه با یک نوار پریتی اضافی تبدیل میکردیم، RAID 6 به دست میآوردیم. همان مجموعه درایوهایی که برای RAID 5 به علاوه یدک ولرم داریم، یک آرایه RAID 6 با ظرفیت دقیقاً یکسان ایجاد میکرد. باز هم، مانند مثال RAID 1 بالا، این بسیار شبیه داشتن یدک گرم بود جایی که درایو با دادههای زنده در آرایه شرکت میکند نه اینکه بیکار منتظر بنشیند تا درایو دیگری از کار بیفتد و سپس شروع به جایگزینی کند. در این ظرفیت، آرایه در صورت خرابی به معادل RAID 5 تنزل مییابد اما بدون هیچ زمان بازسازی، بنابراین درایو اضافی فوراً مفید است نه فقط پس از یک فرآیند resilver احتمالاً بسیار طولانی. پس برای همان هزینه و همان ظرفیت، انتخاب RAID 6 به جای RAID 5 به علاوه یدک ولرم یک برد کامل است.
میتوانیم این مثال را با RAID 6 به علاوه یدک ولرم ادامه دهیم. این مورد کمی سختتر برای تعریف است زیرا در اکثر سیستمهای RAID، به جز RAIDZ3 نسبتاً نادر از ZFS، هیچ سیستم پریتی سهگانهای یک قدم بالاتر از RAID 6 موجود نیست (تصور کنید اگر RAID 7 وجود داشت). اگر وجود داشت، دقیقاً همان استدلال ارائه شده برای RAID 5 به علاوه یدک ولرم در مورد RAID 6 به علاوه یدک ولرم هم صدق میکرد. در اکثر موارد RAID 6 با یدک ولرم باید خودش را در برابر یک آرایه RAID 10 توجیه کند. RAID 10 از RAID 6 بهتر عمل میکند و قابلیت اطمینان بسیار بیشتری دارد اما RAID 6 معمولاً برای صرفهجویی در مقایسه با RAID 10 انتخاب میشود. اما برای جبران شکنندگی RAID 6 گاهی یدکهای ولرم به کار گرفته میشوند. در برخی موارد، مانند یک آرایه پنج دیسکی RAID 6 با یدک ولرم، این از نظر دلار به دلار معادل یک آرایه شش دیسکی RAID 10 بدون یدک ولرم است. در آرایههای بزرگتر مزیت هزینه RAID 6 آشکار میشود اما هرچه صرفهجویی در هزینه بیشتر باشد، تفاوت ریسک هم بیشتر است زیرا سیستمهای RAID پریتی ریسک را با اندازه آرایه بسیار سریعتر از سیستمهای RAID مبتنی بر آینه مانند RAID 10 افزایش میدهند. هر پولی که امروز صرفهجویی میشود با ریسک خاموشی یا از دست دادن داده فردا همراه است.
جایی که یدک ولرم به طور مؤثر وارد میشود در یک آرایه RAID 10 است که در آن بازسازی یدک ولرم یک بازسازی آینه است، مانند RAID 1، که ریسکهای پریتی را ندارد و هیچ سیستم RAID منطقی بالاتری وجود ندارد که از آن برای صرفهجویی در هزینه با رفتن به سیستم شکنندهتر استفاده کنیم. اینجا افزودن یدک ولرم ممکن است برای آرایههای حیاتی منطقی باشد چون راه مقرونبهصرفهتری برای کسب همان قابلیت اطمینان اضافی وجود ندارد. با این حال، RAID 10 بدون یدک ولرم آنقدر قابل اعتماد است که هر مجموعهای که RAID 5 یا RAID 6 با یدک ولرم را در نظر میگیرد به منطق رسیده که صرفاً به RAID 10 ساده برود و از قابلیت اطمینانی که قبلاً به آن رضایت میداد عبور کرده باشد. پس فقط مجموعههایی که آن سیستمهای شکنندهتر را در نظر نمیگیرند و به دنبال قویترین گزینه ممکن هستند منطقاً به RAID 10 به علاوه یدک ولرم به عنوان راهحلشان نگاه میکنند.
فقط برای دقت فنی، RAID 10 میتواند برای عملکرد خواندن بهتر و بهبود چشمگیر در قابلیت اطمینان (اما با افزایش پنجاه درصدی هزینه) با انتقال به آینههای RAID 1 با سه دیسک در نوار RAID 0 به جای آینههای استاندارد RAID 1 با دو دیسک گسترش یابد، درست مثل مثال RAID 1 نشان دادیم. این سطحی از قابلیت اطمینان است که به ندرت در دنیای واقعی دنبال میشود اما میتواند وجود داشته باشد و یک گزینه است. معمولاً این توسط محدودیتهای تعداد درایو در شاسی آرایههای فیزیکی و همچنین رقابت ضعیف در برابر ساخت یک آرایه RAID 10 ثانویه کاملاً جداگانه در شاسی متفاوت و سپس آینهسازی اینها در سطح بالا که عملاً RAID 101 ایجاد میکند محدود میشود – که نتیجه مؤثر خوشههای آرایه ذخیرهسازی رده بالای رایج امروز است.
نگرانی دوم ما «تخریب خودکار آرایه» است. این فقط برای سناریوهای RAID پریتی یعنی RAID 5 و RAID 6 (یا RAID 2، RAID 3، RAID 4 و RAIDZ3 نادر) صدق میکند. با مفهوم یدک ولرم، ایده این است که وقتی یک درایو از کار میافتد، یدک ولرم به طور خودکار و فوری توسط کنترلر آرایه سوئیچ میشود و فرآیند resilver آرایه فوراً آغاز میشود. اگر resilver یک فرآیند کاملاً قابل اعتماد بود، این واضح بود که بسیار مورد استقبال قرار میگرفت. واقعیت، متأسفانه، کاملاً متفاوت است.
در طول فرآیند resilver، یک آرایه RAID پریتی در معرض خطر Unrecoverable Read Errors (URE) است. اگر یک URE در یک resilver RAID با پریتی واحد رخ دهد (یعنی RAID 2 تا 5) آنگاه فرآیند resilver شکست میخورد و آرایه کاملاً از دست میرود. این را باید درک کرد چون هیچ درایو اضافیای از کار نیفتاده. پس اگر یدک ولرم حاضر نبود، resilver شروع نمیشد و دادهها همچنان سالم و در دسترس بودند – فقط نه به سرعت معمول و با ریسک کوچکی از خرابی ثانویه درایو. نرخ URE با درایوهای بزرگ امروزی بسیار بالاست و با آرایههای بزرگ، ریسکها میتوانند آنقدر بالا برود که از «ممکن» به «انتظارشونده» در طول یک عملیات resilver استاندارد تبدیل شود.
پس در بسیاری از موارد خود یدک ولرم ممکن است در واقع ماشه از دست دادن داده باشد نه نجاتدهنده دادهها آنطور که انتظار میرفت. آرایهای که میتوانست زنده بماند ممکن است توسط فرآیند resilver قبل از اینکه انسانی که آن را مدیریت میکند حتی از اولین خرابی درایو مطلع شود نابود شود. اگر یک انسان درگیر بود میتوانست حداقل قدم بردارد که قبل از شروع resilver یک نسخه پشتیبان تازه از آرایه بگیرد و بداند که آخرین نسخه داده در صورت ناموفق بودن فرآیند resilver در دسترس خواهد بود. همچنین به انسان اجازه میداد که زمان شروع resilver را برنامهریزی کند، احتمالاً تا پس از ساعات کاری یا شروع آخر هفته که آرایه کمتر احتمال دارد بار سنگین داشته باشد صبر کند.
RAID با پریتی دوگانه و سهگانه (به ترتیب RAID 6 و RAIDZ3) نیز ریسکهای URE را به اشتراک میگذارند زیرا آنها هم مبتنی بر پریتی هستند. آنها این ریسک را از طریق سطوح اضافی پریتی کاهش میدهند و در اغلب مواقع با موفقیت این کار را میکنند. ریسک هنوز وجود دارد، به ویژه در آرایههای RAID 6 بسیار بزرگ، اما برای چند سال آینده ریسکها برای اکثر آرایههای ذخیرهسازی تا زمانی که رسانههای ذخیرهسازی مبتنی بر اسپیندل با ظرفیت بسیار بیشتر در بازار موجود باشد، به طور کلی کاملاً پایین باقی میماند.
بزرگترین مشکل با RAID پریتی و ریسک URE این است که عامل گرایش به RAID پریتی (تمایل به مواجهه با ریسکهای یکپارچگی داده اضافی برای کاهش هزینه) همان عاملی است که ریسک بالاتر URE را معرفی میکند (خرید درایوهای هارد SATA با هزینه پایین و غیر سازمانی). مجموعههایی که با RAID پریتی روبرو هستند معمولاً با درایوهای SATA بزرگ و کمهزینه این کار را میکنند که دو عامل بسیار خطرناک را برای یک ترکیب انفجاری کنار هم میآورد. استفاده از RAID 1 یا RAID 10 غیر پریتی این مسئله را کاملاً از بین میبرد و استفاده از درایوهای SAS سازمانی بسیار قابل اعتماد، ریسک را به اندازه یک مرتبه بزرگی (نه یک تعبیر، واقعاً تغییر یک مرتبه بزرگی است) به شدت کاهش میدهد.
علاوه بر این در طول عملیات resilver ممکن است عملکرد روی سیستمهای پریتی آنقدر تنزل یابد که برابر با یک قطعی بلندمدت شود. فرآیند resilver، به ویژه در آرایههای بزرگ، میتواند آنقدر فشرده باشد که کاربران نهایی نتوانند تفاوتی بین یک آرایه کاملاً از کار افتاده و یک آرایه در حال resilver تشخیص دهند. در واقع، resilver در حالت شدید میتواند آنقدر طول بکشد و آنقدر مخرب باشد که هزینه برای کسبوکار بالاتر از آنچه باشد که اگر آرایه کاملاً از کار میافتاد و بازیابی از پشتیبان انجام میشد. این مشکل resilver روی RAID 1 و RAID 10 تأثیری نمیگذارد، باز هم، چون آنها سیستمهای RAID آینهای هستند نه پریتی و فرآیند resilver آنها ساده است و تنزل عملکرد سیستم حداقل و کوتاهمدت است. در حالت شدید، یک resilver پریتی میتواند هفتهها یا ماهها طول بکشد که در آن مدت سیستمها طوری عمل میکنند که گویی آفلاین هستند – و در هر نقطه از این فرآیند احتمال بروز خطاهای URE که در بالا ذکر شد وجود دارد که resilver را پایان داده و بازیابی از پشتیبان را اجباری میکند. (resilverهای معمولی هفتهها طول نمیکشند اما ساعتهای زیادی طول میکشند و روزها طول کشیدن اصلاً غیرمعمول نیست.)
مرور نهایی ما را میتوان به صورت زیر خلاصه کرد (اصطلاح رایج «یدک گرم» دوباره استفاده میشود): RAID 10 بدون «یدک گرم» تقریباً همیشه انتخاب بهتری نسبت به RAID 6 با «یدک گرم» است. RAID 6 بدون «یدک گرم» همیشه بهتر از RAID 5 با «یدک گرم» است. RAID 1 با عضو آینه اضافی همیشه بهتر از RAID 1 با «یدک گرم» است. پس هر سطحی از RAID با یدک گرمی که تصمیم میگیرید، صرفاً یک سطح بالاتر در قابلیت اطمینان RAID بروید و «یدک گرم» را حذف کنید تا هم عملکرد و هم قابلیت اطمینان را برای هزینه برابر یا تقریباً برابر به حداکثر برسانید.
یدکهای ولرم، مثل RAID پریتی، روزهای خوبشان را داشتند. در واقع زمانی بود که RAID پریتی هنوز برای استفاده گسترده منطقی بود – وقتی خطاهای URE بعید بود و هزینه دیسک بالا بود – که درایوهای یدک ولرم هم منطقی بودند. آنها به خوبی جفت شده بودند؛ وقتی یکی منطقی بود، دیگری هم اغلب همینطور بود. آنچه اغلب نادیده گرفته میشود این است که همانطور که RAID پریتی، به ویژه RAID 5، کاراییاش را از دست داده، یدک ولرم را هم به شیوههای غیرمنتظره با خود کشانده است.
