Технология RAID
Андрей Борзенко
Становление Интернет-экономики неразрывно связано с обеспечением надежной работы всех компонентов электронных систем, а гарантии защиты и целостности данных приобретают в этом случае особое значение. Рынок средств хранения данных совершенно немыслим сегодня без дисковых массивов, которые стали такой же нормой для различных прикладных систем, что и винчестер для ПК.
По мере роста объемов оперативной информации, необходимой в повседневной работе, дисковые массивы становятся все более привычными и незаменимыми элементами локальных сетей масштаба отдела и выше. Дисковые массивы — основной элемент сетей хранения данных SAN (Storage Area Network), получающих все большее распространение. Эти сети позволяют многочисленным пользователям совместно работать с информацией в удаленном массиве, как если бы она хранилась на локальных дисках. Кроме того, растет популярность кластерных решений, в которых дисковые массивы выполняют роль общедоступных ресурсов.
По данным корпорации Disk/Trend (http://www.disktrend.com), рынок дисковых массивов неуклонно рос в течение последнего десятилетия, однако некоторые его сегменты развивались значительно быстрее остальных. Это, например, можно сказать о так называемых избыточных массивах независимых дисков RAID (Redundant Arrays of Independent Disks).
Дисковые массивы
Поскольку значительно улучшить технологические параметры магнитных дисков уже невозможно, приходится искать другие пути, и один из них — параллельная обработка. Если распределить блок данных по N дискам некоторого массива и обеспечить возможность одновременно считывать с них информацию, то этот блок удастся считать в N раз быстрее (без учета времени формирования блока). Поскольку все данные передаются параллельно, это архитектурное решение называется массивом с параллельным доступом. Такие массивы обычно используются для приложений, требующих передачи порций данных большого размера.
Некоторые задачи, наоборот, характеризуются значительным числом небольших по объему запросов (таковы, например, задачи обработки баз данных). Располагая записи базы данных по дискам массива, можно распределить загрузку, независимо позиционируя диски. Такую архитектуру принято называть массивом с независимым доступом.
К сожалению, при увеличении количества дисков в массиве надежность массива в целом уменьшается. При независимых отказах и экспоненциальном законе распределения наработки на отказ среднее время безотказной работы MTTF (Mean Time To Failure) всего массива вычисляется по формуле:
MTTF = MMTFd/Nd,
где MMTFd — среднее время безотказной работы одного диска; Nd — количество дисков.
В том случае, когда система способна продолжать работать даже при выходе из строя одного из ее компонентов, говорят о ее невосприимчивости к отказам (fault tolerance). Для накопителей информации под невосприимчивостью к отказам понимают их способность в случае случайного сбоя продолжать выполнение операций ввода-вывода без потери данных.
Существует несколько способов повысить надежность подсистемы хранения данных. Во-первых, для повышения отказоустойчивости массивов используют избыточное кодирование. В избыточных дисковых массивах применяют два основных типа кодирования — дублирование и контроль четности.
Дублирование, или зеркализация, используется в дисковых массивах чаще
всего. Резервное копирование данных, осуществляемое на многих предприятиях ежедневно
или несколько раз в неделю, не обеспечивает быстрого восстановления информации
и оперативной защиты новых данных, созданных после последнего сеанса копирования.
Эти задачи решаются с помощью "зеркального" отображения дисков, при котором
все, что записывается на первый диск, дублируется на второй. В случае поломки
первого диска или, что более вероятно, записи данных в испорченный сектор дискового
пространства, они будут считаны с "зеркального" (второго) диска. Это схема достаточно
проста и не требует дополнительных затрат на аппаратуру, но имеет один существенный
недостаток — половина дискового пространства тратится на хранение копии информации.
Второй способ реализации избыточных дисковых массивов — это избыточное кодирование
с помощью вычисления четности. Контроль четности применяется в компьютерных
системах уже довольно давно, с тех самых пор, когда для хранения одного байта
в ОЗУ стали использовать 9 разрядов. Девятый бит (называемый контрольным, или
разрядом четности) необходим для контроля за целостностью информации. Четность
определяется применением операции "исключающее ИЛИ" (сложение по модулю 2 —
XOR) ко всем разрядам в слове данных. При четном числе единиц контрольный бит
устанавливается в ноль, а при нечетном — в единицу. При считывании данных информационные
разряды снова суммируются, и полученный результат сравнивается со значением
контрольного бита. Если они совпадают, данные, скорее всего, верны, а если нет
— значения одного или нескольких разрядов ошибочны.
История RAID
В 1987 г. Паттерсон, Гибсон и Катц, американские исследователи из Калифорнийского университета в Беркли, описали в своей статье A Case for Redundant Arrays of Inexpensive Disks (RAID) несколько типов дисковых массивов, обозначив их аббревиатурой RAID. Основная идея RAID состояла в объединении нескольких небольших и недорогих дисков в массив, который по производительности не уступал бы одному большому диску (Single Large Expensive Drive, SLED), использовавшемуся обычно с компьютерами типа мэйнфрейм. Заметим, что для компьютера этот массив дисков должен был выглядеть как одно логическое устройство. Увеличение количества дисков в массиве, как правило, означало повышение производительности, по крайней мере при чтении информации. Слово "недорогой" (inexpensive) в названии RAID характеризует стоимость одного диска в массиве по сравнению с большими дисками мэйнфреймов. Кстати, некоторое время спустя после выхода вышеупомянутой статьи из Беркли пришла новая расшифровка аббревиатуры RAID — Redundant Arrays of Independent Disks. Дело в том, что из-за низкой надежности недорогих дисков в массивах первоначально пришлось использовать достаточно дорогие дисковые устройства мэйнфреймов.
Сейчас вполне качественные диски имеют разумную стоимость, и RAID становится основным элементом современного сервера любого уровня (а зачастую и более "простого" компьютера). Тем не менее когда мы говорим о RAID, то о дешевизне лучше сразу забыть. Стоимость полных RAID-систем снижается медленнее, чем цены на базовые диски. Это вызвано высокими накладными расходами при построении RAID, в частности, потребностью в контроллерах, коннекторах, специализированном ПО и т. п.
Массивы RAID постепенно становятся вместительнее и дешевле, у них появляются новые возможности. Однако покупателям по-прежнему приходится определять приоритеты и искать компромиссы — между функциональностью и ценой, между производительностью и объемом дисковой памяти. Вариантов построения систем с RAID существует много. Все они гарантируют высокую надежность при умеренных затратах.
Применение RAID повышает отказоустойчивость дисковой системы и ее производительность. Отказоустойчивость достигается благодаря избыточности — в RAID объединяется больше дисков, чем это необходимо для получения требуемой емкости. Производительность дисковой системы повышается за счет параллельной обработки запросов. Современные интерфейсы позволяют осуществлять операции записи и считывания фактически одновременно на нескольких дисках, поэтому в первом приближении можно рассчитывать, что скорость записи или чтения для RAID увеличивается пропорционально количеству дисков, объединяемых в массив. Одновременную работу с несколькими дисками можно реализовать с использованием либо параллельного, либо независимого доступа.
Вообще говоря, в основе технологии RAID лежат три основных метода записи и защиты информации: распределение последовательности сегментов данных по дискам с определенной циклической очередностью (поочередное размещение); зеркальное отображение дисков; вычисление контрольных сумм. Поочередное размещение сегментов на разных дисках позволяет создавать большие тома и ускорять выполнение операций ввода-вывода; зеркалирование накопителей и вычисление контрольных сумм дают избыточность информации, позволяющую в случае сбоя восстановить утраченные данные.
Идея создания больших томов путем объединения дискового пространства не нова. Объемы баз данных на крупных предприятиях всегда превышали емкости одиночных дисков, поэтому поочередное размещение широко использовалось для создания больших логических томов, состоящих из нескольких физических дисков.
До появления метода поочередного размещения информация сначала записывалась на один диск, а затем, когда свободное пространство на нем заканчивалось, — на другой. При таком подходе к размещению информации тоже можно создавать большие тома, но никакого ускорения работы дисковой подсистемы не происходит.
Реализуемое в системах RAID поочередное размещение предполагает запись первого сегмента данных на первый диск, второго — на второй и т. д. В этом случае производительность массива повышается, поскольку компьютер начинает записывать очередной сегмент данных (на следующий диск) еще до того, как закончил запись предыдущего сегмента. Для дальнейшего повышения производительности дисковых систем отдельные группы дисков подключаются к разным контроллерам.
Для стандартизации продуктов RAID в 1992 г. был организован промышленный консорциум RAB (RAID Advisory Board — экспертный совет по RAID, http://www.raid-advisory.com). Сегодня консорциум включает более 40 компаний.
В компьютерной индустрии выделяют несколько классов дисковых массивов. Разумеется, разные классы ориентированы на решение различных задач. Заметим, что набор отдельных дисков, не объединенных в RAID, называют обычно JBOD (Just a Bunch of Disks).
Уровни RAID
К настоящему времени консорциум RAB стандартизировал несколько уровней объединения дисков в массивы. Номера уровней не связаны с характеристиками RAID, они попросту соответствуют порядку, в котором были предложены различные варианты. Уровни с RAID 1 по RIAD 5 включительно были представлены в упомянутой выше статье специалистов из Беркли, и эта систематика была принята как стандарт де-факто.
RAID 0 — Non-Redundant Striped Array
Этот класс (рис. 1) обычно определяет неизбыточную группу дисков, использующих технику расщепления без хранения информации о контрольных суммах. Такие системы имеют максимальную производительность, однако выход из строя одного из физических дисков, входящих в массив, приводит к невосстановимой потере хранимых данных. В обычном массиве данные последовательно записываются на диск, пока не будет исчерпан его объем. В RAID 0 при использовании, например, четырех дисков данные записываются сначала на первую дорожку первого диска, затем на первые дорожки второго, третьего и четвертого. Вслед за этим наступает черед вторых дорожек дисков и т. д. Подобные системы обычно используются в тех случаях, когда требуется высокая производительность для хранения некритичных данных. Минимальное количество дисков в этом случае равно двум.
Рис. 1. Уровень RAID 0.
|
RAID 1 — Mirrored Arrays
К этому классу (рис. 2) относятся подсистемы, применяющие методы зеркалирования и дублирования. Они отличаются максимальной стоимостью и избыточностью, зато в ряде случаев показывают самую высокую производительность среди классов 1-5. RAID 1 широко применяются в современных архитектурах систем хранения. Их основной недостаток — высокая цена, так как для любого приложения приходится удваивать объем необходимой дисковой памяти. Именно поэтому они наиболее эффективны в случае небольших объемов критической информации. Минимальное число дисков равно двум.
Рис. 2. Уровень RAID 1.
|
RAID 2 — Parallel Array with ECC
Эти подсистемы хранят данные и код для обнаружения двойных и исправления одиночных ошибок (Error Correction Code, ECC) на отдельных дисках. Для коррекции ошибок обычно используется кодирование Хэмминга (Hamming). В RAID уровня 2 расслоение данных для записи или чтения осуществляется на уровне битов. Однако применение кода с коррекцией ошибок требует для хранения контрольной информации более одного диска. Большинство контрольных дисков, используемых в RAID 2, нужны для определения положения неисправного разряда. Но сейчас эта проблема потеряла остроту, так как большинство контроллеров в состоянии самостоятельно определить, когда диск отказал, при помощи специальных сигналов или дополнительного кодирования информации, записанной на диск и используемой для исправления случайных сбоев.
Системы RAID 2 имеют очень большую избыточность и потому весьма дороги. Так, для массива из 16 накопителей требуется три дополнительных диска для хранения кодов коррекции. В связи с этим RAID 2 не нашел практического применения. Минимальное число дисков в такой подсистеме равно семи.
RAID 3 — Parallel Array with Parity
Подсистемы этого класса (рис. 3) похожи на подсистемы RAID 2, за исключением того, что у них для хранения контрольных сумм используется только один выделенный диск, на который записывается сумма данных по модулю 2 (XOR). При записи данные разбиваются на блоки, каждый из которых записывается на отдельный диск. Затем вычисляется контрольная сумма, которая записывается на дополнительный диск. При выходе из строя любого из основных дисков его содержимое можно восстановить по контрольным данным и информации, оставшейся на исправных дисках. Здесь, как и в RAID 2, данные для записи или чтения расслаиваются на небольшие подблоки. Подсистемы RAID 3, как правило, обеспечивают максимальную скорость передачи данных, которая необходима при решении задач, связанных с большими массивами данных. Схема RAID 3 предусматривает использование как минимум трех дисков и применяется обычно в системах, работающих с относительно большими последовательными записями, например, файлами изображений. RAID 3 требует значительно меньше избыточного дискового пространства, нежели RAID 1.
Рис. 3. Уровень RAID 3.
|
RAID 4 — Striped Array with Parity
Подсистемы этого типа аналогичны RAID 3 и также используют один выделенный диск для хранения контрольных сумм. Данные расслаиваются на блочном уровне, каждый блок записывается на отдельный диск и может прочитываться отдельно. Контрольная сумма для группы блоков генерируется при записи и проверяется при чтении. RAID 4 повышает производительность передачи небольших объемов данных благодаря параллелизму — предусмотрено выполнение более одного обращения по вводу-выводу одновременно. Главное отличие данной схемы от RAID 3 состоит в том, что расслоение данных выполняется на уровне секторов, а не на уровне битов или байтов. Типичный размер блока кратен размеру сектора жесткого диска. Минимальное число дисков равно трем.
RAID 5 — Striping Array with Rotating Parity
В этом классе дисковых подсистем (рис. 4) также применяется техника расщепления, причем не только для основных данных, но и для информации о контрольных суммах, что позволяет выполнять несколько операций записи одновременно. Этот уровень отличается от RAID 3 большим размером блока записываемых данных. Размещение избыточной информации повышает производительность дискового массива. Массивы RAID 5 ориентированы на напряженную работу с дисками и хорошо подходят для многопользовательских систем. При грамотном планировании операций записи здесь можно параллельно обрабатывать до N/2 блоков, где N — число дисков в группе. Минимальное число дисков — три.
Рис. 4. Уровень RAID 5.
|
RAID 5DPКорпорация Hewlett-Packard (http://www.hp.com) |
RAID 6 — Independent Data Disks with Two Independent Distributed Parity Schemes
Это расширенный вариант RAID 5, в котором предусмотрен двойной контроль четности хранимой информации. Для хранения контрольной информации требуется два диска. Разработанная для критически важных приложений архитектура RAID 6 имеет очень низкую производительность записи, что обусловлено необходимостью расчета дополнительных контрольных сумм. Данные разбиваются на блочном уровне (как в RAID 5), но в дополнение к предыдущей архитектуре здесь используется вторая схема для повышения отказоустойчивости — такая архитектура устойчива к двойным отказам. Однако при выполнении логической записи реально происходит шесть обращений к диску, что сильно увеличивает время обработки одного запроса. Минимальное число дисков равно четырем.
RAID 7 — Optimized Asynchrony for High I/O Rates as well as High Data Transfer
Rates
Логотип RAID 7 — зарегистрированная торговая марка Storage Computer Corporation. Данное решение отличается от остальных уровней RAID тем, что предполагает асинхронность работы компонентов (включая канал связи с хост-машиной) и независимость управления ими. По этой причине контроллер системы RAID 7 должен работать под управлением ОС реального времени. Такие системы обладают более высокой производительностью по сравнению с массивами RAID других уровней. В них данные распределяются по информационным дискам, а контрольная информация хранится на отдельном диске. С целью повышения производительности операции чтения и записи централизованно кэшируются. Чтобы не потерять содержимое кэш-памяти во время сбоев по питанию, систему RAID 7 следует подключать к ИБП. Одно из существенных преимуществ данного решения — высокая скорость передачи данных и обработки запросов. Минимальное число дисков равно двенадцати.
Комбинированные уровни
На уровне RAID 0/1 (0+1) (рис. 5) используется комбинация методов расщепления данных и зеркалирования. Иными словами, скоростные преимущества RAID 0 объединяются с надежностью, присущей RAID 1. Схема используется обычно для небольших объемов критичных данных, которые нужно обрабатывать с высокой производительностью. Минимальное число дисков равно четырем.
Рис. 5. Уровень RAID 0+1.
|
Уровень RAID 10 (рис. 6) позволяет создать отказоустойчивый массив с дублированием и параллельной обработкой. Эта архитектура являет собой массив типа RAID 0, сегментами которого служат массивы RAID 1. Он объединяет в себе очень высокую отказоустойчивость и производительность. К недостаткам можно отнести весьма высокую стоимость и ограниченные возможности масштабирования.
Рис. 6. Уровень RAID 10.
|
Уровень RAID 30 определяет отказоустойчивый массив с параллельной передачей данных и повышенной производительностью. Он представляет собой массив типа RAID 0, сегментами которого служат массивы RAID 3, — это дает высокую отказоустойчивость в сочетании с высокой производительностью. Обычно RAID 30 используется для приложений, требующих последовательной передачи данных больших объемов. К недостаткам также относятся высокая стоимость и ограниченное масштабирование.
Для создания отказоустойчивого массива с распределенным контролем четности и повышенной производительностью предлагается уровень RAID 50. Он являет собой массив типа RAID 0, сегментами которого служат массивы RAID 5. Схема ориентирована на приложения с большой интенсивностью запросов и высокой скоростью передачи данных. Недостатки — те же, что и у предыдущих уровней.
Оценка эффективности уровня RAID
Как известно, основное применение технология RAID нашла в серверах. Поэтому такие важные показатели, как скорость записи или чтения, не всегда отражают способность системы выполнять основную задачу — обслуживать одновременно большое количество клиентов. В реальных условиях система формирует поток запросов к RAID на обслуживание. Принципы, в соответствии с которыми построены RAID, предусматривают одновременное обслуживание нескольких таких запросов или механизмы, позволяющие ускорить обработку предыдущего запроса для обслуживания следующего. Тем не менее при интенсивном потоке заявок на обслуживание RAID-массив может оказаться занят обслуживанием предыдущих запросов. В этом случае очередной запрос ожидает, когда RAID освободится. Перегрузка RAID интенсивным потоком запросов приводит в первую очередь к увеличению времени обслуживания очередного запроса. Поэтому в качестве критерия производительности RAID принято измерять время ожидания обслуживания при определенной интенсивности потока запросов.
RAID-массивы разного уровня, естественно, по-разному ведут себя при увеличении количества запросов. Это связано в первую очередь с соотношением размера блоков на дисках и размера записываемых (считываемых) данных. Если в системе RAID 3 происходит поочередное размещение очень коротких сегментов данных, то в системе RAID 4 по дискам распределяются информационные блоки довольно большого размера. Это дает возможность выполнять несколько разных запросов на чтение одновременно. В массиве RAID 2 или RAID 3 из-за малого размера записываемых сегментов каждый файл распределяется равномерно по всем информационным дискам и каждый диск участвует во всех операциях чтения или записи, поэтому невозможно выполнять две или более названные операции одновременно.
В RAID 0 скорость ввода-вывода растет практически пропорционально числу добавляемых дисков. Массив RAID 1 состоит из пары зеркальных дисков — каждая запись дублируется. Чтение идет с того диска, где эта операция выполняется быстрее. При одиночных операциях чтения выигрыша в скорости нет, но в случае нескольких операций производительность увеличивается, поскольку они выполняются параллельно. RAID 1 выдает запросы на запись последовательно на каждый диск, а затем все записи физически выполняются параллельно. В результате программная реализация RAID 1 работает почти так же быстро, как аппаратная.
Конфигурация RAID 0+1 сложнее, чем RAID 1: здесь зеркальное отображение совмещается с чередованием. В большинстве решений на основе зеркального отображения используется чередование, повышающее скорость последовательного и случайного чтения путем распределения операций по нескольким контроллерам и физическим дискам. В конфигурации RAID 10 два диска зеркально отображаются вместе, и уже это "зеркало" чередуется. В обоих случаях (RAID 0+1 или RAID 10) отказ одного диска не приводит к потере данных массива. Впрочем, если выйдет из строя еще один диск (первичный или зеркальный), то массив RAID 0+1 откажет полностью. В конфигурации RAID 10 при сбое одного диска из любой "зеркальной" пары RAID-массив будет работать. RAID 10 значительно увеличивает общую доступность, а также производительность последовательного чтения. Благодаря циклическому принципу зеркально отображаемого тома в RAID 0+1 или RAID 10 обеспечивается высокая скорость сканирования больших таблиц и произвольного чтения.
Массивы RAID 5 обладают высокой производительностью при выполнении операций чтения и записи и хорошо подходят для реализации Интернет- и файл-серверов. Благодаря эффекту чередования по нескольким дискам производительность RAID 5 оказывается высокой в средах с интенсивным чтением. Однако в средах с интенсивной записью она ниже, поскольку для вычисления контрольных сумм применяется процесс "чтение-модификация-запись" (рис. 7). Это особенно заметно в программных RAID-системах. Впрочем, в аппаратных фреймовых и в большинстве модульных массивов контроллер RAID 5 использует кэш-память и специальное оборудование, чтобы снизить эффект вычисления контрольных сумм. Производительность аппаратного массива RAID 5 в средах с интенсивной записью сравнима со скоростью программного массива RAID 0+1. При современной надежности дисковых накопителей (около миллиона часов безотказной работы) тома RAID 0+1 и 1+0 обычно не нуждаются в запасных дисководах для "горячей" замены. Для томов RAID 5 всегда следует иметь запасной дисковод, чтобы обойти потенциальную проблему реконструкции RAID. Впрочем, у всех конфигураций RAID уровней 0, 0+1,1+0 и 5 есть свои достоинства и недостатки.
Рис. 7. Обновление контрольной суммы во время записи.
|
В большинстве случаев именно RAID 1 или RAID 0+1 обеспечивают наилучшую производительность в реальных системах. RAID 3 обеспечивает очень высокую производительность при редких запросах, но при увеличении интенсивности запросов время обслуживания очень быстро нарастает. Это не позволяет рекомендовать RAID 3 для серверов, особенно для серверов баз данных. RAID 5 занимает промежуточное положение по рассмотренным показателям.
В серверах начального уровня, когда на первый план выдвигается вопрос стоимости, обычно используется RAID 1. В этом случае требуется только один дополнительный диск, зеркальный с основным. В серверах, основное требование к которым — высокая производительность, оптимальным решением, возможно, будет RAID 0+1. В большинстве же других случаев RAID 5 обеспечивает достаточно высокую производительность при умеренных затратах. Системы RAID 3 целесообразно применять только в специальных серверах, предназначенных для хранения больших файлов (графика, видео и т. п.). Но и в этом случае RAID 0+1 может обеспечить лучшую производительность. Схематично сравнительные характеристики RAID-систем различных уровней приведены на рис. 8.
Рис. 8. Параметры уровней RAID.
|
Архитектуры RAID
Дисковые массивы могут быть основаны на одной из двух архитектур: программной или аппаратной. Нельзя однозначно сказать, что какая из них лучше. Каждый вариант организации массива удовлетворяет тем или иным потребностям с учетом финансовых возможностей, количества пользователей и используемых приложений. Обе архитектуры базируются на исполнении программного кода. Отличаются они фактически тем, где этот код исполняется — в центральном процессоре компьютера (программная реализация) или в специализированном процессоре на RAID-контроллере (аппаратная реализация).
Главное преимущество программной реализации — низкая стоимость. Но при этом у нее много недостатков: низкая производительность, загрузка центрального процессора дополнительной работой, увеличение шинного трафика. Программно обычно реализуют те уровни RAID, которые не требуют значительных вычислений. Учитывая эти особенности, RAID-системы с программной реализацией используются в серверах начального уровня. С тех пор как в стандартные ОС включена поддержка нескольких уровней RAID (0, 1 и 5), стоимость программной архитектуры практически сведена к нулю.
Аппаратная архитектура RAID отличается большей сложностью, поскольку требует специальных аппаратных компонентов. Контроллер массива, часто называемый RAID-картой, содержит собственный XOR-вычислитель, вспомогательную память, а также каналы SCSI или UDMA. Такая архитектура позволяет достичь существенного выигрыша в производительности. Впрочем, для систем начального уровня, где процессор сервера занят незначительное время, разница между программной и аппаратной архитектурами практически незаметна. Но она достаточно ощутимо проявляется при высокой нагрузке на подсистему ввода-вывода. Соответственно аппаратные реализации RAID дороже программных.
Полностью автономные системы в принципе представляют собой отдельный компьютер, который используется для организации систем хранения информации. Обычно внешний контроллер ставится в отдельную стойку и может иметь большое количество каналов ввода-вывода, в том числе и хост-каналов, что дает возможность подключать к системе несколько хост-компьютеров и организовывать кластерные системы. В системах с автономным контроллером можно реализовать "горячее" резервирование контроллеров. Одним из недостатков подобных систем остается их большая стоимость.