Уровня 5 — это массив независимых дисков с распределенным хранением контрольных сумм.

Блоки данных и контрольные суммы по кругу записываются на все диски массива поэтому нет ассиметричности конфигурации дисков. Такая схема не требует специально выделенного диска для хранения информации о контрольных суммах.

Объём дискового массива RAID5 рассчитывается по формуле (n-1)*V.hdd , где n — число дисков в массиве, а V.hdd — размер наименьшего диска. Поэтому в случае построения RAID 5 все диски массива должны иметь одинаковый размер. При этом результирующая емкость дисковой подсистемы, доступной для записи, становится меньше ровно на один диск. Например, если пять дисков имеют размер 10 Гбайт, то фактический размер массива составляет 40 Гбайт, так как 10 Гбайт отводится на контрольную информацию.

RAID 5 как и RAID 4 имеет архитектуру независимого доступа. В сравнении с RAID 3 здесь предусмотрен большой размер логических блоков для хранения информации. Поэтому, как и в случае с RAID 4, основной выигрыш такой массив обеспечивает при одновременной обработке нескольких запросов. Резюмируя достоинства можно сказать следующее, - в RAID 5 на запись информации тратятся дополнительные вычилительные ресурсы и, как следствие, - падает производительность. Зато при чтении (по сравнению с отдельным HDD диском) имеется выигрыш производительности, ведь потоки данных с нескольких дисков массива обрабатываются параллельно.

Из недостатков следует отметить, что производительность RAID этого уровня снижается на 10-25% в сравнении с RAID 1 на операциях типа Random Write (записи в произвольном порядке), так как требует большего количества операций с дисками потому что каждая операция записи сервера заменяется на контроллере RAID на три - одну операцию чтения и две операции записи.

При выходе из строя одного из дисков катастрофически падает надежность массива до уровня RAID 0 (когда данные записываются последовательно на несколько дисков с нулевой избыточностью). При этом чем больше количество дисков в массиве тем ниже надежность, она снижается кратно количеству дисков. В этот момент система находится в критическом режиме т.к. все операции чтения и записи сопровождаются дополнительными манипуляциями. Если выходит из строя 2-ой диск или возникает простая ошибка чтения - массив разрушится и данные не удастся восстановить традиционными методами.

Следует учитывать также, что процесс восстановления данных после выхода из строя какого-либо диска массива вызывает интенсивную нагрузку чтения с дисков на протяжении длительного времени. Это может привести к выходу одного из дисков из строя в этот самый уязвимые период работы RAID, а также выявить ранее невыявленные сбои чтения в массивах малоактивных данных, что повышает риск сбоя при восстановлении целостности данных.

Минимальное количество дисков для организации RAID5 равно 3


Мы столкнулись с такой проблемой, что большинство серверов, приобретаемых пользователями наших программ, поставляются с дисковым массивом, сконфигурированным в уровень RAID 5. Впоследствии системные администраторы не хотят тратить время на переконфигурирование, или просто боятся что-то менять в уже настроенном и работающем компьютере. В результате производительность работы с базой данных, установленной на такой сервер, оказывается меньше, чем была на старом, который проработал на предприятии 3-4 года. Наверное, стремление поставщиков сконфигурировать дисковый массив именно в RAID пятого уровня можно объяснить желанием удивить клиента огромным размером дискового пространства. Сисадмины, в свою очередь, часто просто не обладают достаточными знаниями о том как работает RAID массив того или иного уровня. Цель данной статьи дать ответы на два вопроса:

Почему нельзя использовать RAID 5 для сервера базы данных?

Как оптимальным образом сконфигурировать RAID контроллер для размещения базы данных сервера Firebird?

Сразу оговоримся, что выводы, сделанные в данной статье, не относятся к тем редким случаям, когда база данных используется исключительно (или в основном) только для чтения.

Как работает RAID 5?

Рассмотрим упрощенную схему работы массива из четырех дисков. Один из дисков выделяется для хранения контрольной суммы. Три – доступны для размещения данных. На рисунке ниже, диски с полезной информацией названы A, B и C. Диск D хранит контрольные суммы.

Минимальный объем информации, который контроллер считывает или записывает на один диск, называется стрипом (strip). В параметрах большинства контроллеров, с которыми нам приходилось сталкиваться, указывается не размер стрипа, а размер страйпа (stripe) – блока информации, который распределяется на все диски массива. На рисунке ниже один страйп выделен более темным цветом:


Размер страйпа равен размеру стрипа помноженного на количество дисков в массиве. Т.е. в случае с четырьмя дисками и размером страйпа 64К, минимальное количество информации, которое контроллер способен записать или считать с диска, равняется 64 / 4 = 16К.

