Мы наблюдаем проблемы с производительностью в файловой системе, содержащей ~ 500 M файлов, относительно небольших (обычно десятки КБ) и ~ 150 K каталогов. Доступ к файлам осуществляется преимущественно чтением, а запись выполняется довольно редко. Файлы в основном хранятся в иерархии хешированных каталогов с ~ 30 КБ файлов на каталог, но в некоторых случаях может быть до 500 К файлов в одном каталоге.
Сервер разделяет файловую систему на ~ 10 клиентских машин.
Получение списков каталогов часто происходит медленно, а иногда также чтение файлов по абсолютным путям, даже локально.
Это физический сервер, на котором работает Ubuntu 12.04.4 (ядро: 3.8.0 / x86_64), и мы используем ext4 на аппаратном томе RAID-6.
Какой будет рекомендованная настройка файловой системы в этом сценарии?
Когда у вас возникает такая проблема, вы должны:
Используйте стабильные версии последней ОС с последним стабильным ядром.
Какой будет рекомендованная настройка файловой системы в этом сценарии?
есть ли файловая система, особенно подходящая для этого случая (например, ext4, xfs, btrfs, ...)?
Я думаю, что ext4 - лучший выбор здесь с точки зрения безопасности. С точки зрения производительности чтения RaiserFS (/ 4) могла бы быть лучше:
http://www.phoronix.com/scan.php?page=article&item=linux_39_fs&num=1
файловая система для миллионов небольших файлов
какую конфигурацию RAID (например, sw vs. hw, уровень RAID и т. д.) мы должны использовать?
Тебе надо:
Каждый уровень RAID, на котором есть возможность выполнять параллельные операции, будет хорошим выбором, например, RAID 10 (программный рейд Linux) имеет множество вариантов настройки.
как насчет настройки совместного использования файлов (технология [например, NFS против конкуренции], конфигурация, ...)?
Я не могу здесь назвать цифры, файлообменник - тоже довольно широкое понятие. У меня был очень хороший опыт работы с FTP при работе с большим количеством файлов (не с FTPS - потому что согласование TLS для каждой передачи требует времени), лучше туннелировать трафик. Кажется, что лучшее разделение между гибкостью протокола (что вы можете сделать) и накладными расходами протокола (сколько времени занимает, пространство в пакете) при копировании небольших файлов.