Отказоустойчивость и сохранность данных является краеугольным камнем любой 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}.
Содержание:
- Создание разделов
- Создание RAID-массива
- Создание файловой системы на RAID-массиве
- Мониторинг состояния RAID-массива
- Замена сбойного диска в RAID-массиве
- Заключение
Создание разделов
Утилитой 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