Контрольная сумма, которая попадает на диск D, рассчитывается по следующей формуле:

D = A xor B xor C

Благодаря транзитивности операции xor в случае выхода из строя одного из дисков с полезной информацией её можно восстановить xor-ированием данных оставшихся дисков, включая диск с контрольной суммой. Например, вышел из строя диск B.


При запросе блока информации с диска B контроллер восстановит его по формуле:

B = A xor C xor D

Сервер Firebird обменивается с дисковой подсистемой страницами данных. Оптимальный размер страницы в большинстве случаев составляет 8К, что намного меньше размера страйпа и в большинстве случаев даже меньше чем размер стрипа. Ситуации, когда на диск записываются последовательно расположенные страницы, также достаточно редки. Таким образом, если в нашем примере происходит запись информации на диск А, то контроллеру придется выполнить следующие операции:

  1. Прочитать данные стрипов с дисков B и C. Две операции чтения.
  2. Рассчитать новую контрольную сумму. Две операции xor.
  3. Запись информацию на диск A и контрольную сумму на диск D. Две операции записи.

Итого, два чтения, две записи и две операции xor. Было бы удивительно, если бы при таком объеме работы, общая производительность не падала. Теперь становится очевидным почему RAID 5 не подходит для размещения файла базы данных.

Важной особенностью RAID 5 является существенное падение производительности при выходе из строя одного из дисков в массиве. Ведь теперь, для восстановления информации с этого диска, необходимо считать и перексорировать данные со всех остальных дисков.

Впрочем, как и у любого правила, у нашего - тоже есть свое исключение. Производительность дискового массива RAID 5 не будет снижаться, если размер энергонезависимой кэш памяти контроллера сопоставим с размером файла базы данных. Например, при размере кэш памяти в 512 Мб вполне можно использовать RAID массив пятого уровня для баз до 1-1,5 Гб. При условии, что сервер выделен только для работы с базой данных и не выполняет других задач.

Стоит заметить, что приведенная выше схема работы RAID 5 из методических соображений серьезно упрощена . В реальности контроллер распределяет страйпы циклически по всем дискам массива, так что выделенного диска для хранения контрольных сумм нет. Все диски хранят и данные и контрольные суммы разных страйпов, что позволяет выровнять приходящуюся на них нагрузку.

Какой уровень RAID выбрать?

Если RAID 5 не подходит, то какой уровень выбрать для размещения файла базы данных? При количестве дисков меньше четырех единственным вариантом является зеркало (mirror) – RAID 1. Если в массиве от четырех дисков и больше, то оптимальным с точки зрения производительности и надежности является RAID 10 – объединение (RAID 0) нескольких зеркал (RAID 1). Иногда можно встретить написание как RAID 1+0. На рисунке ниже представлен массив RAID 10 из четырех дисков. Темным тоном выделены данные одного страйпа. Штриховка показывает дубликат этого страйпа.

Отметим так же, что если массив RAID 5 способен пережить потерю только одного диска, то RAID 10 из m зеркал по два диска выживет в случае потери от одного до m дисков, при условии, что откажут не более чем по одному диску в каждом зеркале.

Попробуем количественно сравнить массивы RAID 5 и RAID 10, в каждом из которых n дисков. n кратно двум. Примем размер читаемого/записываемого блока данных равным размеру стрипа. В таблице ниже приведено необходимое количество операций чтения/записи и xor-ирования данных.


Хорошо видно, что массив RAID 10 имеет не только более высокую производительность при записи, но и не допускает общего снижения производительности при выходе из строя одного диска.

Как настроить RAID контроллер?

Размер кэш памяти

Чем больше – тем лучше. Главное, чтобы контроллер имел батарейку (аккумулятор) для сохранения содержимого памяти при аварийном отключении питания. Во многих контроллерах батарейка не входит в стандартную поставку и ее необходимо заказывать отдельно. Без батарейки кэш на запись будет отключен.

Уровень RAID

RAID 10. Если количество дисков меньше четырех, то RAID 1 (зеркало). Почему? Читайте статью с самого начала.

Размер страйпа

Размер страницы базы данных умноженный на количество зеркал в массиве. Например, если в массиве 8 дисков, объединенных в четыре зеркала по два диска, а размер страницы базы данных равен 8К, то размер страйпа следует выставить в 8 * 4 = 32К.

Упреждающее чтение

