Программный RAID-массив в Linux

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

Избыточный массив независимых дисков (RAID) позволяет объединить несколько физических устройств хранения (твердотельных и жестких дисков) в один или несколько логических блоков, или виртуальных устройств хранения. Причинами для создания таких виртуальных устройств хранения могут быть избыточность данных, доступность, производительность или достижение всех целей сразу. Номер уровня RAID описывает сочетание надежности, доступности, производительности и емкости. Например, RAID 0 чередует данные на нескольких устройствах хранения для повышения производительности, а RAID 1 зеркалирует данные на устройствах хранения для повышения доступности и отказоустойчивости. Возможны и другие уровни RAID и их комбинации.

В оригинальной статье о RAID были определены так называемые стандартные уровни RAID, которые используются до сих пор. Для лучшего понимания я кратко рассмотрю их в следующих разделах, а затем представлю команду Linux software RAID «mdadm», мощный инструмент для создания серверов хранения данных Linux.

RAID 0

Этот уровень RAID ориентирован на производительность за счет чередования данных на двух или более устройствах хранения, при этом избыточность данных не обеспечивается. Поэтому при потере устройства хранения, входящего в группу RAID 0, вы, скорее всего, потеряете данные. Однако RAID 0 обеспечивает наилучшую производительность для набора устройств хранения и использует всю емкость устройств для хранения пользовательских данных. На рисунке 1 показана группа RAID 0 из двух устройств. Хотя изображение выглядит как два вращающихся диска, а не твердотельные накопители (SSD), принцип тот же.

Схема RAID 0
Схема RAID 0

Чтение данных также выигрывает от расположения блоков данных. Оно начинается с блока, в котором находятся данные на любом устройстве. При использовании двух устройств следующий блок, обычно на следующем устройстве, может быть прочитан одновременно. Это позволяет увеличить производительность чтения группы RAID в два раза по сравнению с одним устройством.

RAID 0 — это фантастика в част производительности и использованию хранилища. Группа RAID использует все пространство на обоих устройствах хранения, и производительность повышается почти в два раза по сравнению с количеством устройств (например, в два раза для двух устройств хранения) . В программном RAID-массиве Linux в группе RAID 0 может быть столько устройств хранения, сколько вы хотите. Однако если вы потеряете одно из устройств хранения в группе и не сможете полностью восстановить его, вы потеряете данные. Если вы используете RAID 0 и не можете позволить себе потерять данные, обязательно создайте резервную копию.

RAID 1

RAID 1 выполняет зеркалирование данных, полностью ориентируясь на доступность данных. То есть копия данных, которая записывается на одно устройство хранения, также записывается на одно или несколько других устройств хранения. Для хранения копий данных можно использовать даже три или более устройств хранения.

На рисунке 2 показана группа RAID 1 из двух устройств. Обратите внимание, что устройство слева точно такое же, как и справа; то есть они являются зеркалами друг друга.

Схема RAID 1
Схема RAID 1

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

RAID 2-4

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

RAID 5

Этот уровень RAID распределяет данные между устройствами хранения в группе и вычисляет данные четности, которые также распределяются между устройствами хранения. Четность — это простая форма обнаружения ошибок, при которой к строке двоичного кода добавляется бит данных. Для данной двоичной строки вычисляется бит четности, который добавляется к строке. Если часть данных в двоичной строке потеряна, из оставшихся данных и бита четности можно заново вычислить недостающие данные. В RAID 5 данные о четности вычисляются и распределяются по устройствам хранения вместе с данными. Если одно из устройств хранения выходит из строя, данные можно восстановить по информации о четности.

Для группы RAID 5 требуется не менее трех устройств хранения. Если одно из устройств хранения будет потеряно и группа начнет восстанавливать данные по четности, а второе устройство будет потеряно, то вы потеряете данные, поскольку в группу будет записана только одна копия данных по четности.

На рисунке 3 показана группа RAID 5 из четырех устройств. Полосы данных записаны как A, B, C и D и имеют цветовую маркировку. Любой блок с добавлением p означает блок четности, который является частью полосы.

