بلاگ/پیکربندی RAID نرم‌افزاری با mdadm روی سرور اختصاصی: RAID 1، RAID 5 و RAID 10
به‌روز شده

پیکربندی RAID نرم‌افزاری با mdadm روی سرور اختصاصی: RAID 1، RAID 5 و RAID 10

1405/06/160 بازدید
پیکربندی RAID نرم‌افزاری با mdadm روی سرور اختصاصی: RAID 1، RAID 5 و RAID 10

پیکربندی RAID نرم‌افزاری با mdadm روی سرور اختصاصی: RAID 1، RAID 5 و RAID 10

نمای شماتیک دیسک‌های یک آرایه RAID نرم‌افزاری در سرور اختصاصی خرابی یک دیسک نباید لزوماً به توقف سرویس یا از دست رفتن فوری داده منجر شود. در لینوکس می‌توان با ابزار mdadm چند دیسک را به یک آرایه RAID نرم‌افزاری تبدیل کرد تا بسته به سطح انتخاب‌شده، افزونگی، ظرفیت یا کارایی بیشتری به دست آید. در این راهنما ساخت RAID 1، RAID 5 و RAID 10 را روی یک سرور اختصاصی بررسی می‌کنیم. سپس سراغ ثبت تنظیمات آرایه، راه‌اندازی خودکار پس از ریبوت، پایش وضعیت و تعویض دیسک خراب می‌رویم. دستورهای این مقاله می‌توانند جدول پارتیشن یا داده‌های دیسک را پاک کنند. نام دیسک‌ها را با وضعیت واقعی سرور خود تطبیق دهید و پیش از اجرا، از داده‌های ضروری نسخه پشتیبان قابل‌بازیابی داشته باشید.

RAID نرم‌افزاری با mdadm چگونه کار می‌کند؟

در RAID سخت‌افزاری، یک کنترلر مستقل مدیریت دیسک‌ها را بر عهده دارد. در RAID نرم‌افزاری، کرنل لینوکس عملیات توزیع یا تکثیر داده را انجام می‌دهد و mdadm ابزار ساخت و مدیریت آرایه‌های MD یا Multiple Devices است. پس از ساخت آرایه، سیستم‌عامل دستگاهی مانند /dev/md0 در اختیار شما می‌گذارد. می‌توان روی این دستگاه فایل‌سیستم ساخت، آن را mount کرد و مانند یک دیسک عادی به برنامه‌ها تحویل داد. مزیت اصلی این روش، وابسته نبودن به کنترلر اختصاصی و امکان مدیریت آرایه با ابزارهای استاندارد لینوکس است. در مقابل، بخشی از پردازش RAID را CPU انجام می‌دهد و کیفیت عملکرد به نوع بار کاری، سطح RAID، تعداد دیسک‌ها و تنظیمات سیستم بستگی دارد. RAID جای نسخه پشتیبان را نمی‌گیرد. آرایه می‌تواند خرابی دیسک را تحمل کند، اما در برابر حذف تصادفی، باج‌افزار، خرابی فایل‌سیستم، خطای مدیریتی یا نابودی کل سرور محافظت کاملی ندارد.

مقایسه RAID 1، RAID 5 و RAID 10

انتخاب سطح RAID باید بر اساس تعداد دیسک‌ها، ظرفیت قابل استفاده، الگوی خواندن و نوشتن و مدت زمانی باشد که بازسازی آرایه طول می‌کشد. اگر پلن سرور اختصاصی هنوز مشخص نشده، راهنمای انتخاب پلن سرور اختصاصی آریانت به تعیین تعداد و نوع دیسک لازم کمک می‌کند.

سطح RAIDتعداد معمول دیسکظرفیت قابل استفادهتحمل خرابیویژگی اصلی
RAID 1حداقل ۲ظرفیت یک دیسکمعمولاً ۱ دیسکساختار ساده و داده آینه‌ای
RAID 5حداقل ۳ظرفیت (N-1) دیسک۱ دیسکظرفیت بیشتر با parity توزیع‌شده
RAID 10معمولاً حداقل ۴حدود نصف ظرفیت کلبسته به محل خرابی، بیش از ۱ دیسککارایی نوشتن و بازسازی مناسب‌تر

RAID 1 برای سرویس‌های ساده و حساس