Так как последовательное обращение к страницам базы данных весьма редко, да и сами они в результате фрагментации могут находиться в разных местах диска, упреждающее чтение следует отключить, или использовать режим adaptive (упреждающее чтение в случае последовательного обращения к двум подряд идущим страницам).

Политика кэша на запись

Выбрать режим write back. Данные будут помещаться в кэш, а потом записываться на диск. Операция записи будет считаться завершенной сразу же после помещения данных в кэш.

Резервный (spare) диск

Если возможности контроллера позволяют, то рекомендуется включить в массив резервный диск. Такой диск в обычном режиме работы пребывает в состоянии stand by. В случае выхода из строя одного из рабочих винчестеров, резервный диск автоматически добавляется в массив.

Сегодня мы поговорим о RAID-массивах . Разберемся, что это такое, зачем это нам надо, какое оно бывает и как все это великолепие использовать на практике.

Итак, по порядку: что такое RAID-массив или просто RAID ? Расшифровывается эта аббревиатура как "Redundant Array of Independent Disks" или "избыточный (резервный) массив независимых дисков". Говоря по-простому, RAID-массив это совокупность физических дисков, объединенных в один логический.

Обычно бывает наоборот - в системный блок установлен один физический диск, который мы разбиваем на несколько логических. Здесь обратная ситуация - несколько жестких дисков сначала объединяются в один, а потом операционной системой воспринимаются как один. Т.е. ОС свято уверена, что у нее физически только один диск.

RAID-массивы бывают аппаратные и программные.

Аппаратные RAID-массивы создаются до загрузки ОС посредством специальных утилит, зашитых в RAID-контроллер - нечто вроде BIOS. В результате создания такого RAID-массива уже на стадии инсталляции ОС, дистрибутив "видит" один диск.

Программные RAID-массивы создаются средствами ОС. Т.е. во время загрузки операционная система "понимает", что у нее несколько физических дисков и только после старта ОС, посредством программного обеспечения диски объединяются в массивы. Естественно сама операционная система располагается не на RAID-массиве , поскольку устанавливается до его создания.

"Зачем все это нужно?" - спросите Вы? Отвечаю: для повышения скорости чтения/записи данных и/или повышения отказоустойчивости и безопасности.

"Каким образом RAID-массив может увеличить скорость или обезопасить данные?" - для ответа на этот вопрос рассмотрим основные типы RAID-массивов , как они формируются и что это дает в результате.

RAID-0 . Называемый так же "Stripe" или "Лента". Два или более жестких дисков объединяются в один путем последовательного слияния и суммирования объемов. Т.е. если мы возьмем два диска объемом 500Гб и создадим из них RAID-0 , операционной системой это будет восприниматься как один диск объемом в терабайт. При этом скорость чтения/записи у этого массива будет вдвое больше, нежели у одного диска, поскольку, например, если база данных расположена таким образом физически на двух дисках, один пользователь может производить чтения данных с одного диска, а другой пользователь производить запись на другой диск одновременно. В то время как в случае расположения базы на одном диске, сам жесткий диск задачи чтения/записи разных пользователей будет выполнять последовательно. RAID-0 позволит выполнять чтение/запись параллельно. Как следствие - чем больше дисков в массиве RAID-0 , тем быстрее работает сам массив. Зависимость прямопропорциональная - скорость возрастается в N раз, где N - количество дисков в массиве.
У массива RAID-0 есть только один недостаток, который перекрывает все плюсы от его использования - полное отсутствие отказоустойчивости. В случае смерти одного из физических дисков массива, умирает весь массив. Есть старая шутка на эту тему: "Что обозначает "0" в названии RAID-0 ? - объем восстанавливаемой информации после смерти массива!"

RAID-1 . Называемый так же "Mirror" или "Зеркало". Два или более жестких дисков объединяются в один путем параллельного слияния. Т.е. если мы возьмем два диска объемом 500Гб и создадим из них RAID-1 , операционной системой это будет восприниматься как один диск объемом в 500Гб. При этом скорость чтения/записи у этого массива будет такая же, как у одного диска, поскольку, чтение/запись информации производятся на оба диска одновременно. RAID-1 не дает выигрыша в скорости, однако обеспечивает большую отказоустойчивость, поскольку в случае смерти одного из жестких дисков, всегда есть полный дубль информации, находящийся на втором диске. При этом необходимо помнить, что отказоустойчивость обеспечивается только от смерти одного из дисков массива. В случае если данные были удалены целенаправленно, то они удаляются со всех дисков массива одновременно!

