Назад | Перейти на главную страницу

Оптимизация хранения 10-20 миллионов файлов на RAID5 (в настоящее время используется LVM + XFS)

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

Что у меня сейчас:

На этом томе в основном хранится около 10 миллионов файлов (максимум 20 МБ в будущем) размером от 100 до 2 МБ. Это более точное распределение диапазонов размеров файлов (в K) и чисел в диапазоне:

       4    6162
       8      32
      32      55
      64   11577
     128    7700
     256    7610
     512     555
    1024    5876
    2048    1841
    4096   12251
    8192    4981
   16384    8255
   32768   20068
   65536   35464
  131072  591115
  262144 3411530
  524288 4818746
 1048576  413779
 2097152   20333
 4194304      72
 8388608      43
16777216      21

Файлы в основном хранятся на уровне 7 тома, например:

/volume/data/customer/year/month/day/variant/file

В этих папках обычно ~ 1-2К файлов, иногда меньше, иногда до 5-10К (редкие случаи).

Ввод / вывод не такой тяжелый, но я испытываю зависания, когда нажимаю на него немного сильнее. Например:

Запуск следующего cron один раз в час приводит к зависанию всего сервера на несколько секунд и может даже нарушить работу службы (запись новых данных), поскольку генерируются тайм-ауты ввода-вывода:

find /volume/data/customer/ -type f -iname "*.ext" -mmin +60 -delete
find /volume/data/customer -type d -empty -delete

Я также наблюдаю низкую скорость записи (несколько МБ / с) при записи файлов в указанных выше диапазонах. При записи файлов большего размера все идет нормально, пока кеш записи не заполнится (очевидно), а затем скорость упадет и сервер начнет зависать волнами.

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

Много читал о XFS, ReiserFS и Ext4, но я весьма озадачен. Другие мои серверы с гораздо меньшим объемом RAID1 2 ТБ, но с такой же настройкой и значительно большей рабочей нагрузкой, работают безупречно.

Любые идеи?

Как мне отлаживать / экспериментировать?

Спасибо.

Согласитесь с Shodanshok, что крайний срок, вероятно, хорошая идея. Далеко не уверен, что вам следует использовать здесь XFS.

find / volume / data / customer / -type f -iname "* .ext" -mmin +60 -delete

Раньше XFS плохо справлялась с удалением файлов - мне сказали, что большинство ошибок в этой области были устранены, но не проводилось никаких жестких тестов, чтобы подтвердить это.

все идет нормально, пока кеш записи не заполнится (очевидно), а затем скорость упадет и сервер начнет зависать волнами

Висит? звучит так, как будто вы должны отрегулировать соотношение грязных страниц (уменьшить фоновое raio, увеличить коэффициент блокировки), вы также должны изменить dirty_expire_centisecs (вверх или вниз - посмотрите, что делает его быстрее!) и уменьшить dirty_writeback_centisecs, если общая нагрузка и использование процессора приемлемы .

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

Обратите внимание, что снимки LVM убивают пропускную способность ввода-вывода.

---- вышесказанное применимо независимо от выбранной файловой системы ----

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

Отмечая большое количество разветвлений .... функция dir_index ext3 / 4 была явно добавлена, чтобы обеспечить более быстрое и эффективное разрешение, когда каталог содержит большое количество файлов / высокий оборот файлов. Я не знаю, насколько эффективна XFS в этом сценарии.

ReiserFS больше не очень хорошо поддерживается.

Есть еще несколько вещей, на которые вы, возможно, захотите взглянуть (включая ИБП, bcache, специальные журнальные устройства), но тогда у меня не будет оправдания подключить книгу по теме.

Во-первых, XFS - правильный выбор для такого сценария: с XFS практически невозможно выйти из inodes.

Чтобы повысить эффективность удаления, попробуйте следующее:

  • использовать deadline Планировщик ввода / вывода (по умолчанию) cfq
  • использовать logbsize=256k,allocsize=64k как варианты крепления (в дополнение к nodiratime,noatime)

Чтобы снизить влияние удалений на другие действия системы, попробуйте запустить find сценарий с использованием ionice -c 2 -n 7

Сообщите о своих результатах!