# Raidы, в чем разница?

Нурлан Мухамедьевич Тлеушев

RAIDы, в чем разница?


Данная статья предназначена для "новичков", начавших изучение "RAIDирования".

В man-страничках, в принципе, все расписано, но английский язык для всех жителей постсоветского пространства не является родным, а потому не все могут "правильно" прочитать информацию.


Итак, RAID (Redundant Array of Independent Disks - "избыточный" дисковый массив независимых дисков). Делятся на hardware и software типы (базирующиеся на специальном контроллере и созданные программными средствами соответственно).

RAIDы служат для повышения надёжности хранения данных и/или для повышения скорости чтения/записи информации. Они бывают нескольких типов (0,1,0+1,1+0,3,5,6);

RAID 0 - представлен как не отказоустойчивый дисковый массив;

RAID 1 - определён как зеркальный дисковый массив;

RAID 3,4,5 - используют чётность для защиты данных от одиночных неисправностей;

RAID 6 - используют чётность для защиты данных от двойных неисправностей;

RAID 1+0, 0+1 - комбинация двух видов RAID.


Рассмотрим каждый RAID в отдельности на примере software RAID в Solaris Volume manager (в прошлом Solstice Disk Suite).

Для начала необходимо определиться, что "slice" это один логический раздел диска, занимающий от нуля байт до полной емкости диска. Другими словами "диск" - понятие "большее", чем "слайс". В ОС Solaris диск можно "разбить" на 7 слайсов, а при помощи нового ПО Solaris Volume Manager слайсы можно разбить на softpartitions. Единицей RAIDа является именно слайс, поэтому его и будем рассматривать в примерах.

Кроме того, в системе уже должны быть реплики metadb, примененные ядром ОС.

Важно: не рекомендуется использовать несколько слайсов одного физического диска для использования их в одном RAIDе (в целях тренировки подумайте сами почему?).


Рассмотрим идеальный случай, когда диски "разнесены" по разным контроллерам (это дает дополнительную избыточность):

Системные диски

c0t0d0 и c1t0d0

Дополнительные диски

c2t0d0, c2t1d0, c2t2d0, c2t3d0 - расположены, например, в массиве типа SUN Storage 3120

c3t0d0, c3t1d0, c3t2d0,c3t3d0 - расположены, например, в массиве типа SUN Storage 3120


Предположим, что:

- имена meta-устройств с d10 по d60 уже заняты под "RAID1" системных дисков;

- все дополнительные диски, используемые для создания RAID одинаковой емкости для каждого RAID;

- все дополнительные диски "разбиты" на один слайс, занимающий всю емкость диска (например, s7).


Создать реплики можно так:

1а. при инсталляции машины предусмотрите слайс (номер 7, как советует Компания SUN Microsystems, я же использую слайс номер 3, в силу сложившейся традиции) размером около 64 Мб (как написано в документации - не менее 4 Мб)

1б. если ОС уже установлена, то загрузившись с компакт диска аккуратно "переразбейте" системный диск и его будущее "зеркало" так, чтобы у вас получился свободный слайс нужной емкости.

2. в ОС (уже не с компакт диска) выполнить команды:

metadb -fac 3 c0t0d0s3 c1t0d0s3

init 6


