5 روش برای افزایش سرعت بازسازی و Rebuild درایوهای نرم افزاری RAID

ایجاد، تایید و بازسازی RAID های نرم افزاری برای درایوهایی که سایز کوچکی دارند مشکلی ندارد، اما برای مواقعی که اطلاعات شما زیاد هستند و یا از دیسکهای حجیم برای این کار استفاده می کنید، این عمل ممکن است تا روزها نیز ادامه داشته باشد، همیش به یاد داشته باشید که شما می توانید سرعت انجام این کار برای درایوهای RAID 0/1/5/6 را افزایش دهید.
اخیرا یک NAS با 5 هارد 4 ترابایتی را در یک محیط RAID 6 برای یک مشتری پیاده سازی کردم، با زدن دستور cat /proc/mdstat وضعیت درایو md0 در حالت فعال و بازیابی اطلاعات بود، سرعت این بازیابی حدود 4000K/sec بود که حدود 22 ساعت دیگر به پایان می رسید و من زمان کافی برای این کار نداشتم و نیازمند پایان یافتن آن به سریعتر حالت ممکن بودم.

روش اول:
فایل /proc/sys/dev/raid/speed_limit_min حاوی تنظیماتی است که مشخص می کند در زمانهایی که درایو فعالیتی در حال انجام دارد با چه سرعتی عملیات بازسازی را انجام دهد. سرعت بر مبنای کیلوبایت بر ثانیه و به ازای هر دستگاه محاسبه می شود و نه درایو RAID. مقدار پیشفرض 1000 می باشد.
فایل /proc/sys/dev/raid/speed_limit_max حاوی تنظیماتی است که مشخحص می کند در زمانهایی که درایر فعالیتی ندارد با سرعت درج شده در این فایل عملیات بازسازی را انجام می دهد.

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

# sysctl dev.raid.speed_limit_min # sysctl dev.raid.speed_limit_max

نمونه های خروجی:

dev.raid.speed_limit_min = 10000 dev.raid.speed_limit_max = 20000

نکته: این روشها صرفا برای بازیابی درایوهای RAID نرم افزاری لینوکس و افزایش سرعت آنها کاربرد دارد، هر چند تنظیمات این موارد مشکلی برای سیستم ایجاد نمیکند اما میزان فشار بر سرور و مصرف منابع CPU و RAM را به میزان چشمگیری افزایش می دهد.

برای افزایش سرعت:
echo value > /proc/sys/dev/raid/speed_limit_min

یا

sysctl -w dev.raid.speed_limit_min=value

در این مثال مقدار را ما بر روی 50000K/Sec قرار می دهیم:

# echo 50000 > /proc/sys/dev/raid/speed_limit_min

یا

# sysctl -w dev.raid.speed_limit_min=50000

اگر می خواهید تنظیمات پیشفرض را تغییر دهید، این دو مقدار را در فایل /etc/sysctl.conf وارد نمائید.

#################NOTE ################ ## You are limited by CPU and memory too # ########################################### dev.raid.speed_limit_min = 50000 ## good for 4-5 disks based array ## dev.raid.speed_limit_max = 2000000 ## good for large 6-12 disks based array ### dev.raid.speed_limit_max = 5000000

روش دوم:
تنظیمات readahead (پیش خوان در سکتورهای 512 بایتی) را به ازای هر درایو افزایش دهید:

# blockdev --setra 65536 /dev/mdX ## Set read-ahead to 32 MiB ## # blockdev --setra 65536 /dev/md0 # blockdev --setra 65536 /dev/md1

روش سوم:
مقدار stripe_cache_size را برای RAID5 یا RAID6 تنظیم کنید
این تنظیم فقط برای RAID 5/6 امکان پذیر است و بهره وری این درایو ها را بین 3 تا 6 برابر افزایش می دهد. مقدار مندرج بلاکهای سایز کش را برای ذخیره اطلاعات و خواندن اطلاعات در حافظه رم ذخیره می کند، مقدار پیشفرض 256 است و مقادیر 17 تا 32768 قابل تنظیم می باشند. هر چند افزایش این مقدار تاثیر به سزایی در سرعت این درایوها دارد اما میزان بسزایی از RAM سرور را اشغال می کند، تنظیم این مقدار به عدد بسیار زیاد باعث بوجود آمدن مشکل “out of memory” می شود.