در RAID 1، داده روی دو یا چند دیسک کپی می‌شود. اگر یکی از دو دیسک خراب شود، آرایه با نسخه دیگر به کار ادامه می‌دهد. ظرفیت قابل استفاده در یک آرایه دو‌دیسکی برابر ظرفیت کوچک‌ترین دیسک است. این سطح برای دیسک سیستم‌عامل، سرویس‌های کوچک و موقعیت‌هایی مناسب است که سادگی بازیابی از ظرفیت مهم‌تر است. هزینه آن این است که در آرایه دو‌دیسکی فقط نیمی از ظرفیت خام قابل استفاده خواهد بود.

RAID 5 برای ظرفیت بیشتر

RAID 5 داده و parity را میان حداقل سه دیسک توزیع می‌کند. در یک آرایه چهار‌دیسکی، تقریباً ظرفیت سه دیسک در اختیار سیستم قرار می‌گیرد. خواندن معمولاً مناسب است، اما نوشتن به‌دلیل محاسبه و ثبت parity سربار دارد. بازسازی RAID 5 روی دیسک‌های بزرگ می‌تواند زمان‌بر باشد و در این مدت فشار خواندن روی دیسک‌های باقی‌مانده افزایش می‌یابد. برای پایگاه داده پرتراکنش یا دیسک‌هایی با ظرفیت بسیار بالا، باید ریسک بازسازی و نیازهای کارایی را دقیق‌تر ارزیابی کرد.

RAID 10 برای بارهای نوشتنی

RAID 10 ترکیبی از mirroring و striping است. در چیدمان رایج چهاردیسکی، داده ابتدا در جفت‌های آینه‌ای نگهداری و سپس میان جفت‌ها توزیع می‌شود. حدود نیمی از ظرفیت خام قابل استفاده است، اما عملیات نوشتن و بازسازی معمولاً از RAID 5 سبک‌تر است. این سطح برای ماشین‌های مجازی، پایگاه داده و سرویس‌هایی که تأخیر نوشتن در آن‌ها مهم است، انتخاب رایجی است. تحمل هم‌زمان خرابی دو دیسک به این بستگی دارد که هر دو عضو یک جفت آینه‌ای نباشند. نمودار سه آرایه RAID 1، RAID 5 و RAID 10 و نحوه چیدمان دیسک‌ها در هرکدام

آماده‌سازی دیسک‌ها

مثال‌ها بر پایه Debian و Ubuntu نوشته شده‌اند، اما دستورهای اصلی mdadm در بیشتر توزیع‌های لینوکس مشابه‌اند. ابتدا ابزار را نصب کنید:

sudo apt update
sudo apt install mdadm

در Rocky Linux، AlmaLinux یا RHEL می‌توانید از این دستور استفاده کنید:

sudo dnf install mdadm

سپس نام، اندازه، نوع و mount point دیسک‌ها را بررسی کنید:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
sudo fdisk -l

در ادامه فرض می‌کنیم دیسک‌های داده /dev/sdb تا /dev/sde هستند. این نام‌ها نمونه‌اند و ممکن است در سرور شما به‌شکل /dev/nvme1n1 یا نام دیگری دیده شوند. برای هر دیسک یک پارتیشن هم‌اندازه بسازید. نمونه زیر مربوط به /dev/sdb است:

sudo parted /dev/sdb --script \
  mklabel gpt \
  mkpart primary 1MiB 100% \
  set 1 raid on

همین کار را برای دیسک‌های دیگر انجام دهید و نتیجه را کنترل کنید:

lsblk -f
sudo mdadm --examine /dev/sdb1

اگر دیسک قبلاً عضو آرایه دیگری بوده است، متادیتای قدیمی را فقط پس از اطمینان از بی‌نیازی به داده پاک کنید:

sudo mdadm --zero-superblock /dev/sdb1

ساخت آرایه با mdadm

ساخت RAID 1

برای ساخت یک آرایه RAID 1 با دو پارتیشن اجرا کنید:

sudo mdadm --create /dev/md0 \
  --level=1 \
  --raid-devices=2 \
  /dev/sdb1 /dev/sdc1

mdadm مشخصات آرایه را نمایش می‌دهد و تأیید می‌خواهد. پیش از پاسخ مثبت، دوباره نام دیسک‌ها را بخوانید.

ساخت RAID 5

برای ساخت RAID 5 با سه دیسک:

sudo mdadm --create /dev/md0 \
  --level=5 \
  --raid-devices=3 \
  /dev/sdb1 /dev/sdc1 /dev/sdd1

در بارهای حساس به نوشتن، گزینه‌هایی مانند chunk size باید با اندازه بلوک فایل‌سیستم و الگوی I/O هماهنگ شوند. اگر اندازه مناسب را نمی‌دانید، مقدار پیش‌فرض شروع امن‌تری از انتخاب تصادفی است.

ساخت RAID 10

برای ساخت RAID 10 با چهار دیسک:

sudo mdadm --create /dev/md0 \
  --level=10 \
  --raid-devices=4 \
  /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

پس از ساخت هر سطح، روند همگام‌سازی را ببینید:

watch -n 2 cat /proc/mdstat

همچنین جزئیات کامل آرایه با این دستور در دسترس است:

sudo mdadm --detail /dev/md0

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

ساخت فایل‌سیستم و mount کردن آرایه

برای یک فضای داده عمومی می‌توان روی آرایه فایل‌سیستم ext4 ساخت:

sudo mkfs.ext4 -L raid-data /dev/md0

اگر بار کاری یا سیاست عملیاتی شما به XFS نیاز دارد، از دستور مناسب همان فایل‌سیستم استفاده کنید. ساخت فایل‌سیستم تمام محتوای قبلی دستگاه مقصد را از بین می‌برد. دایرکتوری mount را بسازید و آرایه را متصل کنید:

sudo mkdir -p /srv/data
sudo mount /dev/md0 /srv/data
df -hT /srv/data

برای ثبت پایدار در /etc/fstab، به‌جای نام متغیر دستگاه از UUID فایل‌سیستم استفاده کنید:

sudo blkid /dev/md0

خروجی UUID را در فایل /etc/fstab قرار دهید:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv/data ext4 defaults,nofail 0 2

پیش از ریبوت، صحت تنظیم را آزمایش کنید:

sudo umount /srv/data
sudo mount -a
findmnt /srv/data

اگر mount -a خطا دارد، سرور را ریبوت نکنید و ابتدا خط مربوط به fstab را اصلاح کنید.

پایدارسازی شناسایی RAID پس از ریبوت

تعریف آرایه را به فایل تنظیمات mdadm اضافه کنید. در Debian و Ubuntu مسیر معمول /etc/mdadm/mdadm.conf است:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

پیش از افزودن، بررسی کنید همان تعریف از قبل در فایل وجود نداشته باشد:

grep '^ARRAY' /etc/mdadm/mdadm.conf

سپس initramfs را به‌روز کنید:

sudo update-initramfs -u

در توزیع‌های خانواده RHEL معمولاً تنظیمات در /etc/mdadm.conf قرار می‌گیرد و initramfs با dracut بازسازی می‌شود:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
sudo dracut --force

اگر سیستم‌عامل یا پارتیشن ریشه روی RAID قرار دارد، پیکربندی bootloader، پارتیشن EFI و initramfs به ساختار بوت سرور وابسته است. بهتر است این مهاجرت از محیط نجات و با دسترسی کنسول انجام شود. مراحل این مقاله برای یک آرایه داده مانند /srv/data کم‌ریسک‌تر است.

پایش سلامت آرایه

دو دستور زیر وضعیت جاری و جزئیات اعضا را نشان می‌دهند:

cat /proc/mdstat
sudo mdadm --detail /dev/md0

در خروجی /proc/mdstat، وضعیت [UU] برای RAID 1 دو‌دیسکی یعنی هر دو عضو فعال‌اند. وجود _، عبارت degraded یا عضوی با وضعیت faulty نیاز به بررسی دارد. برای دریافت هشدار ایمیلی می‌توان آدرس مدیر را در تنظیمات mdadm مشخص کرد و سرویس پایش را فعال نگه داشت. نام سرویس میان توزیع‌ها متفاوت است:

systemctl list-unit-files | grep -E 'mdadm|mdmonitor'

برای دیدی کامل‌تر از سلامت سرور، این هشدارها را می‌توان کنار ابزارهایی مانند Prometheus Node Exporter قرار داد. پایش SMART نیز مکمل RAID است، زیرا خطاهای رو‌به‌افزایش دیسک ممکن است پیش از خروج کامل آن از آرایه دیده شوند:

sudo smartctl -a /dev/sdb