В данном примере создаются по 3 реплики metadb на третьих слайсах системного диска и его будущего "зеркала", после чего машина перезагружается для "применения" реплик. После перезагрузки можно создать "зеркало" системных дисков. Как это делается см. в другой статье (http://lit.lib.ru/editors/t/tleushev/text_0020.shtml).

Теперь можно говорить о других видах RAID (для системных дисков software RAID рекомендуется использовать только RAID-1).


Базовые уровни RAID


RAID 0 - concat слайсов

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

В случае выхода из строя любого из компонентов теряется вся информация, хранившаяся на RAID0, что сразу становится известно всем пользователям.

Производительность такого RAID будет равна производительности одного диска.

Емкость такого RAID равна суммарной емкости дисков.

Создать этот RAID0 можно с количеством слайсов от 1 и более (также можно увеличивать кол-во дисков "на ходу" с одновременным увеличением дискового пространства).

Для получения двух виртуальных дисков (RAID0), одинаковой емкости выполняем команды:

metainit d70 4 1 c2t0d0s7 1 c2t1d0s7 1 c2t2d0s7 1 c2t3d0s7

metainit d80 4 1 c3t0d0s7 1 c3t1d0s7 1 c3t2d0s7 1 c3t3d0s7

newfs /dev/md/rdsk/d70

newfs /dev/md/rdsk/d80

fsck /dev/md/rdsk/d70

fsck /dev/md/rdsk/d80


RAID 0 - stripe слайсов

В этом случае вся информация, записываемая на RAID "размазывается" по компонентам одновременно (представьте некий тягач с прицепами, расположенными в один горизонтальный ряд и экскаватор с ковшом, ширина которого равна ширине прицепов тягача).

В случае выхода из строя любого из компонентов теряется вся информация, хранившаяся на RAID0, что сразу становится известно всем пользователям.

Производительность такого RAID равна суммарной производительности дисков (т.е. гипотетически, чем больше шпинделей, тем выше скорость RAID).

Емкость такого RAID равна суммарной емкости дисков.

Создать RAID0 можно с количеством слайсов от 2 и более.

Для получения двух виртуальных дисков (RAID0), одинаковой емкости выполняем команды:

metainit d70 1 4 c2t0d0s7 c2t1d0s7 c2t2d0s7 c2t3d0s7

metainit d80 1 4 c3t0d0s7 c3t1d0s7 c3t2d0s7 c3t3d0s7

newfs /dev/md/rdsk/d70

newfs /dev/md/rdsk/d80

fsck /dev/md/rdsk/d70

fsck /dev/md/rdsk/d80


RAID 1 - mirror слайсов

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

Производительность при считывании получаем большую, чем с одного диска за счёт распараллеливания запросов, скорость записи остается практически прежней.

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

Один минус - для хранения одного и того же объема информации платим в 2 раза больше денег.

Большой плюс - отказоустойчивость, кроме того, можно использовать диск "горячей замены" - hotspare.

Создать такой RAID можно с количеством слайсов от 2 и более.

Из имеющихся восьми дисков можно сделать 4 зеркала из двух дисков каждое, желательно "разнести" половинки по контроллерам (можно сделать и трехвэйное зеркало, у которого имеются свои преимущества, особенно для проведения резервного копирования, но это уже дороже).

metainit d71 1 1 c2t0d0s7

metainit d72 1 1 c3t0d0s7

metainit d70 -m d71 d72

metainit d81 1 1 c2t1d0s7

metainit d82 1 1 c3t1d0s7

metainit d80 -m d81 d82

metainit d91 1 1 c2t2d0s7

metainit d92 1 1 c3t2d0s7

metainit d90 -m d91 d92

metainit d101 1 1 c2t3d0s7

metainit d102 1 1 c3t3d0s7

metainit d100 -m d101 d102

newfs /dev/md/rdsk/d70

newfs /dev/md/rdsk/d80

newfs /dev/md/rdsk/d90

newfs /dev/md/rdsk/d100

fsck /dev/md/rdsk/d70

fsck /dev/md/rdsk/d80

fsck /dev/md/rdsk/d90

fsck /dev/md/rdsk/d100


RAID 3,4,6

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


RAID 5

Здесь информация тоже "размазывается", но своеобразно - с использованием "четности".

В отличии от "зеркала" денег здесь нужно меньше - жертвуя ради избыточности ёмкостью всего одного диска из массива, мы получаем защиту от выхода из строя любого (одного) из винчестеров тома.

При записи информации на RAID5 тратятся дополнительные системные ресурсы на дополнительные вычисления, а при чтении имеется выигрыш (по сравнению с отдельным винчестером), в связи с тем, что потоки данных с нескольких накопителей массива распараллеливаются, кроме того можно использовать диск "горячей замены" - hotspare, (даже рекомендуется).

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

Создать RAID5 можно с количеством слайсов от 3 и более.

Из имеющихся восьми дисков можно сделать 1 или 2 RAID5 (в каждом должно быть не менее трех слайсов).

metainit -r d70 c2t0d0s7 c2t1d0s7 c2t2d0s7 c2t3d0s7

metainit -r d80 c3t0d0s7 c3t1d0s7 c3t2d0s7 c3t3d0s7

или

metainit -r d70 c2t0d0s7 c2t1d0s7 c2t2d0s7 c2t3d0s7 c3t0d0s7 c3t1d0s7 c3t2d0s7 c3t3d0s7

Либо можно сделать RAID5 с hotspare диском (дисками).

metainit hsp001 c2t3d0s7 c3t3d0s7

metainit -r d70 c2t0d0s7 c2t1d0s7 c2t2d0s7 c2t3d0s7 -h hsp001

metainit -r d80 c3t0d0s7 c3t1d0s7 c3t2d0s7 c3t3d0s7 -h hsp001


Комбинированные уровни


RAID 0 - конкатенация страйпов (актуально для двух разных типов дисков)

metainit d70 2 4 c2t0d0s7 c2t1d0s7 c2t2d0s7 c2t3d0s7 4 c3t0d0s7 c3t1d0s7 c3t2d0s7 c3t3d0s7

Очень не производительный RAID и не распространен (насколько мне известно). Пример привел лишь потому, что такой пример есть в man-страничке.


RAID 1+0 - страйп или конкатенация зеркал (ТАК я никогда не делал для практических целей)

Страйп зеркал будет быстрым как страйп и безопасным как зеркало.

Конкат зеркал будет безопасным, но не быстрым.


RAID 0+1 - зеркало страйпов или конкатов (обычно ТАК зеркало делают уже "сильно потом" после создания страйпа или конката, для отказоустойчивости)

Зеркало страйпов и быстро и безопасно.

Зеркало конкатов будет безопасным, но не быстрым.


Вообще, при создании файловой системы на диске или на RAID можно "рулить" размером блока, опциями чтения (geometric, direct all reads to the first submirror) и записи (serial, simultaneously).

Можно и нужно использовать hotspare диски (кроме RAID0).

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

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


При возникновении вопросов можете писать напрямую tnm_2004@mail.ru

Удачи.