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

Оптимизация RAID 5 для использования BackupPC (небольшие случайные чтения)

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