Схема RAID 5.
Схема RAID 5.

Данные записываются на полосу, проходящую через три устройства, а четвертое устройство хранения хранит бит четности данных на полосе. Например, данные записываются на полосу A1, A2, A3. По мере заполнения этой полосы данными вычисляется их четность и записывается на Ap (блок четности).

Когда данные записываются на полосу B, блок четности не помещается на то же устройство, что и полоса A. Блок четности полосы A находится на четвертом устройстве хранения слева. Полоса B помещает блок на третье устройство хранения слева. Процесс продолжается для полос C и D, которые также используют для блока четности другие устройства хранения, чем предыдущая полоса. Таким образом, четность распределяется между устройствами хранения, что снижает вероятность потери данных.

Если вы потеряете устройство хранения данных (например, диск 2), вы потеряете блоки A3, C2 и D2, а также блок четности полосы B (блок Bp). Однако A3 можно восстановить из данных в A1 и A2 вместе с блоком четности Ap. То же самое справедливо и для восстановления C2 и D3 с помощью оставшихся блоков и блоков четности для этой полосы.

Обратите внимание, что вы не потеряли данные на полосе B. Блоки данных B1, B2 и B3 все еще там. Но чтобы не потерять данные, нужно восстановить блок Bp (блок четности полосы B). Чтобы восстановить Bp, нужно пересчитать четность блоков B1, B2 и B3.

Группа RAID 5 позволяет потерять одно устройство хранения и не потерять данные, поскольку либо данные, либо четность для отсутствующих блоков на потерянном устройстве можно найти на оставшихся устройствах. Более того, многие группы RAID 5 включают в себя «горячий резерв». Когда устройство в группе RAID выходит из строя и начинается восстановление недостающих данных, блоки данных записываются на горячий резерв. Если у вас нет горячего резерва, то восстановление не может начаться. Если быстро не установить в сервер еще одно устройство хранения, то в случае выхода из строя второго устройства вы потеряете данные.

Эффективность хранения данных в RAID 5 достаточно высока. В группе из N устройств хранения (N — 1) хранятся данные. Производительность чтения очень высока, поскольку для чтения данных можно использовать более одного устройства. Производительность записи приемлема, поскольку на устройства (N — 1) можно записывать данные так же, как и в RAID 0 (например, записывать полосу данных) .

RAID 6

Подобно RAID 5, две копии информации о четности записываются на два устройства хранения в группе RAID. Этот метод использует больше места для хранения информации о четности, но позволяет пережить потерю двух устройств хранения без потери данных. Обратите внимание, что RAID 6 не входил в первоначальное определение RAID, а был создан позже для решения проблемы отказа второго устройства хранения при перестройке.

На рисунке 4 показана группа RAID 6, для которой требуется минимум четыре устройства. Расположение блоков данных и четности не является уникальным, как в RAID 5, где блок четности смещает одно устройство на следующую полосу. Блоки данных и четности RAID 6 можно располагать по-разному, если группа RAID может продолжать выполнять операции чтения и записи на все виртуальные устройства в группе RAID. Однако вы должны быть уверены, что устройство хранения не предназначено только для хранения данных четности.

<p>Схема RAID 6.</p>

Схема RAID 6.

Характеристики уровня RAID

Уровни RAID обладают определенными характеристиками (табл. 1; N — количество устройств хранения в группе RAID) :

  • Эффективность использования пространства 1 — это максимум (считайте, что это 100%) ;
  • Отказоустойчивость — это количество устройств хранения, которые могут быть потеряны без потери данных;
  • Производительность при чтении и записи указывается относительно одного устройства хранения в группе RAID;
Таблица 1: Характеристики уровня RAID
Таблица 1: Характеристики уровня RAID

В таблице представлена интересная информация. Эффективность использования пространства можно представить в процентах. Например, при четырех устройствах хранения (N = 4) RAID 0 эффективен на 100% (для RAID 0 он всегда равен 100%), RAID 1 — на 1/4 = 0,25 (25%), RAID 5 — на 0,8 (80%), а RAID 6 — на 0,5 (50%).

