Установка Ubuntu server на raid1

В данной статье, мы произведем установку Ubuntu server 16.04 на raid1. Для начала рассмотрим принцип действия программного raid в Ubuntu server. В аппаратном raid контроллере единицей массива является диск. В программном raid, единицей массива является раздел.
u16-raid1-001 У нас есть два диска, sda и sdb. Мы хотим объединить их в raid1. Поскольку единицей программного raid массива является раздел, а не диск, нужно создать необходимое количество разделов на диске. Не стоит забывать о том, что диски должны быть идентичны, как и созданные на них разделы. Мы создали по два раздела sda1, sda2 и sdb1, sdb2 соответственно. На следующем этапе мы объединяем разделы sda1 и sdb1 в логическое устройство md0. Разделы sda2 и sdb2 в логическое устройство md1. Иными словами мы создали два raid массива md0 и md1. Следующим шагом мы указываем тип файловой системы и точку монтирования раздела. В установщике Ubuntu это выглядело бы так:
u16-raid1-002 Можно сделать вывод, что одно raid устройство, может содержать только один раздел. Иными словами, если нам нужно создать пять разделов, у нас будет создано пять md устройств.

Теперь разберем это на практике. Имеется сервер с тремя идентичными дисками. Нужно собрать raid1 из двух дисков, а третий использовать в качестве горячей замены. Во время установки Ubuntu server доходим до раздела разметки дисков и выбираем ручную разметку.

u16-raid1-1

Выбираем первый диск, жмем «Enter».

u16-raid1-2

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

u16-raid1-3

После создания разделов на дисках выбираем пункт «Настройка программного RAID».

u16-raid1-4

Нажимаем «Да».

u16-raid1-5

Создаем MD устройство.

u16-raid1-6

Выбираем тип raid массива.

u16-raid1-7

В нашем raid1 будет 2 активных раздела.

u16-raid1-8

И один раздел для горячей замены.

u16-raid1-9

Указываем активные разделы.

u16-raid1-10

И раздел для горячей замены.

u16-raid1-11

Сохраняем изменения.

u16-raid1-12

Нажимаем «Закончить».

u16-raid1-13

Выбираем раздел созданного raid массива, жмем Enter для его разметки.

u16-raid1-14

Жмем на «Использовать как».

u16-raid1-15

Выбираем файловую систему «Ext4», и точку монтирования «/». Жмем «Настройка раздела закончена».

u16-raid1-16

Жмем «Закончить разметку и записать изменения на диск».

u16-raid1-17

Создавать отдельное MD устройство для пространства подкачки (swap) не имеет смысла. В конце установки мы создадим для этих целей отдельный файл, на уже имеющемся разделе.

u16-raid1-18

Подтверждаем запись изменений на диск, и продолжаем установку системы.

u16-raid1-19

По завершению установки добавим swap файл и выставим на него права

# fallocate -l 1G /swap
# chmod 600 /swap
# ls -lah /swap
-rw------- 1 root root 1,0G авг 16 11:56 /swap

Пометим файл как пространство подкачки и подключим его к системе

# mkswap /swap
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
без метки, UUID=a6bd4f31-33cd-4a72-9922-090f4b9309e2
# swapon /swap

Посмотреть сведения о swap файле можно следующими командами

# swapon --show
NAME TYPE SIZE USED PRIO
/swap file 1024M 0B -1
# free -h
total used free shared buff/cache available
Память: 975M 68M 759M 4,5M 147M 743M
Подкачка: 1,0G 0B 1,0G

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

# cp /etc/fstab /etc/fstab.bak
# echo '/swap none swap sw 0 0' | sudo tee -a /etc/fstab
/swap none swap sw 0 0

Устранение ошибки «ALERT!   UUID=… does not exist.»

К сожалению в Ubuntu server 16.04 присутствует баг, в результате которого raid массив не работает должным образом. Когда из массива вылетает один диск, при загрузке системы мы получаем ошибку
u16-raid1-alert

Для того чтобы система загрузилась с имеющегося диска нужно выполнить следующие команды

(initramfs) mdadm --run /dev/md0
(initramfs) exit

Чтобы исправить данную ошибку нужно:

Добавить файл /etc/initramfs-tools/scripts/init-premount/delay_mounting со следующим содержанием

sleep 10

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

Добавляем файл /etc/initramfs-tools/scripts/local-top/mdadm со следующим содержанием

mdadm --run /dev/md0

Здесь мы указываем наши md устройства. Каждое новое устройство указывается с новой строки аналогичным образом.

Делаем файлы исполняемыми

# chmod +x /etc/initramfs-tools/scripts/init-premount/delay_mounting
# chmod +x /etc/initramfs-tools/scripts/local-top/mdadm

Обновляем образ начальной загрузки

# update-initramfs -u

Администрирование raid массива

Состояние inactive

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

# mdadm /dev/md0 --assemble --scan

Если массив является загрузочным, то нужно будет загрузиться с диска восстановления чтобы выполнить эту команду.

Плановая замена дисков

Определяем состояние raid массива командой

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sda1[0]
10475520 blocks super 1.2 [2/2] [UU]

Массив md0 находится в состоянии active, т.е. работает в штатном режиме. Массив имеет уровень raid1, и состоит из разделов sda1 и sdb1. Оба раздела исправны  [2/2] [UU].

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