فرمول محاسبه:
memory_consumed = system_page_size * nr_disks * stripe_cache_size
مقدار رم مصرف شده = حجم system page * تعداد دیسک * stripe_cache_size
برای تنظیم این مقدار بر روی 16MiB برای درایو md0:

# echo 16384 > /sys/block/md0/md/stripe_cache_size

برای تنظیم این مقدار بر روی 32MiB برای درایو md3:

# echo 32768 > /sys/block/md3/md/stripe_cache_size

روش چهارم:
غیر فعال کردن NCQ برای تمامی دیسک ها
دستور زیر NCQ را برای تمامی دیسک ها /dev/sda, /dev/sdb و .. غیر فعال میکند:

for i in sd[abcde] do echo 1 > /sys/block/$i/device/queue_depth done

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

# mdadm --grow --bitmap=internal /dev/md0

پس از اتمام rebuild آن را با دستور زیر غیر فعال کنید:

# mdadm --grow --bitmap=none /dev/md0

نتیجه:
سرعت من از 4k به 51k افزایش یافت:
cat /proc/mdstat

نمونه خروجی:

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] md5 : active raid1 sde2[2](S) sdd2[3](S) sdc2[4](S) sdb2[1] sda2[0] 530048 blocks [2/2] [UU] md0 : active raid6 sde3[4] sdd3[3] sdc3[2] sdb3[1] sda3[0] 5855836800 blocks level 6, 64k chunk, algorithm 2 [5/5] [UUUUU] [============>........] resync = 61.7% (1205475036/1951945600) finish=242.9min speed=51204K/sec

برای مشاهده real-time مانند یک حرفه ای با دستور زیر آن را بررسی کنید:

# watch -n1 cat /proc/mdstat

نمونه خروجی:



تصویر1 : وضعیت بهره وری و بهینه سازی درایو raid6 برای /dev/md2

دستور زیر گزارش درایو /dev/md2 را از نظر وضعیت و سلامتی به شما می دهد:

# mdadm --detail /dev/md2

تصویر دوم: دریافت اطلاعات در خصوص درایو md2 raid array

همچنین با دستور iostat نیز می توانید وضعیت فعلی دیسک ها را مشاهده کنید:

watch iostat -k 1 2 watch -n1 iostat -k 1 2


تصویر سوم: میزان مصرف منابع CPU و اطلاعات I/O برای درایو ها و پارتیشن ها

آیا این پاسخ به شما کمک کرد؟


 چاپ این مقاله

خوانده شده

نحوه بک آپ گیری و ریستور کردن بانک اطلاعاتی از طریق SSh

برای اینکه بتوانید از بانک اطلاعاتی خود بک آپ بگیرید و یا ریستور بک آپ را انجام دهید از طریق ssh...

چگونه Rule های فایروال را در CentOS 7 مدیریت کنیم

  در CentOS7 شما نیاز دارید که با فایروال آشنا شوید. در این مقاله ما می خواهیم درباره اضافه و...

کانفیگ Name Server با استفاده از BIND بر روی CentOS 7

BIND یکی از محبوبترین سرورهای DNS است که در شبکه اینترنت استفاده می شود. این سرور میتواند...

فایلهای core. چیست و چطور از ایجاد آنها جلوگیری کنیم؟

فایلهای Core dump در اصل یک کپی از حافظه Memory و یا دیسک است که در یک لحظه خاص که یک برنامه...

نصب ZFS بر روی یک سرور لینوکس CentOS6

فایل سیستم ZFS برای لینوکس بصورت source code وجود دارد که شما می توانید بصورت ماژول کرنل آنرا...

Powered by WHMCompleteSolution