Из таблицы можно также оценить производительность чтения и записи для различных уровней RAID. В таблице приведена производительность по отношению к производительности одного устройства хранения. При использовании четырех устройств хранения производительность RAID 0 при чтении равна 4 (т. е. в четыре раза больше, чем у одного устройства хранения), а производительность при записи равна 4 (в четыре раза больше, чем у одного устройства хранения). Производительность RAID 1 при чтении равна 4 (в четыре раза больше, чем у одного устройства), а при записи — 1 (производительность одного устройства). Для RAID 5 производительность чтения равна 4, а производительность записи для полного стрипа — 3. RAID 6 немного отличается: производительность чтения равна 4, а производительность записи для полного стрипа — 2.

Вложенный RAID-массив

Хотя это не входит в первоначальное определение RAID, «вложенные" RAID-комбинации можно создавать с помощью программных RAID-инструментов Linux. Примером вложенного уровня RAID может быть RAID 10. В этом случае два уровня RAID являются "вложенными».

Чтобы понять, как устроен вложенный RAID, начните с крайнего правого номера и двигайтесь влево. Для RAID 10 это означает, что RAID "верхнего" уровня — RAID 0. Под этим уровнем находятся группы RAID 1. Чтобы создать такого зверя, нужно взять как минимум два раздела и создать как минимум две группы RAID 1 с четырьмя устройствами хранения (разделами). Затем вы берете эти группы RAID 1 и создаете группу RAID 0. Этот процесс создает группу RAID 10, поверх которой создается файловая система.

На рисунке 5 показана возможная группа RAID 10 из четырех устройств. (Обратите внимание, что в статье Википедии о вложенных уровнях RAID используется обозначение RAID 1+0).

<p>Схема RAID 1+0.</p>

Схема RAID 1+0.

Вложенный RAID позволяет объединить возможности двух уровней RAID. RAID 10 обеспечивает высокую производительность (в два раза выше, чем у RAID 1), но, в отличие от RAID 0, вы можете потерять устройство хранения и не потерять данные благодаря RAID 1 на нижнем уровне. Хотя производительность чтения очень высока, производительность записи не так хороша из-за RAID 1 на нижнем уровне. Однако производительность записи лучше, чем у RAID 1, благодаря RAID 0 на верхнем уровне.

Вы можете легко понять, почему люди используют RAID 50 или RAID 60 для повышения производительности и экономии места на нижнем уровне. Более того, ничто не ограничивает вас уровнями RAID. Вы можете легко создать RAID 100 (знаменитый «Triple Lindy») или даже RAID 500 или RAID 600 с помощью программного RAID в Linux.

Программный инструмент RAID — mdadm

Основным инструментом, используемым для программного RAID в Linux, является mdadm. В онлайновой литературе обсуждается, как использовать mdadm для создания различных уровней RAID, поэтому я не буду рассматривать команды для создания всех уровней RAID; однако я расскажу о RAID 0, RAID 1 и RAID 5.

Для начала предположим, что у вас есть четыре устройства хранения данных, и вы хотите создать группу RAID 0. В целях обсуждения создадим по одному разделу на каждом из устройств. Чтобы создать группу RAID 0, введите:

# mdadm --verbose --create /dev/md0 --level=0 \

--raid-devices=4 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

Эта команда создает множественное устройство (md) в Linux. Системные администраторы часто используют md в начале имени устройства, чтобы указать, что это множественное устройство, но вы можете назвать его как угодно (например, /dev/alt_wesley_crusher_die_die_die — если вы знаете, вы знаете). В данном случае устройство будет /dev/md0. После создания группы RAID 0 вы можете создать на ней файловую систему с /dev/md0 в качестве устройства.

Остальные опции в команде не требуют пояснений. Мне нравится использовать параметр --verbose в случае возникновения проблем. Кроме того, когда я готов развернуть программный RAID в производстве, я перенаправляю вывод в файл, чтобы все задокументировать.

Создание группы RAID 1

Команда mdadm для создания массива RAID 1 выглядит следующим образом:

# mdadm --verbose --create /dev/md0 --level=1 \