RAID-5 . Более безопасный вариант RAID-0. Объем массива рассчитывается по формуле (N - 1) * DiskSize RAID-5 из трех дисков по 500Гб, мы получим массив объемом в 1 терабайт. Суть массива RAID-5 в том, что несколько дисков объединятся в RAID-0, а на последнем диске хранится так называемая "контрольная сумма" - служебная информация, предназначенная для восстановления одного из дисков массива, в случае его смерти. Скорость записи в массиве RAID-5 несколько ниже, поскольку тратится время на расчет и запись контрольной суммы на отдельный диск, зато скорость чтения такая же, как в RAID-0.
Если один из дисков массива RAID-5 умирает, резко падает скорость чтения/записи, поскольку все операции сопровождаются дополнительными манипуляциями. Фактически RAID-5 превращается в RAID-0 и если своевременно не позаботиться восстановлением RAID-массива есть существенный риск потерять данные полностью.
С массивом RAID-5 можно использовать так называемый Spare-диск, т.е. запасной. Во время стабильной работы RAID-массива этот диск простаивает и не используется. Однако в случае наступления критической ситуации, восстановление RAID-массива начинается автоматически - на запасной диск восстанавливается информация с поврежденного с помощью контрольных сумм, расположенных на отдельном диске.
RAID-5 создается как минимум из трех дисков и спасает от одиночных ошибок. В случае одновременного появления разных ошибок на разных дисках RAID-5 не спасает.

RAID-6 - является улучшенным вариантом RAID-5. Суть та же самая, только для контрольных сумм используется уже не один, а два диска, причем контрольные суммы считаются с помощью разных алгоритмов, что существенно повышает отказоустойчивость всего RAID-массива в целом. RAID-6 собирается минимум из четырех дисков. Формула расчета объема массива выглядит как (N - 2) * DiskSize , где N - количество дисков в массиве, а DiskSize - объем каждого диска. Т.е. при создании RAID-6 из пяти дисков по 500Гб, мы получим массив объемом в 1,5 терабайта.
Скорость записи RAID-6 ниже чем у RAID-5 примерно на 10-15%, что обусловлено дополнительными временными затратами на расчет и запись контрольных сумм.

RAID-10 - так же иногда называется RAID 0+1 или RAID 1+0 . Представляет собой симбиоз RAID-0 и RAID-1. Массив строится минимум из четырех дисков: на первом канале RAID-0, на втором RAID-0 для повышения скорости чтения/записи и между собой они в зеркале RAID-1 для повышения отказоустойчивости. Таким образом, RAID-10 совмещает в себе плюс первых двух вариантов - быстрый и отказоустойчивый.

RAID-50 - аналогично RAID-10 является симбиозом RAID-0 и RAID-5 - фактически строится RAID-5, только его составляющими элементами являются не самостоятельные жесткие диски, а массивы RAID-0. Таким образом, RAID-50 дает очень хорошую скорость чтения/записи и содержит устойчивость и надежность RAID-5.

RAID-60 - та же самая идея: фактически имеем RAID-6, собранный из нескольких массивов RAID-0.

Так же существуют другие комбинированные массивы RAID 5+1 и RAID 6+1 - они похожи на RAID-50 и RAID-60 с той лишь разницей, что базовыми элементами массива являются не ленты RAID-0, а зеркала RAID-1.

Как Вы сами понимаете комбинированные RAID-массивы: RAID-10 , RAID-50 , RAID-60 и варианты RAID X+1 являются прямыми наследниками базовых типов массивов RAID-0 , RAID-1 , RAID-5 и RAID-6 и служат только для повышения либо скорости чтения/записи, либо повышения отказоустойчивости, неся при этом в себе функционал базовых, родительских типов RAID-массивов .

Если перейти к практике и поговорить о применении тех или иных RAID-массивов в жизни, то логика довольно проста:

RAID-0 в чистом виде не используем вообще;

RAID-1 используем там, где не особо важна скорость чтения/записи, но важна отказоустойчивость - например на RAID-1 хорошо ставить операционные системы. В таком случае к дискам никто кроме ОС не обращается, скорости самих жестких дисков для работы вполне достаточно, отказоустойчивость обеспечена;

RAID-5 ставим там, где нужна скорость и отказоустойчивость, но не хватает денег на покупку большего количества жестких дисков или есть необходимость восстанавливать массивы в случае их повреждения, не прекращая работы - тут нам помогут запасные Spare-диски. Обычное применение RAID-5 - хранилища данных;

RAID-6 используется там, где просто страшно или есть реальная угроза смерти сразу нескольких дисков в массиве. На практике встречается достаточно редко, в основном у параноиков;

RAID-10 - используется там, где нужно чтобы работало быстро и надежно. Так же основным направлением для использования RAID-10 являются файловые серверы и серверы баз данных.