# mdadm /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2](F) sda1[0]
10475520 blocks super 1.2 [2/1] [U_]

Теперь раздел sdb1 помечен как неисправный об этом сигнализирует буква (F). В массиве один активный раздел sda1 [2/1] [U_].

Удаляем неисправный раздел из массива

# mdadm /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda1[0]
10475520 blocks super 1.2 [2/1] [U_]

Раздел sdb1 пропал из массива. Теперь можно выключить сервер и произвести замену диска sdb.

Посмотреть список доступных дисков и их разделов можно командой

# fdisk -l | grep sd
Диск /dev/sda: 10 GiB, 10737418240 байтов, 20971520 секторов
/dev/sda1 2048 20969471 20967424 10G fd Автоопределение Linux raid
Диск /dev/sdb: 10 GiB, 10737418240 байтов, 20971520 секторов

В системе есть два диска, sda c разделом sda1, входящим в состав raid и поменянный sdb без раздела.

По скольку разделы на дисках должны быть идентичны, скопируем таблицу разделов с диска sda на диск sdb

# dd if=/dev/sda of=/dev/sdb
20971520+0 записей получено
20971520+0 записей отправлено
10737418240 байт (11 GB, 10 GiB) скопирован, 458,78 s, 23,4 MB/s

Если снова набрать fdisk -l | grep sd, мы увидим что появился раздел sdb1

# fdisk -l | grep sd
Диск /dev/sda: 10 GiB, 10737418240 байтов, 20971520 секторов
/dev/sda1 2048 20969471 20967424 10G fd Автоопределение Linux raid
Диск /dev/sdb: 10 GiB, 10737418240 байтов, 20971520 секторов
/dev/sdb1 2048 20969471 20967424 10G fd Автоопределение Linux raid


Добавим раздел sdb1 в массив

# mdadm /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

Проверим состояние синхронизации

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sda1[0]
10475520 blocks super 1.2 [2/1] [U_]
[==>..................] recovery = 10.7% (1131200/10475520) finish=3.7min speed=41896K/sec

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sda1[0]
10475520 blocks super 1.2 [2/2] [UU]

Все готово!  Массив состоит из двух разделов sda1 и sdb1. Оба раздела исправны [2/2] [UU].

Выход из строя одного из дисков

В ситуации, когда один из дисков массива выходит из строя, в выводе команды cat /proc/mdstat его раздел будет помечен буквой (F). Последовательность действий по замене неисправного диска будет такая же как описано разделе «Плановая замена дисков» начиная с удаления неисправного раздела из массива.

Добавление дисков горячей замены

Чтобы добавить в массив диск горячей замены, нужно определить название диска командой fdisk -l, затем скопировать на диск таблицу разделов с любого исправного диска в массиве командой dd, и добавить новый раздел в массив.

В выводе cat /proc/mdstat мы увидим

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[3](S) sdb1[2] sda1[0]
10475520 blocks super 1.2 [2/2] [UU]

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

# cat /proc/mdstat

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[3] sdb1[2](F) sda1[0]
10475520 blocks super 1.2 [2/1] [U_]
[============>........] recovery = 62.7% (6571264/10475520) finish=0.3min speed=174736K/sec

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[3] sdb1[2](F) sda1[0]
10475520 blocks super 1.2 [2/2] [UU]

Расширение массива

Для расширения количества разделов массива нужно иметь доступные разделы горячей замены. На пример у нас есть массив состоящий из двух активных разделов. Мы хотим расширить массив до трех активных разделов. В таком случае нужно добавить диск горячей замены и выполнить команду

# mdadm /dev/md0 --grow --raid-devices=3
raid_disks for /dev/md0 set to 3

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[3] sdb1[2] sda1[0]
10475520 blocks super 1.2 [3/2] [UU_]
[>....................] recovery = 3.5% (371520/10475520) finish=3.1min speed=53074K/sec

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[3] sdb1[2] sda1[0]
10475520 blocks super 1.2 [3/3] [UUU]

Теперь массив состоит из трех активных разделов sda1, sdc1 и sdd1. Все разделы исправны [3/3] [UUU].

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

Для того чтобы получать по почте оповещения о состоянии массива нужно установить smtp клиент, как вариант msmtp

# apt install msmtp msmtp-mta

Первый пакет устанавливает msmtp, второй нужен для замены MTA по умолчанию (sendmail) на msmtp.

Создаем конфигурационный файл для msmtp

# nano /etc/msmtprc

defaults
tls on
tls_starttls on
tls_certcheck off

account yandex
host smtp.yandex.ru
port 587
protocol smtp
auth on
from user@yandex.ru
user user@yandex.ru
password ********

account default: yandex

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

Проверить работу msmtp можно командой

# echo "test" | msmtp -d admin@yourcompany.com

Если все прошло успешно, нужно указать адрес получателя в /etc/mdadm/mdadm.conf

MAILADDR admin@yourcompany.com

Перезапускаем сервис mdadm

# service mdadm restart

Отправим тестовое сообщение на ящик указанный в настройках /etc/mdadm/mdadm.conf

# mdadm --monitor --scan -1 --test

На этом настройку мониторинга можно считать оконченной. Если какой-либо из дисков массива выйдет из строя, на указанный в настройках email незамедлительно придет оповещение, отражающее статистику из /proc/mdstat.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *