Максимальная производительность и пропускная способность rsync - гигабитные серверы с прямым подключением


27

У меня есть два сервера Dell R515 под управлением CentOS 6.5, с одним из сетевых адаптеров Broadcom в каждом, напрямую подключенным к другому. Я использую прямую ссылку для передачи резервных копий с основного сервера в паре на вторичный сервер каждую ночь, используя rsync через ssh. Наблюдая за трафиком, я вижу пропускную способность ~ 2 Мбит / с, что намного меньше, чем я ожидаю от гигабитного порта. Я установил MTU на 9000 с обеих сторон, но это ничего не изменило.

Есть ли рекомендуемый набор настроек и оптимизаций, которые позволили бы мне достичь максимальной доступной пропускной способности? Более того, поскольку я использую rsync поверх ssh (или, возможно, просто NFS) для копирования миллионов файлов (~ 6 ТБ небольших файлов - огромный почтовый магазин Zimbra), оптимизация, которую я ищу, может быть более специфичной для моего конкретного случая использования. ,

Я использую ext4 с обеих сторон, если это имеет значение

Благодарность

РЕДАКТИРОВАТЬ: я использовал следующие rsyncпараметры с довольно похожими результатами:

rsync -rtvu --delete source_folder/ destination_folder/

rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/

В настоящее время я наблюдаю тот же уровень плохой производительности при использовании cpэкспорта NFS по той же прямой кабельной линии связи.

РЕДАКТИРОВАТЬ 2: после завершения синхронизации я смог запустить iperfи обнаружил, что производительность была около 990 Мбит / с, медлительность была вызвана фактическим использованием набора данных.


1
Вы должны добавить rsync к вашим тегам. Вы проверили время для части списка rsync? Низкая пропускная способность может быть из-за небольших файлов. Можете ли вы опубликовать команду rsync для проверки параметров?
kranteg

@kranteg, пожалуйста, смотрите edit
dyasny

2
Пожалуйста, проверьте связь с iperf.
ewwhite

да, iperf показывает 991 Мбит / с, я думаю, что это набор данных, который был настолько медленным
dyasny

Вы не можете иметь хорошую производительность с rsync и набором данных с небольшими файлами. Вы обязательно должны попробовать смолу.
kranteg

Ответы:


24

Количество файлов и издержки шифрования SSH, вероятно, являются самыми большими барьерами. Вы не увидите скорость передачи на такой передаче.

Варианты для улучшения включают в себя:

  • Использование rsync + SSH с менее затратным алгоритмом шифрования (например -e "ssh -c arcfour")
  • Полностью исключить шифрование по протоколу SSH с помощью чего-то вроде HPN-SSH .
  • Блочные переводы. Снимки dd, отправка / получение снимков ZFS и т. Д.
  • Если это однократная или нечастая передача, используйте tarnetcat ( nc), mbuffer или некоторую комбинацию.
  • Проверьте tuned-admнастройки CentOS .
  • Удаление atime из ваших файловых систем монтируется. Изучение других параметров монтирования файловой системы.
  • NIC отправлять / получать буферы.
  • Настройка вашей rsyncкоманды. Будет ли -Wздесь полезен вариант с целыми файлами? Сжатие включено?
  • Оптимизируйте свою подсистему хранения для типа передачи (SSD, число шпинделей, кэш контроллера RAID).

Я сбросил SSH для NFS, видя почти те же результаты. Я планирую пересылку на основе блоков, переключаясь на резервные копии на основе снимков LVM и создавая резервные копии на втором сервере, где я буду использовать ZFS для дедупликации. atime отключен с обеих сторон. Сжатие не используется. Как оптимизировать подсистему хранения для этого вида передачи? Источник имеет два RAID10 более 12x 10k дисков SAS, один на локальных дисках, другой MD1220. Сервер резервного копирования имеет такое же количество дисков, но с большими дисками SATA и использует RAID5. Полный кеш контроллеров H800 и H700 с обеих сторон. 2 Мбит / с (из iftop) ~
десятое

Тем не менее, заставляет меня думать, что создание сети является узким местом.
Дядный

@dyasny Проверьте свою сеть, iperfчтобы быть уверенным.
ewwhite


1
Убедитесь, что структура каталога назначения была создана, rsyncа не кем-то cp. Я видел rsyncвзять гораздо больше времени , чтобы обновить удаленное дерево каталогов первоначально созданное cp: 88GB обновляется с контрольной суммой в 1h26m вместо 3 часов! То, как вы создаете начальную структуру диска, имеет решающее значение для получения хорошей производительности обновления. Время процессора одинаковое; реальное время может удвоиться. (То же самое обновление без контрольной суммы выполняется за 13 минут от SSD до 200 ГБ Seagate).
Ян Д. Аллен

3

Как вы, наверное, знаете, копирование большого количества маленьких файлов (например, почтовых ящиков в формате MailDir или аналогичных) определенно не лучший вариант, чтобы использовать преимущества интерфейсов с высокой пропускной способностью. SSH, вероятно, не лучший транспортный протокол для этого. Я бы попробовал использовать tar для создания архива на исходном хосте, прежде чем отправить его на ваш вторичный хост.

tar c /var/mail | ssh root@secondary-host 'tar x -C /var/backups'

Если вам нужно инкрементное резервное копирование, вы можете попробовать -gопции tar. Если вам все еще нужно увеличить throuput, попробуйте использовать netcat вместо ssh.


Я переключился на NFS вместо SSH, чтобы убрать накладные расходы на шифрование, без радости
дьясный

Вы пытались использовать tar? Возможно, в качестве первого шага попробуйте создать локальный архив на основном сервере, а затем перенести его по сети. (или протестируйте свою сеть с помощью iperf, как @ewwhite suggeted)
alxgomz

Я бы, если бы у меня было свободное место. Это довольно огромно, даже с полностью заполненной коробкой DAS
dyasny

затем попробуйте передать его через netcat или ssh (хотя это не так эффективно)
alxgomz

Позже я перейду к резервному копированию на основе блоков, и я собираюсь перейти ddчерез него nc. но прямо сейчас я застрял с двумя огромными резервными копиями, после чего мне нужно было перенести их с основного хоста, чтобы я мог создать там систему LVM
dyasny

1

Попытайтесь дразнить обособленные факторы:

  • CPU (например, дд / dev / zero по конвейеру)
  • дисковый ввод / вывод (например, dd большого файла, переданного в cat> / dev / null [piped для предотвращения короткого замыкания])
  • физический сетевой ввод / вывод (например, dd передается на другую машину)
  • и т.п.

и тестировать их самостоятельно.

У меня были некоторые неудачные опыты с драйверами Broadcom, поэтому мое первое предложение состоит в том, чтобы проверить полезную пропускную способность сети с: dd if=/dev/zero bs=1m count=10k | rsh backup_host cat \> /dev/null


Или Iperf ...
Ewwhite
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.