Опять же, если еще упростить, то приходим к выводу, что там где нет большой и объемной работы с файлами вполне достаточно RAID-1 - операционная система, AD, TS, почта, прокси и т.д. Там же, где требуется серьезная работа с файлами: RAID-5 или RAID-10 .

Идеальным решением для сервера баз данных представляется машина с шестью физическими дисками, два из которых объединены в зеркало RAID-1 и на нем установлена ОС, а оставшиеся четыре объединены в RAID-10 для быстрой и надежной работы с данными.

Если прочитав, все вышеизложенное Вы решили установить на своих серверах RAID-массивы , но не знаете, как это делать и с чего начать - обращайтесь к нам ! - мы поможем подобрать необходимое оборудование, а так же проведем инсталляционные работы по внедрению RAID-массивов .

В последнее время в мировой компьютерной прессе стало появляться довольно много статей на тему: «Почему RAID-5 это плохо» (пример раз , два , и другие)

Постараюсь, без ныряния в инженерные и терминологические дебри объяснить, почему до сих пор RAID-5 вроде работал, а теперь вдруг перестал.

Емкость жестких дисков за последние несколько лет растет без особых тенденций к остановке. Однако, хотя емкость дисков чуть ли не удваивается каждый год, прирост их быстродействия, то есть скорости передачи данных, за тот же срок увеличивается всего в проценты. Да, действительно, на дисках появляются интерфейсы SATA, SATA-II, и ждем уже SATA-III, но стали ли диски быстрее работать, а не просто получили новый интерфейс с бубенчиками и новыми круглыми цифрами теоретических показателей вида "цифра максимальной скорости на спидометре «Запорожца» ?

В настоящее время практически все производители выпускают жесткие диски двух основных классов.
Это так называемые Desktop-диски, для настольных систем, и диски Enterprise, предназначенные для серверов и прочих критичных случаев. Кроме того, диски класса Enterprise также делятся на диски SATA (скорость оборотов 7200RPM) и SAS или FC (со скоростями вращения 10K и 15K RPM).

Надежность процесса передачи данных принято измерять параметром BER - Bit Error Rate(Ratio) . Это вероятность сбоя, из расчета некоего объема прочитанных головками диска бит.
Как правило, диски Desktop-class имеют указанную производителем величину BER равную 10^14 степени , постепенно для все больших дисков, в особенности новых серий, указывают величины надежности в 10^15. Это число означает, что производитель прогнозирует вероятность сбоя при чтении не хуже, чем одного сбойного бита на 10^14 степени прочитанных диском бит. Единица с 14 нулями. Сто тысяч миллиардов бит.
Цифра огромная, казалось бы. Но так ли велика она на самом деле?

Несложная математика уровня calc.exe говорит нам, что 10^14 бит это всего лишь около 11TB данных. Это означает, что производитель жестких дисков говорит нам таким образом, что считав с диска с параметром BER 10^14, то есть обычного, десктопного класса диска, примерно 11TB, мы, с точки зрения производителя, наверняка получим где-нибудь сбойный бит. По крайней мере он, производитель, на это у себя рассчитывает.
Сбойный бит чтения означает сбойный блок, размером 512 байт, на который он пришелся. И пошло-поехало.
11 терабайт это же уже и не так много?

И это не означает, что надо прочитать ровно 11TB, BER это только вероятность, которая стремится к 100% к 11-му терабайту. На меньших объемах она просто пропорционально уменьшается.
Да, диски с BER равным 10^15 имеют вероятность ошибки в 10 раз лучше (110TB считанного на один сбойный бит), но и это только временное улучшение. Как мы помним, емкость дисков удваивается с каждым новым поколением, то есть примерно каждые полтора-два года, растут и емкости RAID, а BER10^15 для SATA достигнут только в последний год-полтора.

Так, например, для 6-дискового RAID-5 с дисками 1TB величина отказа по причине BER оценивается в 4-5%, а для 4TB дисков она же будет достигать уже 16-20%.

Аппаратные подсистемы RAID 5 являются на сегодняшний день наиболее популярными для файл-серверов общего назначения, Web-серверов и других прикладных задач, связанных с хранением и обработкой данных. Они не только повышают производительность и улучшают защиту данных, но позволяют снизить стоимость такого решения при сохранении или улучшении основных характеристик и свойств.

