Я использую сервер BackupPC с аппаратным RAID 5 для основного хранилища резервных копий. Поскольку машина была создана с небольшим бюджетом, контроллер представляет собой 3Ware 9500S-4LP для порта PCI, а диски - это медленные 200-гигабайтные типы SATA.
Однако даже с этим оборудованием я вижу гораздо худшую производительность, чем ожидалось. Клиенты и сервер резервного копирования используют rsync в качестве транспорта по гигабитной сети, которая никогда даже не близка к насыщению. Резервное копирование обычной установки Linux размером около 5 ГБ занимает более трех часов.
Поэтому я контролировал сервер с помощью atop
монитор процесса. Он показал, что ни процессор, ни память не критичны, но узким местом является доступ для чтения к RAID.
Когда я построил сервер, я выбрал RAID 5, потому что согласно этот табличный обзор характеристик RAID это казалось лучшим компромиссом между производительностью чтения и эффективностью использования пространства на 4-портовом контроллере.
Кстати, хотя это резервный сервер, использование rsync означает, что здесь гораздо больше операций чтения, чем записи - в настоящее время примерно в 1000 раз больше. Я полагаю, что перемещение и связывание старых файлов в иерархии старых резервных копий BackupPC также во многом этому способствует.
Итак, как бы вы оптимизировали производительность на этой машине? У меня есть следующие настройки:
Вот небольшой небольшой пример ввода-вывода: диски со скоростью 7200 об / мин выполняют примерно 100 операций ввода-вывода в секунду. Диски со скоростью 15 000 об / мин вдвое больше, примерно 200 IOPS. Для массива RAID-5 максимально достижимый показатель IOPS - это количество дисков с данными по сравнению с производительностью одного диска; поскольку у вас есть 3 диска с данными, наилучшее возможное устойчивое значение, которое вы когда-либо получали, составляет 300 операций ввода-вывода в секунду.
Использовать iostat -mx 5
пока выполняется резервное копирование. Если вы видите количество операций чтения или записи (третий и четвертый столбцы) в диапазоне 300, вы в основном исчерпываете свою настройку.
Примечание: большинство современных SSD-дисков достигают 20000 операций ввода-вывода в секунду. Пара SSD в RAID-1 может посрамить стойку, полную вращающейся ржавчины. SSD меняет все. Когда вы сталкиваетесь с проблемой IOPS, в 99% случаев решение называется «SSD».
Если вы в настоящее время не исчерпываете выход RAID-массива, вы можете сделать следующее:
Увеличьте глубину очереди. Стандартная глубина очереди ядра подходит для старых одиночных дисков с небольшими кэшами, но не для современных дисков или RAID-массивов:
эхо 512> / системный / блок / sda / очередь / nr_requests
попробуйте разные планировщики ввода-вывода. CFQ (планировщик по умолчанию для современного ядра) часто не справляется с операциями сервера:
echo 'noop'> / sys / block / sda / queue / scheduler
попробуйте RAID-10. RAID-10 не требует сворачивания записи вместе и работает лучше, чем RAID-5 в однопоточных операциях.
BackupPC - это программа с очень интенсивным вводом-выводом, которая может привести к множеству обращений к диску. С недорогим оборудованием вы можете сделать очень многое, но попробуйте следующее:
Оптимизация самого BackupPC
Максимальное количество одновременных операций резервного копирования и администрирования играет огромную роль в производительности BackupPC. Установите его слишком высоко, и ваше низкое оборудование (или даже дорогое ...) остановится. Установите это слишком низко, и вы не исчерпаете свои аппаратные возможности. Используя обычное оборудование, попробуйте от 2 до 6 одновременных резервных копий, посмотрите, что вам подходит.
Если не требуется, отключите сжатие пула BackupPC.
Даже если библиотека BackupPC Perl rsync не полностью использует rsync v3.x, убедитесь, что у вас используется rsync v3.x.
Оптимизация сервера
Убедитесь, что вы выбрали правильный лифт ввода-вывода. С RAID и большим количеством совпадений по умолчанию cfq
может быть дерьмовый выбор; большую часть времени RAID-контроллер знает все лучше и noop
может быть хорошо. С определенными рабочими нагрузками и дешевыми RAID-контроллерами deadline
тоже может быть хорошо.
Я знаю, что вы не хотите менять файловую систему, но я нашел XFS
быть превосходным с BackupPC. (Caveat emptor: оборудование в моем случае довольно хорошее)
BackupPC любит вас в ответ, если вы даете ему достаточно оперативной памяти. Сколько оперативной памяти у вашего сервера? Чем больше, тем лучше; если сервер может хранить большую часть структуры каталогов в памяти, операции чтения, которые выполняет BackupPC, будут намного, намного быстрее, если им не нужно попадать на физический диск.
На вашем месте я бы сначала обновил оперативную память сервера, а также проверил бы настройки BackupPC. Если это не поможет, я бы повозился с файловой системой и настройками RAID.
Сначала попробуйте протестировать производительность рейда локально, чтобы увидеть, действительно ли это проблема рейда. Вы даже можете использовать:
dd if=/dev/zero of=/your/raid/zerofile bs=16M
а затем через ~ 10 секунд
killall -SIGUSR1 dd
в другом терминале, чтобы увидеть локальную скорость записи. Если скорость достаточно хорошая, попробуйте другой сетевой метод (попробуйте сначала с помощью netcat (проверьте страницу руководства для первой команды, некоторым distos не нужен флаг '-p')
pc 1: nc -l -p 12345 > /your/raid/file
pc 2: cat /some/big/file | nc ip.of.pc.1 12345
У меня были проблемы с медленными скоростями с rsync по ssh (12-15 Мбит / с на гигабитном канале, но на относительно медленных компьютерах).
После того, как вы узнаете, связана ли проблема с диском или со скоростью rsync / ssh, вы можете продолжить отладку.
Итак, вы подозреваете, что проблема заключается в производительности произвольного чтения. Решением для этого было бы получение хранилища с более высокими показателями IOPS (SSD или HDD с более высокой скоростью вращения или RAID с большим количеством шпинделей). Больше оперативной памяти (кеша) также может помочь, если рабочий набор (кеш inode) умещается в памяти.
Одно дело - убедиться, что это так. Взгляните на вывод dstat и вывод iotop. Также убедитесь, что файловая система для backuppc смонтирована relatime или noatime, чтобы каждый доступ к файлу не переводился в запись.