Повышение производительности с использованием LVM Striping
В области управления хранилищами приоритетом является достижение оптимальной производительности дисков. Стремление к более быстрому доступу к данным, уменьшению задержек и повышению количества операций ввода-вывода (I/O) и пропускной способности привело к использованию передовых техник. Одной из таких является LVM Striping (полосование), мощная функция менеджера логических томов (LVM), которая существенно повышает производительность дисковых томов.
Линейный (Linear) LVM против LVM Striping:
1.1 — Линейный LVM:
Линейная конфигурация, являющаяся стандартным подходом для LVM, подразумевает последовательное добавление нескольких физических томов (дисков) в группу томов (Volume Group). Данные последовательно записываются на эти диски: сначала заполняется один диск, затем следующий, и так далее.
Хотя линейный LVM прост и удобен для расширения хранилищ, он не полностью раскрывает потенциал параллельной обработки и увеличения общей пропускной способности.
1.2 — LVM Striping (Полосование):
Напротив, LVM Striping представляет собой более продвинутый подход, при котором данные распределяются одновременно по нескольким физическим томам. Это создает логический том, охватывающий сразу несколько дисков, что позволяет осуществлять параллельные операции чтения и записи. В результате значительно повышается производительность, что делает LVM Striping особенно привлекательным для систем с высоким уровнем нагрузки ввода-вывода.
Процесс создания полос:
Создание полос:
Данные разделяются на сегменты («полосы»).
Каждая полоса записывается на отдельный диск в составе логического тома.
2. Параллельная запись полос:
Полосы записываются параллельно на несколько физических томов (дисков).
3. Равномерное распределение:
Полосы равномерно распределены по дискам, предотвращая появление узкого места (bottleneck).
4. Увеличение IOPS и пропускной способности:
Благодаря параллельной записи полос LVM Striping существенно увеличивает общую производительность и пропускную способность логического тома.
1.3 — Пример использования:
Рассмотрим пример с тремя дисками, каждый из которых обеспечивает пропускную способность 125 МБ/с:
При использовании LVM Striping суммарная производительность составит 375 МБ/с.
В случае же с линейным LVM, производительность останется равной 125 МБ/с, вне зависимости от количества добавленных дисков.
Настройка Linear LVM и Striping LVM:
В этом разделе мы создадим две группы томов (Volume Groups, VG): одну линейную, вторую — с полосованием, каждая с использованием трёх дисков. Затем создадим логические тома (Logical Volumes, LV), отформатируем и смонтируем их.
2.1 — Исходные данные:
Сервер: AWS EC2 instance типа m4.10xlarge
EBS-диски: 6 штук по 20ГБ (тип GP3, 3000 IOPS, 125MiB/s пропускная способность каждый)
ОС: Amazon Linux 2
Просмотр подключенных дисков:
# lsblk
2.2 — Создание групп томов (VG):
Создадим две группы томов:
# vgcreate vg_linear /dev/sdb /dev/sdc /dev/sdd
# vgcreate vg_striping /dev/sde /dev/sdf /dev/sdg
# vgs
2.3 — Создание линейного логического тома (Linear LVM):
# lvcreate -l 100%FREE -n lv_linear vg_linear
Параметры:
-l 100%FREE — задействовать весь доступный объем VG.
-n lv_linear — имя логического тома.
vg_linear — целевая группа томов.
2.4 — Создание логического тома с полосованием (Striping LVM):
# lvcreate -l 100%FREE -i 3 -I 64k -n lv_striping vg_striping
Параметры:
-l 100%FREE — задействовать весь объем VG.
-i 3 — количество полос (равно числу дисков).
-I 64k — размер полосы.
-n lv_striping — имя логического тома.
vg_striping — целевая группа томов.
2.5 — Проверка созданных LV:
Проверка линейного LV:
# lvdisplay -m /dev/vg_linear/lv_linear
Проверка LV с полосованием:
# lvdisplay -m /dev/vg_striping/lv_striping
Здесь мы можем увидеть различные детали наших настроек.
2.6 — Форматирование и монтирование LV:
# mkfs.xfs /dev/vg_linear/lv_linear
# mkfs.xfs /dev/vg_striping/lv_striping
# mkdir /mnt/linear
# mkdir /mnt/striping
# mount /dev/vg_linear/lv_linear /mnt/linear/
# mount /dev/vg_striping/lv_striping /mnt/striping/
# df -h
LV успешно смонтированы.
3 — Тестирование производительности LV (benchmark):
Для тестирования используем инструмент fio:
# yum install fio -y
3.1 — Тестирование линейного LV:
Чтобы сравнить LV, мы будем использовать файл конфигурации FIO, который поможет нам генерировать трафик на 400м:
# cat fio_config-1.fio
[global]
ioengine=libaio
runtime=60
time_based
direct=1
rw=write
size=10G
bs=512K
rate=400M
numjobs=16
[job1]
filename=/mnt/linear/testfile
Запуск тестирования с созданным конфигом:
# fio fio_config-1.fio
Одновременно с этим в отдельном терминале запустим iostat, чтобы контролировать использование дисков:
# iostat -xdmt 2
Видим, что используется только один диск xvdb со скоростью 125 МБ/с.
Ту же картину нам демонстрирует и fio:
Операции записи были выполнены исключительно на одном диске.
3.2 — Тестирование LV с полосованием:
Теперь снова запустим fio, но изменим параметр filename в файле конфигурации:
filename=/mnt/striping/testfile
Запускаем iostat:
Все три диска работают параллельно, суммарная скорость равна 375 МБ/с (125 x 3).
Аналогичную картинку нам демонстрирует и fio:
Вывод:
LVM Striping является мощным решением для организаций, которые хотят максимально эффективно использовать ресурсы своих хранилищ. Распределяя данные параллельно на несколько дисков, LVM Striping не только значительно увеличивает производительность, но и обеспечивает масштабируемость и гибкость управления хранилищами.
Используйте LVM Striping, чтобы раскрыть потенциал параллельной обработки данных и вывести производительность дисковой подсистемы на новый уровень.