Эффективное хранение данных – важная задача для вычислительной среды предприятия, и многие организации используют RAID-массивы в серверных, сетевых и Интернет приложениях хранения и обработки данных, чтобы повысить их доступность. Технологии RAID могут позволить IT-менеджерам использовать в своих интересах ключевую производительность и операционные характеристики, которые контроллеры и подсистемы RAID 5 обеспечивают благодаря процессорам ввода/вывода, которые освобождают центральный процессор от прерываний во время дисковых операций «чтение-модификация-запись».

По реализации RAID-контроллеры бывают программными (т.н. софтовыми), программно-аппаратными и полностью аппаратными.

Программный RAID не требует специальных аппаратных средств. Все данные обрабатываются центральным процессором. В этом случае используется стандартное подключение накопителей. Неудобство такой реализации RAID – дополнительная существенная нагрузка на процессор, сокращение процессорного времени на обработку запросов приложений и операционной системы, так как центральный процессор обрабатывает все RAID-операции (вычисление XOR, размещение данных и обработка прерываний по этим задачам).

Программно-аппаратный RAID реализуется с помощью чипа ввода-вывода специальной микросхемы (ASIC), которая может выполнять операции XOR. В данном случае часть операций по обеспечению функционирования RAID-массива берет на себя эта микросхема. Все остальное – по-прежнему центральный процессор, осуществляющий операции с помощью драйверов. Программно-аппаратный RAID – по существу более производительное решение на основе центрального процессора системы.

Аппаратный RAID-контроллер представляет собой RAID-подсистему, которая фактически является самостоятельной и самодостаточной для своих задач и практически не требует ресурсов центрального процессора при операциях с RAID-массивом. У этой подсистемы есть свой BIOS, приглашение которого можно видеть во время загрузки системы, свой процессор и своя память, называемая кэш-памятью контроллера.

Определение уровней RAID

Существует несколько основных типов (т.н. «уровней») RAID. Каждый предлагает уникальную комбинацию свойств, два основных из которых – это степень защиты данных и производительность. Для того, чтобы понять, как работает RAID 5, рассмотрим два начальных уровня RAID – «0» и «1»:

RAID 0 (страйп, stripe): этот уровень RAID обеспечивает одновременное чтение/запись блоков данных сразу на все накопители массива параллельно. Такая параллельная обработка данных позволяет считывать и записывать информацию на массив RAID 0 значительно быстрее, чем на один накопитель. RAID 0 обычно используется для задач, в которых скорость обработки данных гораздо важнее их целостности, поскольку при отказе одного из накопителей все данные массива теряются.

RAID 1 (зеркало, mirror): этот уровень RAID дублирует данные на одном и более накопителях. RAID 1, в противоположность RAID 0, используется для задач, в которых защита данных важнее производительности. В случае выхода из строя одного из накопителей, информация полностью сохранится на втором. RAID-1 обеспечивает более быстрое чтение, чем один накопитель, но запись на него происходит медленнее. Поскольку защита операционной системы является важной задачей, RAID 1 зачастую используется, чтобы зеркалировать загрузочный накопитель сервера (в том случае, когда операционная система и данные разнесены по разным накопителям или массивам).

Как работает RAID 5

RAID 5 сочетает в себе свойства RAID 0 и RAID 1 . С одной стороны, операции чтения и записи происходят одновременно (параллельно) со всеми дисками массива. С другой стороны, при выходе из строя одного диска информация не теряется.

RAID 5 обеспечивает целостность данных дискового массива, используя пространство, по объему равное меньшему накопителю в массиве. Например, в массиве из пяти накопителей емкостью по 72 ГБ, доступная емкость массива будет составлять 288 ГБ. Доступная для пользователя емкость массива RAID 5 считается по формуле S * (N – 1), где S – емкость наименьшего накопителя в массиве, N – общее количество накопителей в массиве.

Количество накопителей, их емкость и суммарная емкость массива RAID 5 на сохранности данных не сказываются. Также, как единственный накопитель емкостью 72 ГБ может защитить все данные в массиве из пяти накопителей общей емкостью 288 ГБ, в массиве с 15-ю накопителями емкостью 300 ГБ, единственный накопитель на 300 ГБ может защитить весь массив на 4,2 ТБ в случае отказа одного накопителя.

RAID 5 обеспечивает эффективный способ защиты данных и достигает подобной RAID 0 производительности по чтению. В то же время, скорость записи RAID 5 может достигать больших значений, чем у одного накопителя. Таким образом, поскольку RAID 5 эффективно защищает данные и может повысить производительность дисковой подсистемы, он является наиболее популярным на сегодняшний день.

Вычисление функции XOR

