Оптимизация файловой системы ext2 для использования на устройстве LVM + RAID? Размер шага, ширина полосы, размер LVO IO
Я строю новый сервер базы данных и пытаюсь убедиться, что у меня есть максимально правильные настройки. Хранилище базы данных - диски Western Digital SAS 22x1500 об / мин в RAID10 во внешнем корпусе SAS с двумя контроллерами RAID. Сначала я создал только один том в массиве SAS, отформатированный в ext2. Я вычислил ширину полосы и ширину следующим образом:
- chunk_size = 128 Кб
- block_size = 4 Кб
- total_disks = 22
- data_disks = 11
- stride = chunk_size / block_size = 128 кб / 4 кб = 32 кб
- ширина полосы = ширина * data_disks = 32 КБ * 11 = 352 КБ
Я дал значения Stride и Stripe-Width для mkfs.ext2, когда создавал файловую систему.
Затем я попробовал другую настройку, с которой начинается мой вопрос. Я создал два тома в массиве SAS, каждый с отдельным "основным" контроллером. При экспорте на хост я использовал LVM2, чтобы инициализировать их как физические тома, создал группу томов, а затем передал '--stripes 2' в lvcreate, чтобы разделить тома. Цель этого состояла в том, чтобы распределить нагрузку ввода-вывода между обоими контроллерами для, как мы надеемся, более высокой производительности.
В документации по "передовым методам" для массива SAS есть раздел, в котором говорится, в отношении размера сегмента LUN:
При использовании диспетчера томов для сбора нескольких логических модулей системы хранения в логический
Группа томов (VG) Volume Manager (LVM), ширина полосы ввода / вывода распределяется по всем> сегментам всех дисков данных во всех LUN. Скорректированная формула будет иметь следующий вид: размер сегмента LUN = ширина полосы ввода / вывода LVM / (количество дисков данных /LUN * количество LUN /VG)
Теперь группа томов в массиве SAS имеет 22 диска, 11 из которых являются дисками данных, и два LUN. Группа томов на хосте имеет два физических тома (LUN), и оба LUN обращаются к одним и тем же дискам с данными. Поэтому, учитывая размер сегмента LUN 128 Кб, я бы вычислил ширину полосы ввода / вывода LVM как
- 128 = LVM_Stripe_Width / (11 * 2)
- 128 * 22 = LVM_Stripe_Width
- 2816 = LVM_Stripe_Width
или же
- 128 = LVM_Stripe_Width / (11 * 1)
- 128 * 11 = LVM_Stripe_Width
- 1408 = LVM_Stripe_Width
Затем это приводит меня к вопросу о ширине полосы и ширины полосы для mkfs.ext2: он рассчитывается так же, как и в начальной настройке, или теперь он другой из-за слоя LVM? Станет ли это
- chunk_size = 128 Кб
- block_size = 4 Кб
- total_disks = 2
- data_disks = 2
- stride = chunk_size / block_size = 128 кб / 4 кб = 32 кб
- ширина полосы = ширина * data_disks = 32 КБ * 2 = 64 КБ
где
- total_disks = 2
происходит от '--stripes 2', чтобы создать?
Спасибо,
Kendall
1 ответ
Я мог бы предложить проверить этот ответ для идей. Я предоставил некоторую обратную связь относительно выравнивания xfs, и кто-то прокомментировал ext3. Это может дать вам некоторые подсказки.
Кроме того, перед выравниванием файловой системы убедитесь, что ваш объем выровнен по размеру полосы. Это можно сделать путем правильного определения размера метаданных и оптимизации размера экстента. Вот пример:
pvcreate -M2 --metadatasize 2048K --metadatacopies 2 <raw_device>
vgcreate --physicalextentsize 256M --autobackup y vg10 <pv_device>
Вы начинаете оптимизацию не с того места - вам нужно начать с размера страницы, который использует ваша база данных (16 КБ для InnoDB (MySQL / MariaDB), 8 КБ для PostgreSQL), и оптимизировать оттуда. Я написал статью о важности выравнивания файловой системы, которая может оказаться полезной для такого рода оптимизации.