• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Отказоустойчивость и сохранность данных является краеугольным камнем любой IT инфраструктуры. Помимо резервных копий, немаловажным моментом является использование RAID массивов, что позволяет поддерживать сервер в рабочем состоянии, даже если один из дисков вышел из строя. Согласитесь, если у Вас выйдет из строя единственный жесткий диск, на котором храниться жизненно важная информация для функционирования предприятия, последствия могут быть крайне неприятны. Использование RAID массивов позволяет продолжать работу сервера в штатном режиме, пока выполняется замена сбойного жесткого диска, при условии, если Вы используете RAID1 и выше. Существуют как аппаратные, так и программные RAID массивы. В данной статье мы рассмотрим утилиту mdadm, разработанную для управления программными RAID-массивами в Linux.

В Linux можно использовать следующие разновидности RAID:

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

RAID1 (mirroring) - зеркалирование, то есть запись одних и тех же данных одновременно на несколько дисков, что обеспечивает отказоустойчивость при выходе из строя любого количества дисков, пока остаётся хотя бы один работоспособный;

RAID4 - похож на RAID 3, но отличается от него тем, что данные разбиваются на блоки, а не на байты;

RAID5 - массив с обеспечением отказоустойчивости за счет минимальной избыточности (требуется минимум три диска, для отказоустойчивости — четыре диска);

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

В этом примере мы добавим программный массив RAID1 на тестовый сервер Debian с двумя дополнительными дисками для хранения данных.

Утилита присутствует в официальном репозитории и установить её можно просто командой:

 

root@dedicated:~# apt-get install mdadm

 

Примечание: Для удобства, в этом примере используется VPS. Один виртуальный диск размером 10Gb зарезервирован под операционную систему Debian 10, два диска, по 120Gb каждый - под RAID массив. Порядок действий ничем не отличается от работы на физическом сервере, с той разницей, что диски будут иметь названия /dev/sda{b,c}, а не /dev/vda{b,c}.

Содержание:

Создание разделов

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

 

root@dedicated:~# fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7e5e82b2

 

Device    Boot Start   End      Sectors  Size Id Type
/dev/vda1      2048    1953791  1951744  953M 82 Linux swap / Solaris
/dev/vda2  *   1953792 20969471 19015680 9.1G 83 Linux

 

Disk /dev/vdb: 120 GiB, 128849018880 bytes, 251658240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/vdc: 120 GiB, 128849018880 bytes, 251658240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 

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

 

root@dedicated:~# dd if=/dev/zero of=/dev/vdb bs=5M count=1024
root@dedicated:~# dd if=/dev/zero of=/dev/vdc bs=5M count=1024
root@dedicated:~# mdadm --zero-superblock /dev/vdb1
root@dedicated:~# mdadm --zero-superblock /dev/vdc1

 

После этого удаляем ссылки на разобранный RAID-массив в /etc/mdadm/mdadm.conf (в Debian) или в /etc/mdadm.conf (в CentOS), если они делались там ранее.

Создание RAID-массива

Массив RAID1 мы будем собирать из следующих дисков:

/dev/vdb

/dev/vdb

Для начала, уже известной нам командой fdisk создадим партиции на разделах. Данную операцию необходимо выполнить два двух дисков: /dev/vdb и /dev/vdc

 

root@dedicated:~# fdisk /dev/vdb

 

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

 

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x96923181.

 

Command (m for help): n
Partition type
  p   primary (0 primary, 0 extended, 4 free)
  e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-251658239, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-251658239, default 251658239):

 

Created a new partition 1 of type 'Linux' and of size 120 GiB.

 

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

 

Создав партиции, приступим к созданию непосредственно RAID:

 

root@dedicated:~# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/vdb1 /dev/vdc1

 

Операция займет некоторое время, в зависимости от типа дисков, которые вы используете и их объема. Проверить процесс создания в реальном времени Вы можете командой: cat /proc/mdstat. После успешного создания массива мы увидим следующий результат:

 

root@dedicated:~# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 vdc1[1] vdb1[0]
  125761536 blocks super 1.2 [2/2] [UU]
  bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: 

 

Перезагружаемся.

Снова проверяем результат:

 

root@dedicated:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md127 : active (auto-read-only) raid1 vdc1[1] vdb1[0]
  125761536 blocks super 1.2 [2/2] [UU]
  bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: 

 

По какой-то причине название RAID массива изменилось с md0 на md127. На производительность это никак не влияет, но для порядка, это можно поправить следующим образом. Для начала узнаем UUID нашего массива:

 

root@dedicated:~# mdadm --detail --scan
ARRAY /dev/md/dedicated:0 metadata=1.2 name=dedicated:0
UUID=24ef0763:12d8c289:4f5e4658:14648eab

 

Затем в файле /etc/mdadm/mdadm.conf добавляем следующие строки и сохраняем файл:

DEVICE /dev/vdb1 /dev/vdc1

CREATE owner=root group=disk mode=0660 auto=yes