Один накопитель может защитить данные любого числа других накопителей при условии, что из строя выходит только один из накопителей массива. XOR является и ассоциативной, и коммутативной операцией, что означает, что ни порядок, ни группировка операндов не влияет на результаты. XOR – также бинарная операция, и имеет только четыре возможных комбинации двух операндов. Два операнда имеют «истинный» результат XOR, когда один и только один операнд имеет значение 1.

Вычисление XOR реализуют с помощью специальных аппаратных средств, которыми могут быть чип XOR ASIC или процессор ввода/вывода с интегрированными функциональными возможностями XOR, что значительно увеличивает производительность RAID-контроллера. Каждый байт данных, сохраняемых в томе RAID 5, требует вычислений XOR. Представление о том, как работает операция XOR, является очень важным для понимания, как подсистема RAID 5 может защитить большой объем данных с помощью относительно небольшого объема одного накопителя.

На рисунке 1 каждый прямоугольник Dn представляет блок данных, называемый стрип (strip, англ. полоска). Все полоски ряда называются страйп (stripe, англ. полоса). В RAID 5, данные четности расположены в разных стрипах на каждом накопителе – это так называемое parity rotation (англ. «вращение четности»). Это сделано для увеличения производительности: поскольку четность вычисляется и записывается в каждой операции «чтение-модификация-запись», размещение ее на одном накопителе привело бы к образованию узкого места, так называемого «бутылочного горлышка». Обращения к такому накопителю производились бы во столько раз чаще по отношению к другим накопителям в системе, сколько этих накопителей в системе. Данные четности – Pn, где n – номер страйпа, всего-навсего результат операции XOR на всех других элементах данных в пределах того же страйпа. Поскольку XOR – ассоциативная и коммутативная операция, ее результат над несколькими операндами можно найти путем выполнения XOR сначала на любых двух операндах, затем выполнением XOR над результатом этой операции и следующим операндом, и так далее со всеми операндами, пока не будет достигнут результат.

Рисунок 1. Карта данных типичного RAID 5 с четырьмя накопителями

Том RAID 5 допускает отказ любого одного накопителя массива без потери данных. Как правило, когда физический накопитель выходит из строя, как, например, накопитель 3 на рисунке 2, говорят, что массив в критическом состоянии (англ. degraded). В такой ситуации недостающие данные для любого страйпа могут быть определены выполнением операции XOR на всех оставшихся элементах данных этого страйпа. Грубо говоря, каждый потерянный элемент данных представляется как общая сумма оставшихся стрип в страйпе. Обычный размер стрипа – от 32 кБ до 128 кБ. На рисунке 2 показан массив с условным объемом стрипа, где каждый элемент представляет единственный бит.

Четность для первой полосы:
P1 = D1 XOR D2 XOR D3;
P1 промежут. = D1 XOR D2 = 1;
P1 = P1 промежут. XOR D3 = 0.
Таким образом, P1 = 0.

Рисунок 2. Карта данных RAID 5 с четырьмя накопителями; массив с условным объемом стрипа.

Если хост запрашивает у контроллера данные с массива, который находится в критическом состоянии, RAID-контроллер должен сначала прочитать все доступные элементы данных на полосе, включая четность. После этого выполняется XOR над этими элементами. Результатом этой операции являются потерянные данные. Таким образом, доступ к массиву в случае выхода из строя одного из накопителей не прерывается. Однако, если из строя в это время выходит второй накопитель, то безвозвратно теряются данные всего массива.

Большинство аппаратных RAID-контроллеров восстанавливают массив автоматически, если доступен запасной (hot-spare) накопитель, возвращая массив в нормальное состояние. Кроме того, как правило, с аппаратными RAID-контроллерами поставляется программное обеспечение, которое включает средства, позволяющие уведомить администраторов системы, когда такой отказ происходит. Это позволяет администраторам устранить проблему прежде, чем следующий накопитель выйдет из строя, и массив перейдет в критическое состояние без возможности автоматического восстановления.

Выполнение операции «чтение-модификация-запись»

Операция записи в RAID 5 ответственна за вычисление и запись данных четности. Эта операция обычно упоминается как операция «чтение-модификация-запись». Представьте страйп составленным из четырех блоков данных и одного блока четности. Предположим, что хост хочет изменить маленький блок данных, которые занимают место только на одном стрипе в пределах страйпа. RAID-контроллер не может просто записать этот маленький блок данных и считать запрос выполненным. Эта операция также должна обновить данные четности, которые вычислены выполнением операции XOR на каждом стрипе в пределах страйпа. Таким образом, четность вычисляется всегда, когда изменяется один или более стрипов.