--raid-devices=2 /dev/sdc1 /dev/sdd1

Помните, что RAID 1 - это зеркальное отображение двух устройств хранения данных.

Создание группы RAID 5

Создание группы RAID 5 с помощью mdadm очень похоже:

# mdadm --verbose --create /dev/md0 --level=5 \

--raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1

Напомним, что в группе RAID 5 необходимо использовать не менее трех устройств хранения.

Полезная информация

Ряд инструментов и методик поможет вам управлять и контролировать программный RAID. Команда

cat /proc/mdstat

позволяет получить некоторые действительно полезные сведения, такие как "личность" RAID-массива (т. е. уровень RAID) и состояние устройств в группе RAID. Последний пункт очень полезен, так как показывает, не деградирует ли группа RAID (т. е. вы потеряли устройство), а также статус восстановления устройства, если вы восстанавливаете данные или пересобираете устройства хранения.

В прошлом я использовал эту команду в сочетании с командой watch для активного мониторинга состояния RAID-массива, особенно при восстановлении после сбоя устройства хранения.

Основная команда mdadm software RAID имеет несколько полезных опций для получения информации о состоянии и конфигурации RAID-массива. Например,

mdadm -detail

дает отличный результат. Добавление опции --scan сканирует RAID-массивы, предоставляя основную информацию.

Вы также можете использовать команду mdadm с определенным устройством md, чтобы получить много информации о массиве. Например

mdadm --detail /dev/md0

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

Вы можете использовать команду mdadm для управления группой RAID (например, остановить группу, пометить устройство как "сбойное", удалить устройство из группы или добавить в группу запасное устройство хранения). Я рекомендую прочитать man-страницу mdadm, если вы собираетесь использовать программный RAID.

RAID, встроенный в файловую систему

Вы можете создать любую файловую систему на основе нескольких устройств, однако некоторые файловые системы имеют встроенный RAID. Две из них, которые сразу приходят на ум, - это ZFS (OpenZFS) и Btrfs. Здесь я не буду рассказывать об этих файловых системах и использовании RAID с ними. Если вас это заинтересует, то немного поискав, вы найдете много интересного. Однако обязательно читайте последние статьи, поскольку функции и команды могли измениться.

Краткое описание программного RAID

С появлением большого количества ядер процессора и большого объема памяти очень просто использовать программный RAID в Linux для достижения высокой производительности. Вы можете использовать менеджер логических томов (LVM) и программный RAID вместе, чтобы создать очень полезное решение для хранения данных. Детали создания такого решения не являются темой этой статьи, поэтому если вы хотите создать собственное решение для хранения данных, потратьте некоторое время на чтение как можно большего количества информации. Обязательно экспериментируйте и тестируйте, прежде чем запускать что-то в производство. Кроме того, тщательно документируйте все.

Я уверен, что кто-нибудь пришлет мне негативный отзыв, если я не включу этот последний комментарий: RAID - это не решение для резервного копирования. RAID - это производительность и доступность данных, а для надежности данных вам нужно настоящее решение для резервного копирования. Вы предупреждены!

Резюме

Программный инструмент Linux RAID mdadm охватывает все стандартные уровни RAID, которые были описаны в первой статье о RAID. RAID 6 был добавлен позже, чтобы решить проблему хрупкости RAID 5 при выходе из строя устройства хранения. Этот же инструмент позволяет создать любой уровень RAID, какой вы захотите.

Также с помощью mdadm можно создавать вложенные уровни RAID - один уровень RAID поверх другого. Двузначные вложенные уровни RAID, такие как RAID 10, можно создать, сначала создав группы RAID 1, а затем объединив их с RAID 0. Ничто не помешает вам создать три вложенных уровня RAID (например, RAID 100), но, как и в случае с Triple Lindy, степень сложности резко возрастает.

Добавим, что создание и управление программным RAID-массивом в Linux может проводиться дистанционно.

Наша компания IT For Prof специализируется на подобных задачах, включая администрирование серверов на Windows и Linux и создании IT-инфраструкры для бизнеса.

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

Наш сайт: https://itforprof.com/

Начать дискуссию