Оптимизация файловой системы 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), и оптимизировать оттуда. Я написал статью о важности выравнивания файловой системы, которая может оказаться полезной для такого рода оптимизации.

Другие вопросы по тегам