ARRAY /dev/md0 UUID=24ef0763:12d8c289:4f5e4658:14648eab

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

 

root@dedicated:~# mdadm -S /dev/md127
root@dedicated:~# mdadm -As
root@dedicated:~# reboot

 

Создание файловой системы на RAID-массиве

Отлично, массив RAID1 создан, приступим к созданию файловой системы ext4 поверх него. В массиве RAID1 понятие chunk size отсутствует, т.к. это размер блока, который по очереди пишется на разные диски, потому создать FS можно простой командой:

 

root@dedicated:~# mkfs.ext4 /dev/md0

 

В реальном времени наблюдаем процесс создания файловой системы, пока не увидим done:

 

mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 31440384 4k blocks and 7864320 inodes
Filesystem UUID: d1ae19aa-c8ef-47ca-89d6-b18d53ebdce8
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  4096000, 7962624, 11239424, 20480000, 23887872

 

Allocating group tables: done 
Writing inode tables: done  
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

 

Создадим точку монтирования для RAID-массива и примонтируем массив:

 

root@dedicated:~# mkdir /mnt/data
root@dedicated:~# mount /dev/md0 /mnt/data

 

Каталог будет примонтирован до первой перезагрузки системы. Чтобы закрепить это, необходимо поправить файл /etc/fstab добавив в него следующую строку:

 

UUID=d1ae19aa-c8ef-47ca-89d6-b18d53ebdce8 /mnt/data ext4 nodiratime,noatime,defaults,discard,commit=120 1 2

 

узнать UUID нашего массива можно с помощью команды blkid

 

root@dedicated:~# blkid
……
/dev/md0: UUID="d1ae19aa-c8ef-47ca-89d6-b18d53ebdce8" TYPE="ext4"
……

После чего обязательно перезагружаемся, проверяем что операционная система загрузилась и примонтированый RAID виден. Такое случается редко, но человеческих фактор исключать нельзя, если Вы допустили в файле /etc/fstab ошибку и система не загрузилась, вы сможете её оперативно исправить в безопасном режиме. По горячим следам это сделать просто и быстро, чем если это всплывет через много месяцев при незапланированной перезагрузке, а вы находитесь где-то в автомобильной пробке.

Мониторинг состояния RAID-массива

Первым делом установим утилиту smartmontools и настроим оповещения на email:

 

root@dedicated:~# apt-get install smartmontools

 

Затем в файле /etc/default/smartmontools раскоментируем строку: start_smartd=yes
А в файле /etc/smartd.conf добавим следующее:

 

/dev/sda -a -s (S/../../(2|4)/01|L/../../6/01) -m admin@yourdomain.com.ua -M diminishing

 

и перезагрузим службу:

 

root@dedicated:~#  /etc/init.d/smartmontools restart

 

Замена сбойного диска в RAID-массиве

Информация о целостности RAID-массива находится в файле /proc/mdstat
В случае выхода диска из строя, при условии что Вы настроили мониторинг, картина будет следующая:

 

root@dedicated:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : inactive raid1 vdb1[0] vdc1[1]
  125761536 blocks super 1.2 [2/1] [U_]
  bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: 

 

Наш массив состоит из двух дисков. [2/1] [U_] означает, что один из дисков вышел из строя и raid в режиме inactive. При рабочем raid-массиве это значение будет иметь вид: [2/2] [UU]

Допустим, наш диск /dev/vdc вышел из стоя. Нам необходимо пометить его как «сбойный» и удалить его с массива:

 

root@dedicated:~# mdadm --manage /dev/md0 --fail /dev/vdc1
root@dedicated:~# mdadm --manage /dev/md0 --remove /dev/vdc1

 

Вынимаем старый диск с сервера. Если ваши диски установлены в корзины и материнская плата поддерживает hotswap, это можно выполнить без остановки сервера, «на горячую». После того, как новый диск будет в сервере, копируем разметку следующей командой (с «живого» диска на новый):

 

root@dedicated:~# sfdisk -d /dev/vdb | sfdisk /dev/vdc

 

И добавляем его в наш массив md0:

 

root@dedicated:~# mdadm --manage /dev/md0 --add /dev/vdc1

 

Процесс синхронизации массива проверяем уже знакомой нам командой, пока не увидим следующий результат:

 

root@dedicated:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb1[0] vdc1[1]
  125761536 blocks super 1.2 [2/2] [UU]
  bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: 

 

Получить более развернутую информацию о raid массиве вы можете выполним следующую команду:

 

root@dedicated:~# mdadm --detail /dev/md0

 

Заключение

Для настройки программного RAID массива не требуется покупать дополнительное оборудование в виде дорогостоящих raid контроллеров. Утилита mdadm является отличным бесплатным инструментом для построения отказоустойчивой инфраструктуры и риск потери данных сводится к минимуму. Наш дата-центр предлагает полный спектр услуг хостинга. У нас Вы можете арендовать выделенный сервер и наша круглосуточная служба технической поддержки поможет с его настройкой.

Дата: 08.11.2019
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA