Введение
RAID устройства представляют собой набор дисков, объединенных по особым правилам в один виртуальный дисковый носитель. В операционной системе Sun Solaris используется довольно мощный программный продукт для организации RAID устройств - Solaris Volume Manager (SVM). Начиная с Solaris 9 (в Solaris 8 это был отдельный продукт – Solstice Disk Suite), он интегрирован в систему и предоставляет механизмы по созданию не только RAID устройств, но и расширяет функциональные возможности дисковой системы в Sun Solaris.
Не из редких случаев рядовому администратору требуется настроить Software-RAID с нуля, только потому что аппаратного RAID не имеется. И многие задаются вопросом "Почему в серверах компании SUN нет встроенного RAID-контроллера, а в x86 платформах он присутствует ?" На этот вопрос мне помог ответить Юрий Воинов, сертифицированный специалист и инструктор Sun Solaris 10 и Oracle DB.
"Ответ состоит из нескольких пунктов.
1. Компоненты и устройства Sun достаточно быстродействующие и дорогие, чтобы можно было позволить их встраивать "про запас" и "чтобы было". Даже при покупке, например, cерверов Sun x64 с дисками SAS контроллер SAS необходимо устанавливать отдельно (при заказе серверов с дисками SAS он комплектуется по умолчанию). Это не тайваньский ширпотреб, производимый миллионами, куда достаточно впаять китайский чип стоимостью 15 долларов.
2. Sun производит оборудование общего назначения и далеко не во всех случаях требуется наличие аппаратных RAID-контроллеров. У Sun, например, есть парадигма Sun Cluster, согласно которой RAID-контроллер целесообразно размещать на стороне дисковой системы, не на стороне процессорных модулей. Это разумно со всех точек зрения, так как аппаратный RAID серверного класса-сложное самостоятельное устройство, как и было сказано - значительно более дорогое, чем, скажем, ATA/SATA RAID.
3. В соответствие с вышеуказанной парадигмой, в системные блоки устанавливаются высокоскоростные контроллеры ввода-вывода (SCSI/FC-AL etc.), к которым и подключаются оконечные устройства хранения, могущие содержать аппаратные RAID-контроллеры.
В этой связи Sun давно выносит аппаратные RAID-контроллеры в специализированные системы хранения:
http://www.sun.com/storagetek/index.jsp
Почему нет и скорей всего никогда не будет RAID-контроллеров в системных блоках Sun?
Ответ прост. Нецелесообразно. Системные диски зеркалируются средствами Solaris Volume Manager, имеют достаточно статичную структуру и достаточно высокое быстродействие, а также легко и (в силу относительно небольшого объема) быстро резервируются и восстанавливаются штатными системными средствами. Некоторые рабочие станции Sun комплектовались аппаратными RAID-контроллерами SCSI. Но, насколько мне известно, сейчас эти модели сняты с производства."
Собственно после разумного и внятного объяснения, мы перейдем к теме создания RAID массивов.
Часть 1. RAID 0.
RAID 0 (Striping) — Представляет собой совокупность двух или более жестких дисков, которые объединяются в единое логическое устройство, с отсутствием избыточности. Информация разбивается на блоки данных (Ai) и записывается на оба/несколько диска поочередно. За счет этого существенно повышается производительность(от количества дисков зависит кратность увеличения производительности), но страдает надежность всего массива. При выходе из строя любого из входящих в RAID 0 винчестеров полностью и безвозвратно пропадает вся информация. Обычно данный тип RAID настраивают в целях повышения производительности дисковой системы, либо для увеличения ее объема.
RAID-0 устройства можно создавать на всю партицию диска и на отдельные части файловой системы: /(root), /usr, /var, /opt, swap и т.д.
Существует три функциональных механизма работы RAID-0:
- Распределение (stripe)
- Склеивание (concatenation)
- Склеивание «распределенных» томов (concatenated stripe)
База данных состояния метадевайсов.
В самом начале перед процессом создания массивов нам нужно создать так называемую Metadevice State Database (далее - MSD), в которой хранится конфигурация и состояние RAID-устройств в системе. Если система не сможет прочитать информацию с данных баз, то все данные о RAID устройствах исчезнут, а вместе с ними и вся хранившаяся информация. Для хранения MSD используются небольшие отдельные разделы, например на 7-ом слайсе. В этих разделах может храниться несколько копий MSD, которые называются State Database Replicas. Одна SR (реплика) занимает приблизительно 4-5 Мбайт. Рекомендуется создавать как минимум 2 таких реплики, но чем больше тем лучше.
Создание метабаз производится командой metadb, а мониторинг состояния этих баз производится командой metastat. В качестве примера мы возьмем 3 диска и создадим на каждом из них по 3 реплики в отдельном 7-ом слайсе, объемом 15 Мб (3x5=15).
suncow # metadb -a -f -c 3 c0t0d0s7 c0t1d0s7 c1t0d0s7Создание RAID-0 Stripe Volumes.
suncow # metadb
flags first blk block count
a u 16 8192 /dev/dsk/c0t0d0s7
a u 8208 8192 /dev/dsk/c0t0d0s7
a u 16400 8192 /dev/dsk/c0t0d0s7
a u 16 8192 /dev/dsk/c0t1d0s7
a u 8208 8192 /dev/dsk/c0t1d0s7
a u 16400 8192 /dev/dsk/c0t1d0s7
a u 16 8192 /dev/dsk/c1t0d0s7
a u 8208 8192 /dev/dsk/c1t0d0s7
a u 16400 8192 /dev/dsk/c1t0d0s7
При механизме распределения данные рассеиваются по всем частям тома одновременно (параллельно), что позволяет получить повышение производительности дисковой системы. При создании распределенных систем необходимо помнить, что их невозможно создавать на уже существующей файловой системе. Нужно вначале сделать backup файловой системы, затем сконструировать логическое устройство, и восстановить сохраненные данные.
Не создавайте логические тома больше 1Тб, если вы запускаете ПО Solaris с 32-ух битным ядром или используемая версия вашей ОС Solaris 9 4/03.
Теперь давайте а качестве примера возьмем эти 3 диска и объединим их в Stripe. Для этого мы с помощью format также приготовили отдельные слайсы на каждом из дисков по 6 Гб.
suncow # metainit d10 1 3 c0t0d0s0 c0t1d0s0 c1t0d0s0Данной командой мы создали RAID-устройство d10 как 1 отдельное устройство (цифра 1) с 3 дисками (цифра 3).
d10: Concat/Stripe is setup
Проверяем что у нас получилось.
suncow # metastat d10Создание RAID-0 Concatenation Volumes.
d10: Concat/Stripe
Size: 12514635 blocks (6.0 GB)
Stripe 0: (interlace: 1024 blocks)
Device Start Block Dbase Reloc
c0t0d0s0 32130 Yes Yes
c0t1d0s0 32130 Yes Yes
c1t0d0s0 32130 Yes Yes
Device Relocation Information:
Device Reloc Device ID
c1d1 Yes id1,cmdk@AMaxtor_2F020J0=F14BT74E
При механизме «сoncatenation» (склеивание), данные записываются в первую часть логического тома, а по его заполнении – во вторую, и т.д. Очевидно, что в данном случае никакого повышения производительности операций ввода/вывода не происходит, так как данные записываются последовательно. RAID-0 в режиме «сoncatenation» оптимально подходит для ситуаций, когда необходимо организовать дисковый раздел определенного размера, собрав его из нескольких частей. Важной особенностью данного механизма, является возможность динамически расширять размер логического тома, добавляя новые части дисков. Кроме того, эти действия можно проводить на «активной» файловой системе без нарушения ее работоспособности.
suncow # metainit d30 3 1 c0t0d0s1 c0t1d0s1 c1t0d0s1Этот пример создает склеиваемое устройство d30, которое состоит из трех "stripes" (цифра 3), каждая из единого слайса (цифра 1 в передней части каждого слайса). Давайте проверим наше устройство.
d30: Concat/Stripe is setup
suncow # metastat d30Давайте смонтируем данное устройство в системе.
d30: Concat/Stripe
Size: 12627090 blocks (6.0 GB)
Stripe 0:
Device Start Block Dbase Reloc
c0t0d0s1 0 No Yes
Stripe 1:
Device Start Block Dbase Reloc
c0t1d0s1 0 No Yes
Stripe 2:
Device Start Block Dbase Reloc
c1t0d0s1 0 No Yes
Device Relocation Information:
Device Reloc Device ID
c1d1 Yes id1,cmdk@AMaxtor_2F020J0=F14BT74E
suncow # newfs /dev/md/dsk/d30Для добавления еще одного диска в наш сoncatenation-volume нужно выполнить команду metattach:
/dev/md/rdsk/d30: Unable to find Media type. Proceeding with system determined parameters.
newfs: construct a new file system /dev/md/rdsk/d30: (y/n)? y
Warning: 13230 sector(s) in last cylinder unallocated
/dev/md/rdsk/d30: 12627090 sectors in 836 cylinders of 240 tracks, 63 sectors
6165.6MB in 120 cyl groups (7 c/g, 51.68MB/g, 6272 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 105936, 211840, 317744, 423648, 529552, 635456, 741360, 847264, 953168,
11649472, 11755376, 11861280, 11967184, 12073088, 12178992, 12284896,
12390800, 12496704, 12602608
suncow # mkdir /data
suncow # mount /dev/md/dsk/d30 /data/
suncow # df -h /data/
Filesystem size used avail capacity Mounted on
/dev/md/dsk/d30 5.9G 6.0M 5.9G 1% /data
suncow # metattach d20 c1t1d0s1И после пересоздания файловой системы у нас будет диск объемом в 8 Гб.
d20: component is attached
Теперь удалим наши RAID-устройства
suncow # umount /dataЧасть 2. RAID 1.
suncow # metaclear -a
d20: Concat/Stripe is cleared
RAID 1 (Mirroring — «зеркало»). Обеспечивает приемлемую скорость записи и выигрыш по скорости чтения за счет распараллеливания запросов. Имеет высокую надежность - работает до тех пор пока функционирует хотя бы один диск в массиве. Недостаток заключается в том, что приходится выплачивать стоимость двух жёстких дисков, получая полезный объем одного жёсткого диска (классический случай, когда массив состоит из двух дисков).
Стандартное «зеркало» состоит из двух частей: «главного зеркала» и «вторичного зеркала». Вы можете добавить еще одно либо два дополнительных «вторичных зеркала» и использовать их для backup-а системы. Таким образом, можно «на горячую» производить архивирование файловой системы, организованной механизмом RAID-1
SVM поддерживает два вида RAID-1 устройств:
- RAID-0+1 – технология зеркалирования «распределенных» томов
- RAID-1+0 – технология распределения «зеркальных» томов
В случае использования технологии RAID-0+1, выход из «строя» одной из частей «распределенного» тома повлечет за собой нарушение работы всего «вторичного зеркала».
Пример организации технологии RAID-0+1 представлен на следующем рисунке:
В отличие от RAID-0+1, технология 1+0 более защищена от возможных сбоев при выходе из «строя» одного из компонентов в любом зеркале, нарушения работы не произойдет. Как видно на следующем рисунке, RAID-1+0 представляет собой совокупность зеркальных томов, объединенных в «распределенное» логическое устройство:
Создание RAID-1.
Давайте рассмотрим пример построение RAID-1 на основе настройки зеркала для корневого раздела / (root). Для сокращения нашего времени и объема статьи мы не будем углубляться в описание настройки деления слайсов. Хочу лишь отметить что слайсы должны быть не меньше друг друга по объему, а также отмечу сразу что метабазы уже созданы.
В начале нам потребуется создать RAID-0 Concatenation устройства которые в последствии мы объединим в RAID-1 Mirror. За пример возмем 2 диска с нулевыми слайсами которые мы и будем зеркалить.
Создаем устройство d11 из слайса c0d0s0 на котором находится корневой раздел системы
suncow # metainit -f d11 1 1 c0d0s0Создаем устройство d12 из слайса c1d1s0 который зазеркалируем с корневым разделом системы.
d11: Concat/Stripe is setup
suncow # metainit -f d12 1 1 c1d1s0Создаем устройство d10 как Mirror-device и добавляем в него устройство d11.
d12: Concat/Stripe is setup
suncow # metainit d10 -m d11Теперь надо указать нашей системе что корневой раздел это /dev/md/dsk/d10. Для это мы воспользуемся командой metaroot.
d10: Mirror is setup
suncow # metaroot d10Теперь посмотрим что конкретно поменяла эта команда в нашей системе.
suncow # cat /etc/vfstab | grep mdОтпраляем систему на reboot для ее загрузки с устройства d10 и возможности добавления в зеркало d10 второго устройства d12.
/dev/md/dsk/d10 /dev/md/rdsk/d10 / ufs 1 no -
suncow # tail /etc/system | grep md
rootdev:/pseudo/md@0:0,12,blk
suncow # init 6Теперь добавляем устройство d12 в наше зеркало
suncow # metattach d10 d12И смотрим результат состояния устройств.
d10: submirror d12 is attached
suncow # metastat d10Как мы видим все прошло успешно и в данный момент проходит синхронизация нашего зеркала. Теперь нужно установить загрузочную область (bootblk) на устройство d12 для возможности загружаться с него.
d10: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d12
State: Resyncing
Resync in progress: 4 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 1048707 blocks (512 MB)
d11: Submirror of d10
State: Okay
Size: 10635030 blocks (5.1 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0d0s0 0 No Okay Yes
d12: Submirror of d10
State: Resyncing
Size: 10635030 blocks (5.1 GB)
Stripe 1:
Device Start Block Dbase State Reloc Hot Spare
c1t1s0 0 No Okay Yes
Device Relocation Information:
Device Reloc Device ID
c0d0 Yes id1,cmdk@AST380011A=5JV3A9CR
c1d1 Yes id2,cmdk@AST345093B=5LJ34KKE
Установить bootblk можно с помощью команды installboot:
Для sparc-платформы команда будет выглядеть так:
suncow # installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1d1s0
Для х86-платформы немного по другому:
suncow # installboot /usr/platform/`uname -i`/lib/fs/ufs/pboot \
/usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1d1s2
Теперь осталось лишь прописать в OpenBoot (ok) альтернативный вариант загрузки. Сперва надо определмть физическое имя для нашего раздела c1d1s0.
suncow # ls -l /dev/rdsk/c1d1s0Теперь переходим в командный режим OpenBoot
lrwxrwxrwx 1 root root 47 Dec 28 09:05 /dev/rdsk/c1d1s0 ->../../devices
/pci@1c,600000/scsi@2/sd@1,0:e,raw
suncow # init 0Для удобства создаем удобный alias для физического раздела
ok nvalias mirror /pci@1c,600000/scsi@2/disk@1,0:eСмотрим в каком порядке выставлена загрузка
ok printenv boot-deviceУказываем новый порядок загрузки
boot-device= disk net
ok setenv boot-device disk mirror netГрузимся с зеркального раздела для проверки загрузки.
boot-device= disk mirror net
ok boot mirrorТакже можно использовать утилиту eeprom для конфигурации OpenBoot. Данный вариант подходит если вы находитесь далеко от сервера либо вам нежелательна остановка сервисов и ПО.
suncow # eeprom nvalias mirror /pci@1c,600000/scsi@2/disk@1,0:eВ случае какого либо рода сбоя основного диска, система автоматически загрузится с резервного раздела.
suncow # eeprom nvalias mirror /pci@1c,600000/scsi@2/disk@1,0:e
suncow # setenv boot-device disk mirror net
boot-device= disk mirror net
Для задачи настроить зеркала на все рабочие разделы (например /, /var, /usr, /opt итд), советую воспользоваться командой prtvtov. Например ниже приведенная команда перенесет таблицу разбиения первого диска на второй.
suncow # prtvtoc /dev/rdsk/c0t0d0s2 | fmthard –s - \Эта операция экономит вам время без использования утилиты format.
/dev/rdsk/c1t1d1s2
Давайте теперь представим что вам нужно удалить то зеркало которое мы только что настроили. Для начала там нужно вывести из зеркала то устройство которое мы подсоединили.
suncow # metadetach d10 d12Указываем системе «boot»-устройство и перезагрузим ее:
d10: submirror d12 is detached
suncow # metaroot /dev/dsk/c0d0s0Удаляем зеркало d10 и ассоциированное с ним RAID-0 устройство d11:
suncow # init 6
suncow # metaclear -r d10Удаляем RAID-0 устройство d12:
d10: Mirror is cleared
d11: Concat/Stripe is cleared
suncow # metaclear d12Часть 3. RAID 5.
d12: Concat/Stripe is cleared
Cамый популярный из уровней, в первую очередь благодаря своей экономичности. Жертвуя ради избыточности емкостью всего одного диска из массива, мы получаем защиту от выхода из строя любого из винчестеров тома. Данный тип устройств очень похож на технологию RAID-0, но, в отличие от
«распределенных» томов, содержит специальную область на каждом диске с данными контроля четности одного из компонентов тома.
На запись информации на том RAID 5 тратятся дополнительные ресурсы, так как требуются дополнительные вычисления, зато при чтении (по сравнению с отдельным винчестером) имеется выигрыш, потому что потоки данных с нескольких накопителей массива распараллеливаются.
Если по какой-либо причине компонент RAID-5 системы выходит из «строя», то
данные, которые были на нем, автоматически восстановятся на основании информации с других компонентов тома. Для того чтобы данный механизм успешно функционировал, количество дисков, объединяемых в RAID-5, должно быть больше трех. Если вы не используете Hot Spare Pools (пул дисков «горячей» замены), то система может восстановить только один поврежденный компонент тома. Суммарный размер RAID-5 тома равен количеству дисков, объединенных в том, уменьшенному на размер одного дискового носителя.
RAID-5 нельзя использовать для разделов: /(root), /usr и swap, а также для уже
существующих файловых систем.
Создание RAID-5.
RAID-5 соберается довольно легко. Достаточно выполнить всего лишь одну команду:
suncow # metainit d20 -r c1t0d0s2 c2t0d0s2 c3t0d0s2Собственно все. А добавляются новые диски в рабочий RAID-5 аналогично тому как это делалось с зеркальными устройствами с помощью команды metattach:
d45: RAID is setup
suncow # metastat d20
d20: RAID
State: Okay
Interlace: 32 blocks
Size: 10080 blocks
Original device:
Size: 8087040 blocks
Device Start Block Dbase State Hot Spare
c1t0d0s2 330 No Okay
c2t0d0s2 330 No Okay
c3t0d0s2 330 No Okay
suncow # metattach d20 c4t0d0s2Замена поврежденных томов в RAID-5 устройстве осуществляется с помощью механизма пулов «горячей» замены либо в «ручную», используя команду metareplace:
d20: column is attached
suncow # metareplace d20 c3t0d0s2 c3t1d0s2Hot Spare Pools (пулы «горячей» замены). Пулы «горячей» замены предоставляют возможность повысить надежность функционирования RAID-1 и RAID-5 устройств. Они представляют собой набор дисковых частей, которые по мере необходимости используются вместо поврежденных частей RAID-тома. Когда происходит ошибка в работе RAID, система просматривает пул и выбирает доступные и подходящие по размеру предварительно заготовленные «разделы замены». Найдя подходящий раздел, она помечает его как “In-Use”, включает в RAID-том и проводит синхронизацию данных. Вы можете создавать и изменять пулы, назначать их разным RAID устройствам, но сами эти устройства могут ассоциироваться только с одним объявленным пулом. RAID устройства используют пулы до тех пор, пока поврежденные части не
d20: device c3t0d0s2 is replaced with c3t1d0s2
будут заменены. После этого ресурс пула освобождается, устанавливается в состояние “Available” и может использоваться снова.
Создаются пулы с помощью команды metainit:
suncow # metainit hsp001 c2t2d0s2 c3t2d0s2Добавить диски в существующий пул можно так
hsp001: Hotspare pool is setup
suncow # metastat hsp001
hsp001: 1 hot spare
c2t2d0s2 Available 16800 blocks
c3t2d0s2 Available 16800 blocks
suncow # metahs -a hsp001 /dev/dsk/c3t0d0s2Если у нас создано несколько пулов, и мы хотим добавить данный диск во все имеющиеся у нас пулы «горячей» замены, то необходимо добавить опцию –all:
hsp001: Hotspare is added
suncow # metastat hsp001
hsp001: 1 hot spare
c2t2d0s2 Available 16800 blocks
c3t2d0s2 Available 16800 blocks
c3t0d0s2 Available 16800 blocks
suncow # metahs -a -all /dev/dsk/c3t0d0s2После того как пулы созданы, их необходимо назначить RAID-устройствам, которые будут ими пользоваться в случае необходимости. Добавим к созданному нами зеркалу d10, точнее к его компонентам d11 и d12, пул «горячей» замены — hsp001:
hsp001: Hotspare is added
hsp002: Hotspare is added
hsp003: Hotspare is added
suncow # metaparam -h hsp001 d11Для RAID-5 процедура ассоциации с пулом «горячей» замены будет выглядеть следующим образом:
suncow # metaparam -h hsp001 d12
suncow # metastat d10
d10: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d12
State: Okay
d11: Submirror of d10
State: Okay
Hot spare pool: hsp001
d12: Submirror of d10
State: Okay
Hot spare pool: hsp001
suncow # metaparam -h hsp001 d20Если необходимо изменить пул, который используется для RAID-устройства, то
suncow # metastat d20
d20: RAID
State: Okay
Hot spare pool: hsp001
...
выполнить это можно с помощью команды metaparam и опции –h:
suncow # metastat d20А открепить пул можно так
d20: RAID
State: Okay
Hot spare pool: hsp001
...
suncow # metaparam -h hsp002 d20
suncow # metastat d20
d20: RAID
State: Okay
Hot spare pool: hsp002
...
suncow # metastat d20Вот собственно и все что я хотел рассказать в этой заметке о построении RAID в операционой системе Sun Solaris 10. Эта статья была для меня не только как закрепление собственных знаний, но и благодаря другим публикациям я усвоил для себя кое что новое и надеюсь что эта статья послужит вам только пользой.
d20: RAID
State: Okay
Hot spare pool: hsp002
...
suncow # metaparam -h none d20
suncow # metastat d20
d20: RAID
State: Okay
Hot spare pool:
...
Используемая литература
1. Solaris 10. “Solaris Volume Manager Administration Guide”.
(http://docs.sun.com)
2. Solaris Volume Manager. Конфигурирование RAID устройств”.
(http://www.opennet.ru/docs/RUS/svm_raid/svm.pdf)
1 комментарий:
Гы-гы-гы! Ну если SF V440/V445 - это "рабочая станция"...;-)
Отправить комментарий