Raid (آرایه پشتیبان دیسک های مستقل ) چیست؟
RAID روشی است برای ترکیب چند دیسک فیزیکی در قالب یک فضای ذخیرهسازی واحد، با هدف افزایش سرعت، افزایش تحمل خرابی، یا ترکیبی از هر دو. مهمترین نکته را همین ابتدا بدانید: RAID یک مکانیزم «در دسترس ماندن» است، نه نسخه پشتیبان؛ این دو جای یکدیگر را نمیگیرند.
RAID مخفف Redundant Array of Independent Disks و در لغت به معنی آرایه پشتیبان دیسکهای مستقل است. این آرایه به دو دسته نرمافزاری و سختافزاری تقسیم میشود و بسته به سطحی که انتخاب میکنید، توازن متفاوتی میان کارایی، امنیت اطلاعات و ظرفیت قابل استفاده به دست میآید.
سطوح رایج RAID و کاری که هرکدام انجام میدهند
انتخاب سطح RAID تصمیمی است که معمولاً هنگام تحویل یک سرور فیزیکی و پیش از نصب سیستمعامل گرفته میشود؛ تغییر آن بعداً تقریباً همیشه به تخلیه و بازسازی آرایه نیاز دارد.
RAID 0 — فقط سرعت
داده به قطعات کوچک تقسیم و بهصورت موازی روی همه دیسکها نوشته میشود (striping). حداقل دو دیسک لازم است، تمام ظرفیت در اختیار شماست و پهنایباند خواندن و نوشتن تقریباً با تعداد دیسکها رشد میکند. در مقابل هیچ افزونگی وجود ندارد و خرابی یک دیسک یعنی از دست رفتن کل آرایه. فقط برای داده موقتی و قابل بازتولید مثل کش یا فضای کار رندر منطقی است.
RAID 1 — آینهای
هر دیسک نسخهای کامل و یکسان از دیگری نگه میدارد. ظرفیت قابل استفاده برابر یک دیسک است، خواندن میتواند موازی از چند نسخه انجام شود و سرعت نوشتن تقریباً در حد یک دیسک میماند. تا وقتی دستکم یک عضو سالم بماند آرایه کار میکند و بازسازیاش ساده است، چون فقط یک کپی مستقیم انجام میشود.
RAID 5 — پاریتی توزیعشده
حداقل سه دیسک لازم دارد، ظرفیتش معادل مجموع منهای یک دیسک است و خرابی یک دیسک را تحمل میکند. هزینهاش در نوشتن است: هر نوشتن کوچک معمولاً به خواندن داده و پاریتی قدیمی و سپس نوشتن هر دو نیاز دارد (write penalty). نکتهای که اغلب نادیده گرفته میشود بازسازی است؛ با دیسکهای پرظرفیت امروزی بازسازی میتواند بسیار طولانی شود و در تمام آن مدت آرایه بدون افزونگی و زیر بار خواندن سنگین است.
RAID 6 — دو پاریتی مستقل
مانند RAID 5 است اما دو بلوک پاریتی مستقل نگه میدارد، پس حداقل چهار دیسک لازم دارد، ظرفیتش معادل مجموع منهای دو دیسک است و خرابی همزمان دو دیسک را تحمل میکند. جریمه نوشتن بیشتر است، اما برای آرایههای بزرگ انتخاب امنتری است: اگر در میانه بازسازی دیسک دوم هم از کار بیفتد، آرایه زنده میماند.
RAID 10 — آینهها کنار هم
ابتدا دیسکها دوبهدو آینه میشوند و سپس این جفتها بهصورت stripe کنار هم قرار میگیرند. حداقل چهار دیسک لازم است و نیمی از ظرفیت در اختیارتان قرار میگیرد. در عوض هیچ محاسبه پاریتی در مسیر نوشتن نیست، پس در بارهای نوشتن تصادفی محسوساً از RAID 5 و ۶ بهتر عمل میکند و بازسازیاش هم سریعتر و کمخطرتر است، چون فقط از جفت آینهای خودش کپی میشود.
چیدمان بلوکها در پنج سطح رایج RAID: در RAID 0 داده فقط تقسیم میشود، در RAID 1 عیناً کپی میشود، و در RAID 5 و ۶ بلوکهای پاریتی بین همه دیسکها پخش میشوند.
مقایسه سریع سطوح
| سطح | حداقل دیسک | ظرفیت قابل استفاده | تحمل خرابی | مناسب برای |
|---|---|---|---|---|
| RAID 0 | ۲ | ۱۰۰٪ | هیچ | داده موقتی و قابل بازتولید |
| RAID 1 | ۲ | ظرفیت یک دیسک | تا وقتی یک عضو سالم بماند | دیسک سیستمعامل |
| RAID 5 | ۳ | مجموع منهای یک دیسک | یک دیسک | بار خواندنمحور، آرایه کوچک |
| RAID 6 | ۴ | مجموع منهای دو دیسک | دو دیسک | آرایه بزرگ و پرظرفیت |
| RAID 10 | ۴ | ۵۰٪ | دستکم یک دیسک | نوشتن تصادفی، پایگاه داده |
یک نکته پیش از رفتن به سراغ جزئیات: اگر سرویس شما یک سرور مجازی ابری است، انتخاب از میان سطوح بالا اصلاً دست شما نیست. آرایه در لایه میزبان ساخته میشود و آنچه به ماشین مجازی میرسد یک دیسک منطقی است؛ این تصمیم تنها وقتی به شما میرسد که خودِ سرور اختصاصی فیزیکی در اختیارتان باشد.
RAID سختافزاری یا نرمافزاری؟
در RAID سختافزاری یک کنترلر مستقل با پردازنده و حافظه خودش آرایه را مدیریت میکند و سیستمعامل فقط یک دستگاه بلاکی میبیند. مزیت اصلی، کش نوشتن محافظتشده با باتری یا ماژول فلش است که تأخیر نوشتن را پایین میآورد. عیب اصلی وابستگی است: فرادادهٔ آرایه به خانوادهٔ همان کنترلر گره میخورد، پس اگر کنترلر بسوزد باید مدل سازگار جایگزین کنید.
در RAID نرمافزاری خود سیستمعامل این کار را انجام میدهد؛ در لینوکس با mdadm و در ویندوز با Storage Spaces. پردازندههای امروزی محاسبه پاریتی را بدون فشار محسوس انجام میدهند، آرایه بین سرورهای مختلف قابل جابهجایی است و وضعیتش شفاف دیده میشود. در عوض بهصورت پیشفرض کش نوشتن غیرفرار ندارید و فعال کردن کش نوشتن دیسکها بدون منبع تغذیه پشتیبان، ریسک از دست رفتن داده در قطع برق را بالا میبرد. حالت سوم یعنی RAID مادربردی یا اصطلاحاً fake RAID، در عمل نرمافزاری است اما وابسته به درایور و معمولاً از mdadm ضعیفتر؛ از آن پرهیز کنید.
اگر میخواهید نوع کنترلر و چیدمان دیسکها را هم خودتان تعیین کنید، یا باید سرور فیزیکی بگیرید یا سختافزار خودتان را به شکل کولوکیشن در دیتاسنتر مستقر کنید.
چرا RAID جایگزین نسخه پشتیبان نیست
RAID فقط یک سناریو را پوشش میدهد: خرابی سختافزاری دیسک. هر اتفاق دیگری بدون مانع از آرایه عبور میکند؛ حذف اشتباهی یک دایرکتوری، اجرای اسکریپت مخرب، رمزگذاری فایلها توسط باجافزار، خرابی فایلسیستم، باگ اپلیکیشن که داده درست را با داده غلط بازنویسی میکند، و آتشسوزی یا سرقت. بدتر اینکه در RAID 1 و ۱۰ همان حذف اشتباهی در کسری از ثانیه روی نسخه آینهای هم اعمال میشود.
قاعده عملی همان ۳-۲-۱ است: دستکم سه نسخه از داده، روی دو نوع رسانه متفاوت، که یکی خارج از همان سرور و ترجیحاً خارج از همان دیتاسنتر نگهداری شود. و نکتهای که از خود بکاپ مهمتر است: بازیابی را دورهای تست کنید؛ نسخه پشتیبانی که هرگز بازیابی نشده، صرفاً یک فرض است. اگر طرح بازیابی از فاجعه برایتان حساس است، پیش از خرید سختافزار از مشاوره زیرساخت استفاده کنید.
پایش آرایه؛ کاری که واقعاً باید انجام دهید
آرایهای که پایش نمیشود، عملاً افزونگی ندارد؛ چون دیسک اول ماهها پیش خراب شده و کسی خبر ندارد. در لینوکس وضعیت RAID نرمافزاری را با این دستورها ببینید:
cat /proc/mdstat— نمای کلی آرایهها و درصد پیشرفت بازسازیmdadm --detail /dev/md0— جزئیات اعضا و وضعیت هر دیسکsmartctl -a /dev/sda— سلامت خود دیسک فیزیکیmdadm --monitor --scan --daemonise --mail=root@example.com— ارسال هشدار هنگام خرابی عضو
برای کنترلرهای سختافزاری به ابزار همان سازنده نیاز دارید؛ در خانواده LSI و MegaRAID معمولاً storcli /c0 show all یا megacli -LDInfo -Lall -aALL کار را راه میاندازد. اجرای دورهای بازخوانی کامل آرایه با echo check > /sys/block/md0/md/sync_action هم کمک میکند بلوکهای خراب پیش از آنکه در میانه یک بازسازی حساس ظاهر شوند، پیدا شوند.
یک هشدار جدی: دستور mdadm --create روی دیسکهایی که از قبل عضو آرایه هستند، فراداده را بازنویسی و داده را نابود میکند. برای بازگرداندن آرایهای که مونت نمیشود از mdadm --assemble استفاده کنید و پیش از هر عملیات نجات، از دیسکها ایمیج بگیرید.
کدام سطح برای کدام کاربرد
برای دیسک سیستمعامل، RAID 1 ساده و کافی است. برای پایگاه داده، سرور ایمیل یا میزبان ماشینهای مجازی که نوشتن تصادفی زیادی دارند، RAID 10 انتخاب پیشفرض است. برای آرشیو و فضای بزرگ خواندنمحور، RAID 6 توازن بهتری از RAID 5 میدهد. و RAID 0 را فقط جایی به کار ببرید که از دست رفتن کامل داده هیچ هزینهای ندارد.
