Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
03:52, 13 мая 2013

Софт рейд массив из двух жестких дисков на CentOS 6.4.

Blog post image

В этой короткой записке написано как сделать софт рейд на примере CentOS 6.4

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

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

Рассмотрим два случая создания программного рейд массива:

1. Системный диск c уже работающей CentOS + Рейд массив из двух одинаковых жестких диска.

Blog post image

 

2. Чистая установка CentOS на два диска присутствующих в системе.

Blog post image

 

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

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

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

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

Первый случай: Системный диск + Рейд массив из двух одинаковых жестких диска.

Blog post image

Допустим у нас имеется сервер с одним жестким диском, этот диск системный. Мы добавили к нему еще два жестких диска объемом 35 Гбайт для организации программного рейда.

 

Краткое содержание:

1. Определяем какие жесткие диски будут в рейде

2. Создаем рейд массив из двух HDD

3. Записываем файловую систему в рейд

4. Создаем конфиг файл утилиты mdadm

5. Монтируем рейд в системе

6. Автомонтирование рейд массива при загрузке системы

 

1. Определяем какие жесткие диски будут в рейде

Чтобы определить какие жесткие диски есть в системе, введем комманду:

# fdisk -l | grep "Disk /dev/sd"

Disk /dev/sda: 18589 MB, 8589934592 bytes

Disk /dev/sdb: 1008589 MB, 8589934592 bytes

Disk /dev/sdc: 1008589 MB, 8589934592 bytes

Здесь мы видим что у нас в компьютере имеется три физических жестких диска, это:

1. sda

2. sdb

3. sdc

Первый жесткий диск sda является системным, его размер 18 Гбайт, а два добавленных пустые. Из них будем делать рейд.

 

2. Создаем рейд массив из двух HDD

Установим mdadm:

# yum install mdadm -y

Для организации рейд массива зеркального типа (уровень 1).

Вводим следующею команду для создания рейд массива:

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Continue creating array? y

Здесь мы не указываем определенные разделы, так как у нас их нет. Поэтому мы сразу написали имена дисков участвующих в массиве sdb и sdc. Разделы пишутся так sdb1 или sdb2.

Рассмотрим данную команду по ближе:

-- level               - задает тип рейд массива, это может быть 0, 1, 5, 6.

--raid-devices    - задает количество дисков участвующих в организации рейда

/dev/sdb           - первый жесткий диск

/dev/sdc            - второй жесткий диск

/dev/md0          - собственно, имя создаваемого массива

Проверяем, создался ли массив:

# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdc[1] sdb[0]

8387572 blocks super 1.2 [2/2] [UU]

 

3. Записываем файловую систему в рейд

Разметим пространство создав файловую систему на нашем рейде, в качестве ФС (файловая система) берем ext4:

# mkfs.ext4 /dev/md0

 

4. Создаем конфиг файл утилиты mdadm

Теперь, создадим конфиг файл для утилиты mdadm:

# mdadm --detail --scan --verbose > /etc/mdadm.conf

Осталось не много, при монтируем наш рейд в системе, чтобы в него могли писать программы.

 

5. Монтируем рейд в системе.

Создадим точку монтирования, каталог /raid:

# mkdir /raid

При монтируем рейд в каталог /raid:

# mount /dev/md0 /raid

Второй способ монтирования, он более безопасный:

# vi /etc/rc.d/rc.local

/bin/mount -t ext4 /dev/md0 /raid

 

6. Автомонтирование рейд массива при загрузке системы

Чтобы ваш рейд всегда автоматически монтировался при загрузке ОС, добавьте строчку в файл /etc/fstab:

/dev/md0 /raid ext4 defaults 1 2

 

Заключение:

Итого мы имеем программный рейд массив уровня 1 (зеркалирование) на двух дисках, помимо отдельного системного диска. Это будет полезно при работе гипервизора или когда нужно хранить отдельно  важные данные.

Второй случай: Рейд массив из двух дисков имеющихся в системе

Blog post image

Этот случай самый распространенный, именно его используют многие админы.

Допустим у нас новенький сервер, в нем установлено два жестких диска объемом 35 Гб.

Рейд массив в этом случае будет создаваться во время установки операционной системы.

Кратко надо будет сделать следующее:

1. Во время установки операционной системы создать одинаковые разделы на двух жестких дисках:

  • swap - раздел подкачки, размер 1 Гб
  • RAID partition - раздел RAID, выделить под него все оставшееся место за вычетом 1Гб

2. Объеденить оба жестких в рейд массив

3. Установить систему на рейд массив

4. Установить загрузчик на диск sdb

5. Настроить конфигурационный файл загрузчика, чтобы загрузка шла в случае неудачи с диска который еще работает.

Вроде все ясно.

Приступим....

 

Покажу как это делается в картинках. Вставляем DVD диск с CentOS в компьютер и перезагружаемся.

Blog post image

Нажимаем первый пункт, установка или обновление.

Blog post image

Нажимаем кнопку "SKIP"

Blog post image

Нажимаем NEXT

Blog post image

Нажимаем NEXT

Blog post image

Нажимаем NEXT

Blog post image

Нажимаем NEXT

Blog post image

Нажимаем NEXT

Blog post image

Нажимаем NEXT

Blog post image

Вводим пароль суперадминистратора

Blog post image

Выбираем "Create Custom Layout"

Blog post image

Видим два жестких диска sda и sdb, нажимаем CREATE

Blog post image

Выбираем Standart Partition и жмем Create.

 

Blog post image

Ставим галку напротив диска sda как на картинке.

Выбираем File System Type = swap и указываем размер 1000 MB

Заполняем и нажимаем кнопку OK, после чего создаться раздел SWAP объемом 1000 MB

Теперь создадим корневой раздел /.

Blog post image

Нажимаем опять кнопку Create. Выбираем RAID Partition как на картинке.

Blog post image

Ставим галочку на sda диске, выбираем File System type = software RAID.

А также ставим выбираем Fill to maximim alowable size и нажимаем кнопку OK.

Все, мы создали два раздела на первом жестком диске sda. Аналогичную операцию  требуется проделать со вторым жестким диском sdb.

 

Blog post image

Нажимаем кнопку Create. Выбираем второй жесткий диск sdb (галка). Создаем на нем раздел Swap, объемом в 1000 МБ.

Галочка Fixed size.

Size  - 1000

Нажать кнопку OK.

Blog post image

Нажимаем кнопку Create, выбираем File System Type- Software RAID

Галка - Fill to maximum allowable size

Кнопка - OK

Теперь у нас созданы одинаковые разделы двух жестких дисках.

Осталось объеденить эти два диска в RAID массив.

Blog post image

Blog post image

Нажимаем как обычно по кнопке Create, выбираем RAID Device.

Blog post image

Mount Point:  /

File System Type:   Ext4

RAID Device: md0

RAID Level: RAID1

Галочки напротив sda и sdb дисков.

Кнопка OK.

 

Blog post image

Все рейд массив создан. Осталось установить на него операционную систему.

Blog post image

Нажимаем по кнопке Next.

Blog post image

Нажимаем Write changes to disk.

Blog post image

Нажимаем Next, загрузчик Grub будет установлен на диск sda. После установки ОС, мы скопируем его на второй диск sdb,

чтобы система грузилась с любого диска в случае краха одного из них.

Blog post image

Минимальная инсталяция. Нажимаем Next

Blog post image

Процесс установки системы.

Blog post image

Установка завершена, нажмите Reboot для перезагрузки.

Blog post image

Вводим логин root

Пароль свой.

Проверим состояние массива:

# cat /proc/mdstat

Копируем загрузчик Grub на второй жесткий диск sdb.

Вводим в терминале:

# grub

grub> find /boot/grub/stage1

hd (0,1)

hd (1,1)

grub> root (hd0,1)

grub> setup (hd0)

grub> root (hd1,1)

grub> setup (hd1)

grub> quit

Этими командами мы скопировали загрузчик на второй жесткий диск sdb.

Теперь подправим конфигурационный файл grub.conf

# vi /boot/grub/grub.conf

Добавляем в этот файл  строчку:

fallback=1

Этот параметр позволит загрузчику в случае неудачи загрузки с диска sda, загрузится с диска sdb.

А также надо удалить или закоментить строку:

splashimage=(hd0,1)/boot/grub/splash.xpm.gz

Но осталось еще добавить следующие строчки, чтобы Grub мог загрузится со второго жесткого диска:

title CentOS (2.6.32-358.el6.i686)