Рисунок 3 показывает типичную операцию «чтение-модификация-запись», в которой данные, которые хост пишет на накопитель, содержатся в пределах только одной полосы, в блоке D5. Операция «чтение-модификация-запись» состоит из следующих шагов:

Рисунок 3. Шаг за шагом: операция «чтение-модификация-запись» в массиве RAID 5 с четырьмя накопителями

1. Получение новых данных от хоста: операционная система запрашивает запись данных в блок D5 на накопителе 2.
2. Чтение старых данных накопителя 2, на место которых предполагается записать новые данные. Чтение только того блока данных, который в процессе записи будет изменен, устраняет необходимость для вычисления четности читать данные со всех других накопителей в пределах страйпа. Число шагов, необходимых для операции «чтение-модификация-запись», не зависит от числа накопителей в массиве.
3. Чтение старой четности. Эта операция не зависит от числа накопителей в массиве.
4. Вычисление новой четности страйпа. Для этого нужно вычислить XOR шагов 2 и 3 минус (в данном случае, в булевой арифметике, это тот же XOR) вклад старых данных, которые будут переписаны. Это объясняется ассоциативностью и коммутативностью XOR. Таким образом, чтобы определить четность для страйпа с новым блоком D5, нужно всего лишь вычислить XOR новых данных, старых данных и старой четности.
5. Проверка целостности данных: этот процесс не описан на рисунке 3, поскольку его реализация сильно различается у разных производителей. Смысл этого процесса в отслеживании выполнения последующих шагов 6 и 7. Для целостного дискового массива подсистема должна гарантировать, что блок четности всегда соответствует данным в пределах полосы. Поскольку невозможно гарантировать, что новые данные и новый блок четности будут записаны на разные диски одновременно, подсистема RAID определяет обрабатываемый страйп как незавершенный (нецелостный), «dirty» (англ. «грязный»), и это означает, что целостность данных нарушена.
6. Запись данных, которые были получены от хоста в шаге 1. Теперь, в соответствии с таблицей размещения данных, подсистема RAID определяет, на каком физическом накопителе, и где именно на накопителе, будут записаны эти данные.
7. Запись нового блока четности: новый блок четности был вычислен в шаге 4; теперь подсистема RAID пишет его на накопитель.
8. Проверка целостности данных: как только подсистема RAID проверяет, что шаги 6 и 7 были закончены успешно, т.е. и данные и четность записаны на накопители, страйп считают целостным.

В примере на рисунке 3, предположим, что Dnew = 0, Dold = 1, и Pold = 0. Обработка шага 4 на этих данных даст нам: 0 XOR 1 XOR 0 = 1. Это четность P. После процедуры «чтение-модификация-запись», второй ряд в иллюстрации 3 будет D4 = 1, D5 = 0, P2 = 1, и D6 = 0.

Этот оптимизированный метод полностью масштабируем. Количество операций чтения, записи, и операции XOR независимы от числа накопителей в массиве. Поскольку накопитель с данными четности участвует в каждой операции записи (шаги 6 и 7), данные четности хранятся на всех накопителях в массиве, перемещаясь в страйпе относительно блоков данных. Если бы все данные четности хранились на одном физическом накопителе, то этот накопитель мог бы стать узким местом, «бутылочным горлышком», о чем уже говорилось выше.

Разгрузка прерываний центрального процессора

Прерывание – это запрос от компонента системы на процессорное время. Подсистемы ввода/вывода производят прерывание центрального процессора, когда они заканчивают транзакцию. Ниже приведено небольшое сравнение, какие прерывания генерируют различные по типу исполнения RAID-контроллеры для простой записи на массив RAID 5:

Программный RAID: поскольку в данном случае центральный процессор системы отвечает за размещение данных на диске, он должен сгенерировать запрос на каждое чтение и запись, необходимые для операции «чтение-модификация-запись». Таким образом, центральный процессор получает четыре прерывания от подсистемы, состоящие из двух запросов на чтение, и двух на запись (шаги 2, 3, 6, и 7 в примере на рисунке 3).

Программно-аппаратный RAID: эта реализация генерирует те же самые четыре прерывания, что и программный RAID, поскольку упрощение в этой реализации связано в большинстве случаев только с вычислением операции XOR специальной микросхемой XOR ASIC .

Аппаратный RAID: процессор ввода/вывода в аппаратной подсистеме RAID обычно скрывает все промежуточные операции чтения и записи, и генерирует всего одно прерывание – об успешном выполнении транзакции. Процессор ввода/вывода перехватывает все другие прерывания, освобождая центральный процессор, чтобы тот мог выполнять не-RAID задачи.

по материалам компаний Dell и Intel