برای بررسی این‌که کدام عضو آرایه بیشترین بار I/O را دارد، نصب و استفاده از iotop هم می‌تواند در تشخیص زودهنگام مشکل کمک کند.

تعویض دیسک خراب

فرض کنید /dev/sdc1 در آرایه /dev/md0 خراب شده است. ابتدا وضعیت را ثبت و عضو مشکل‌دار را شناسایی کنید:

cat /proc/mdstat
sudo mdadm --detail /dev/md0

اگر عضو هنوز به‌صورت فعال دیده می‌شود اما مطمئن هستید خراب است، آن را faulty علامت بزنید و از آرایه حذف کنید:

sudo mdadm /dev/md0 --fail /dev/sdc1
sudo mdadm /dev/md0 --remove /dev/sdc1

پس از تعویض فیزیکی دیسک، جدول پارتیشن دیسک سالم را روی دیسک جدید کپی کنید. در این مثال /dev/sdb سالم و /dev/sdc دیسک جدید است:

sudo sgdisk --replicate=/dev/sdc /dev/sdb
sudo sgdisk --randomize-guids /dev/sdc
sudo partprobe /dev/sdc

ترتیب مبدأ و مقصد در دستور sgdisk مهم است. اجرای معکوس می‌تواند جدول پارتیشن دیسک سالم را بازنویسی کند. سپس پارتیشن جدید را به آرایه اضافه کنید:

sudo mdadm /dev/md0 --add /dev/sdc1
watch -n 2 cat /proc/mdstat

تا پایان بازسازی، آرایه در وضعیت آسیب‌پذیرتری قرار دارد. در این مدت از ریبوت غیرضروری و بار I/O سنگین پرهیز کنید و لاگ کرنل را برای خطاهای دیسک‌های دیگر بررسی کنید:

sudo journalctl -k -g 'md\|I/O error\|ata\|nvme'

پس از پایان عملیات، mdadm --detail باید همه اعضای مورد انتظار را در وضعیت فعال نشان دهد.

چند نکته پیش از استفاده در محیط عملیاتی

دیسک‌های آرایه بهتر است ظرفیت یکسان یا نزدیک به هم داشته باشند؛ فضای اضافه دیسک بزرگ‌تر معمولاً در آرایه قابل استفاده نیست. استفاده از مدل‌ها یا سری‌های متفاوت می‌تواند احتمال خرابی هم‌زمان ناشی از یک ایراد مشترک را کمتر کند، هرچند مدیریت قطعات یدکی را پیچیده‌تر می‌کند. برای ارزیابی عملکرد، نتیجه یک بنچمارک کوتاه کافی نیست. صف I/O، اندازه بلوک، نسبت خواندن به نوشتن، وضعیت cache و مدت بازسازی بر نتیجه اثر دارند. آزمون باید تا حد ممکن به بار واقعی سرویس نزدیک باشد. پیش از تحویل سرور، سناریوی خرابی را تمرین کنید: یک عضو را در محیط آزمایشی fail کنید، هشدارها را ببینید، دیسک جایگزین را اضافه کنید و مطمئن شوید بازسازی و mount پس از ریبوت درست انجام می‌شوند. اگر برای اجرای ماشین مجازی، پایگاه داده یا ذخیره‌سازی سازمانی به دیسک‌های متعدد و دسترسی مدیریتی کامل نیاز دارید، مشخصات سرور اختصاصی آریاسرویس را بررسی کنید و تعداد دیسک، نوع RAID و ظرفیت لازم را پیش از سفارش مشخص کنید.

جمع‌بندی

برای پیکربندی RAID نرم‌افزاری با mdadm، ابتدا سطح متناسب با بار کاری را انتخاب کنید: RAID 1 برای آینه‌سازی ساده، RAID 5 برای استفاده بیشتر از ظرفیت و RAID 10 برای بارهای نوشتنی و بازسازی سریع‌تر مناسب است. پس از ساخت آرایه، کار با ایجاد فایل‌سیستم تمام نمی‌شود. ثبت آرایه در تنظیمات mdadm، افزودن UUID به fstab، بازسازی initramfs، فعال کردن پایش و آزمایش روند تعویض دیسک بخش‌های ضروری راه‌اندازی هستند. در کنار RAID نیز باید نسخه پشتیبان مستقل و آزموده‌شده داشته باشید؛ چون افزونگی دیسک فقط یکی از لایه‌های حفاظت از داده است.