root (hd1,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

 

Вот полный файл grub.conf

 

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You do not have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /, eg.

#          root (hd0,1)

#          kernel /boot/vmlinuz-version ro root=/dev/md0

#          initrd /boot/initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

fallback=1

#splashimage=(hd0,1)/boot/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.32-358.el6.i686)

root (hd0,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

title CentOS (2.6.32-358.el6.i686)

root (hd1,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

Обязательно закоментируйте строчку:

splashimage=(hd0,1)/boot/grub/splash.xpm.gz

В противном случае будете видеть следующею ошибку если один из дисков умрет:

failed to read image

Все, теперь все должно работать! Проверьте чтобы в настройках Grub у вас были одинаковые настройки для двух дисков, в противном случае будут проблемы с загрузкой.

Чтобы массив быстрее перестраивался, можно внести специальную настройку:

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

Обязательно, после всех проделанных операций, проверяйте как ведет себя массив без  одного жесткого диска. Грузится ли система с одним диском.

Замена диска в массиве

Бывает так, что со временем диск в массиве умирает. Он может просто не определятся в BIOS (CentOS) или может чудить из за механических поломок или плохой поверхности.

Процедура замены в случае сгоревшего диска следующая:

1. Выключаете сервер

2. Вынимаете сгоревший диск и устанавливаете новый

3. Создаете разделы на новом диске как на выжившем работающем носителе.

4. Добавляете новый диск в массив.

5. Копируете загрузчик grub

 

Давайте рассмотрим последовательность замены диска если команда рапортует нам о нехватке диска в массиве - [U_]

# cat /proc/mdstat

cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda2[0]
7875520 blocks super 1.0 [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>

Как видим одного диска - нет!

Теперь сама процедура:

1. Выключаете сервер

# shutdown -h now

2. Вынимаете сгоревший диск и устанавливаете новый

Открутите винты и отсоедините шлейфы - уберите сгоревший диск.

За место него установите заведомо исправный диск.

3. Создаете разделы на новом диске как на выжившем работающем носителе.

Включите сервер и введите команду:

# sfdisk -d /dev/sda | sfdisk /dev/sdb --force

Этой командой мы копируем разделы с диска sda на диск sdb. Диск sda - это выживший, а диск sdb - это новый диск напарник.

Чтобы система увидела новые разделы диска sdb введите:

# sfdisk -R /dev/sdb

4. Добавляете новый диск в массив.

Далее, добавляйте новый диск в массив:

# mdadm /dev/md0 --add /dev/sdb2

5. Копируете загрузчик grub

Вводим в терминале:

# grub

grub> find /boot/grub/stage1

hd (0,1)

hd (1,1)

grub> root (hd0,1)

grub> setup (hd0)

grub> root (hd1,1)

grub> setup (hd1)

grub> quit

 

Процедура замены в случае если S.M.A.R.T. выдает неутишительный отчет  с диагнозом - диск скоро умрет:

1. Убираете диск из массива

2. Выключаете сервер

2. Вынимаете сгоревший диск и устанавливаете новый

3. Создаете разделы на новом диске как на выжившем работающем носителе.

4. Добавляете новый диск в массив.

5. Копируете загрузчик grub

 

Здесь все тоже самое что и в первом случае, за исключением одного но - точнее первого пункта:

Чтобы убрать диск из массива введите команду:

# mdadm --manage /dev/md0 --fail /dev/sdb

Здесь мы указали что диск sdb сбойный, и что с ним работать уже нельзя.

Далее можно удалить его из массива:

# mdadm /dev/md0 -r /dev/sdb

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

 

Краткий FAQ:

1. Массив создался под именем md0 с двумя разделами sda2 и sdb2, после отключения одного из дисков и дальнейшего включения массивов стало два md0 и md127. В первом md0 диск раздел sda2, а во втором md127 раздел диск sdb2.

Решение:

Отключаем массив md127:

# mdadm -S /dev/md127

Добавляем диск sdb2 в массив md0:

# mdadm /dev/md0 --add /dev/sdb2

Проверяем состояние массива:

# cat /proc/mdstat

Должна быть синхронизация...

Или, если первый способ не прошел, значить делаем так:

Создаем новый конфиг mdadm:

mdadm --detail --scan --verbose > /etc/mdadm.conf

Такое может быть если нету конфигурационного файла /etc/mdadm.conf

Ну и потом как обычно, делаем настройку для автомонтирования при загрузки системы:

Открываем файл /etc/fstab

и добавляем строчку для монтирования:

/dev/md0 /raid ext4 defaults 1 2

2. Как скопировать загрузчик Grub с одного диска на другой в массиве. Чтобы система грузилась при неудачной загрузки с одного из дисков.

Решение:

Находим разделы дисков:

# grub

> find /boot/grub/stage1

hd (0,1)

hd (1,1)

Копируем загрузчик:

> root (hd0,1)

> setup (hd0)

> root (hd1,1)

> setup (hd1)

> quit

3. Не правильно при монтировал массив в /etc/fstab, теперь файловая система упала в режим Read Only, что делать?

Появляются ошибки при редактировании файл /etc/fstab вроде этих:

W10: Warning: Changing a readonly file

E45: 'readonly' option is set (add !to override)

Решение:

Главное не паниковать,  если не правильно при монтирован массив, то файловая система просто перейдет в режим Read Only.

Нам необходимо смонтировать файловую систему в режиме записи, для этого вводим следующею команду:

# mount -o remount,rw /

 

И далее исправить /etc/fstab так чтобы массив нормально функционировал.

 

4. Как сделать не большой тюнинг массива уровня 5?

Решение:

Добавляем в /etc/rc.d/rc.local строчку:

echo 8192 > /sys/block/md0/md/stripe_cache_size

 
0
4722
1