У меня есть резервный сервер Ubuntu 16.04 с жестким диском 8x10 ТБ через объединительную плату SATA 3.0. 8 жестких дисков собраны в RAID6, используется файловая система EXT4. Эта файловая система хранит огромное количество небольших файлов с очень большим количеством операций SEEK, но с низкой пропускной способностью ввода-вывода. На самом деле существует множество небольших файлов с разных серверов, которые снимаются с помощью rsnapshot каждый день (несколько INODES направлены на одни и те же файлы. У меня очень низкая производительность, поскольку файловая система (60 ТБ нетто) превышает 50% использования. использование составляет 75%, а
du -sch /backup-root/
занимает несколько дней (!). Машина имеет 8 ядер и 16 ГБ оперативной памяти. Оперативная память полностью используется кэшем файловой системы ОС, 7 из 8 ядер всегда простаивают из-за IOWAIT.
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 912203776
Block count: 14595257856
Reserved block count: 0
Free blocks: 4916228709
Free inodes: 793935052
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 2048
Inode blocks per group: 128
RAID stride: 128
RAID stripe width: 768
Flex block group size: 16
Filesystem created: Wed May 31 21:47:22 2017
Last mount time: Sat Apr 14 18:48:25 2018
Last write time: Sat Apr 14 18:48:18 2018
Mount count: 9
Maximum mount count: -1
Last checked: Wed May 31 21:47:22 2017
Check interval: 0 (<none>)
Lifetime writes: 152 TB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 513933330
Default directory hash: half_md4
Directory Hash Seed: 5e822939-cb86-40b2-85bf-bf5844f82922
Journal backup: inode blocks
Journal features: journal_incompat_revoke journal_64bit
Journal size: 128M
Journal length: 32768
Journal sequence: 0x00c0b9d5
Journal start: 30179
Мне не хватает опыта использования такого рода файловой системы. Какие варианты у меня есть, чтобы это настроить. Какая файловая система будет лучше работать в этом сценарии? Есть ли какие-либо варианты использования ОЗУ для других вариантов кеширования, кроме встроенного в ОС?
Как вы обрабатываете очень большие объемы маленьких файлов на больших сборках RAID?
Спасибо, Себастьян
У меня есть аналогичная (хотя и меньшая) установка с 12 дисками по 2 ТБ в массиве RAID6, которые используются для той же цели (rsnapshot
резервный сервер).
Во-первых, это нормально для du -hs
уделять так много времени такой большой и используемой файловой системе. более того du
учитывает жесткие ссылки, которые вызывают значительную и резкую загрузку ЦП в дополнение к очевидной нагрузке ввода-вывода.
Ваша медлительность связана с тем, что метаданные файловой системы расположены в очень удаленных (в терминах LBA) блоках, что вызывает много запросов. Поскольку обычный диск со скоростью вращения 7,2 КБ обеспечивает около 100 операций ввода-вывода в секунду, вы можете увидеть, сколько часов, если не дней, необходимо для загрузки всех метаданных.
Что-то, что вы можете попробовать (неразрушающим образом) улучшить ситуацию:
mlocate/slocate
индексация вашего /backup-root/
(вы можете использовать предприятие Prunefs чтобы избежать этого), иначе удаление кэша метаданных серьезно снизит время резервного копирования;du
на /backup-root/
. При необходимости запустите du
только в конкретной интересующей подпапке;vfs_cache_pressure
от значения по умолчанию (100) до более консервативного (10 или 20). Это укажет ядру отдать предпочтение кэшированию метаданных, а не кэшированию данных; это, в свою очередь, должно ускорить rsnapshot/rsync
фаза открытия;Вы можете попробовать и другие вещи, но это разрушительные операции:
Эта файловая система хранит огромное количество небольших файлов с очень большим количеством операций SEEK, но с низкой пропускной способностью ввода-вывода.
🎉
Это то, что сейчас привлекает множество людей. Увы, обычные FS здесь плохо масштабируются. Я могу дать вам, наверное, всего несколько советов, когда дело доходит до уже имеющейся настройки: EXT4 через RAID-6 на жестких дисках:
vm.vfs_cache_pressure
вниз, скажем 1. Это было бы изменить предвзятость кеширования к сохранению большего количества метаданных (inode, dentry) вместо самих данных, и это должно иметь положительный эффект в сокращении количества поисковdata=journal
UPD.: так как оказалось Программный RAID Linux (LSR) RAID-6, вот дополнительный элемент:
echo 32768 | sudo tee /sys/devices/virtual/block/md*/md/stripe_cache_size
- Но делайте это осторожно (при необходимости используйте меньшее значение), так как размер кратен размеру блока и в зависимости от выбранного размера блока потребуется разный объем ОЗУ.- Это, наверное, большая часть того, что можно улучшить без редизайна с нуля.
У меня очень низкая производительность, так как файловая система (нетто 60 ТБ) превысила 50% использования. На данный момент загрузка составляет 75%
Это очень серьезная проблема, потому что высокий уровень занятости дискового пространства только усугубляет фрагментацию. А чем больше фрагментация, тем больше поисков. Не удивительно, почему он давал более или менее приемлемую производительность до достижения 50%. Во многих руководствах есть четкие рекомендации, чтобы ФБК не разрастались ниже 75–80%.
В этом случае RAID6 не особо поможет, что-то вроде ZFS может обеспечить гораздо более быстрый доступ к метаданным и каталогам при сохранении примерно такой же скорости.
RAID-6 чередует диски, поэтому весь ввод-вывод идет на все диски. Это довольно неэффективно для множества небольших файлов. Однако, вероятно, это не ваша главная проблема, которая ...
Ext4 не очень подходит для больших файловых систем с миллионами файлов. Использовать XFS. У меня есть файловые системы XFS размером до 1,2 ПБ и с 1 миллиардом файлов, без проблем. Просто используйте XFS.
Спасибо всем, кто ответил на мой вопрос.
Первым делом я добавил на плату максимальный объем оперативной памяти. К сожалению, плата поддерживает только до 64 ГБ оперативной памяти. Я наблюдал за поведением после расширения, и оно меня разочаровало. Хотя вся доступная оперативная память использовалась для кэша ввода-вывода, производительность RSNAPSHOT-Backup заметно не улучшилась.
Так что мне пришлось вытащить большую булаву. Я добавил два диска NVME емкостью 1 ТБ и собрал их в RAID 1. RAID 6, состоящий из 8 жестких дисков по 10 ТБ, был разобран на один RAID 1 (состоящий из 2 жестких дисков по 10 ТБ, ext4) и один RAID 5 (состоящий из 6 жестких дисков по 10 ТБ). RAID 1 теперь содержит операционную систему и рабочую копию серверов (которые загружаются на этот диск 4 раза в день).
RAID5 теперь является устройством с поддержкой BCACHE, поддерживаемым NVME-RAID 1 и отформатированным с помощью ext4. На этом диске находятся копии RSNAPSHOT. Каждую ночь файлы синхронизируются с RAID1 на RAID5, что снижает вдвое пропускную способность ввода-вывода RAID5 по сравнению с предыдущим RAID6, который содержал рабочие копии И резервные копии. Благодаря BCache не буквально каждый файл записывается на диски, но все изменения в одном блоке записываются один раз, даже если он содержит несколько сотен изменений одного файла. Это еще больше снизило количество операций ввода-вывода на жестких дисках.
Наконец, я изменил конфигурацию RSnapshot. Раньше было 31 ежедневный снимок и 18 ежемесячных снимков, в результате чего было создано 49 резервных копий. Теперь у меня есть классический дизайн 7d / 4w / 12m / 1y, который сокращает количество генераций резервных копий до 24.
После этих изменений (и с 64 ГБ ОЗУ, упомянутой выше) продолжительность одного снимка снизилась с ~ 20 часов до 1,5 часов. Уровень попадания в кэш-память устройств BCache составляет 82% (после 6 недель нормальной работы).
Миссия выполнена. Спасибо всем за ваши мысли и вклад.