Многопоточная синхронизация файлов между двумя серверами Linux

9

В настоящее время я использую rsync для 2,2 миллиона файлов общим объемом 250 ГБ, и это всего лишь 700 тысяч файлов за 6 часов.

Кто-нибудь знает инструмент, похожий на rsync, который может делать это с несколькими потоками, чтобы он шел быстрее?

Том ван Оммен
источник
3
Есть ли у вас основания полагать, что он каким-либо образом связан с процессором?
Chopper3
Какие параметры rsync вы используете?
Кайл Смит
Вы используете SSH в качестве транспорта?
ДжимБ
rsync -avSPp И нет проблем ни с процессором, ни с диском.
Том ван Оммен
И никакой транспорт SSH просто видел что-то в сети, не знаю, быстрее ли это. Индексирование всех файлов уже занимает много времени.
Том ван Оммен

Ответы:

7

Я сомневаюсь, что процессор является ограничивающим фактором здесь. Скорее всего, вы ограничены как пропускной способностью сети для передачи, так и дисковым вводом-выводом; особенно задержка для всех этих вызовов статистики.

Можете ли вы разбить иерархию файловой системы на более мелкие куски для параллельной обработки?

Каковы исходные файлы, и что пишет или изменяет их? Можно ли отправлять изменения по мере их появления на уровне приложения?

JimB
источник
Синхронизация файлов вложений Zarafa, все gzip-файлы по умолчанию. я мог бы запустить несколько экземпляров, но это менее эффективно, чем 10 потоков. И сеть от 1 Гбит до 1 Гбит, но разные центры обработки данных, но это не должно быть проблемой. получил 24 диска SAS на стороне источника и интеллектуальное хранилище с SSD на месте назначения.
Том ван Оммен
1
@ Том ван Оммен - почему вы думаете, что у вас ограниченный процессор? Как несколько процессов менее эффективны, чем потоки, если вы действительно ограничены процессором?
ДжимБ
1
@ Том ван Оммен, 10 процессов имеют больше накладных расходов, чем 10 потоков; однако блокировка структур данных между потоками является кошмаром кодирования. Зачастую для программиста гораздо эффективнее просто запускать несколько процессов и покончить с этим
Майк Пеннингтон,
1
@Guacamole - множественные потоки могут помочь в некоторых ситуациях, но если его ссылка насыщена, он не собирается продвигаться дальше, независимо от того, сколько потоков у него есть. Rsync действительно использует потоки для параллелизма, и не блокирует внутренне на IO.
ДжимБ
1
@ Guacamole - все, на что я указываю, это то, что если он использует ssh в качестве транспорта, его пропускная способность ограничена самим ssh (в частности, статическим окном приема, если он не использует ssh-патчи HPN).
ДжимБ
1

Если дисковая подсистема принимающего сервера представляет собой массив с несколькими дисками, выполнение нескольких процессов rsync может повысить производительность. Я запускаю 3 процесса rsync для копирования файлов на сервер NFS (RAID6 с 6 дисками на группу рейдов) для насыщения Gigabit Ethernet.

Этот парень рассказывает об основном питоне, который запускает несколько процессов rsync http://www.reliam.com/company/featured_geek

sinysee
источник
К сожалению, ссылка мертва. Не могли бы вы найти это снова?
П.Петр
1

Я прочитал много вопросов, подобных этому. Я думаю, что единственный реальный ответ - разбить копию / переместить вручную. IOps будет проблемой здесь. Если вам от этого станет легче, я перевожу ~ 200 миллионов файлов, которые занимают более 100 ТБ дискового пространства.

Wayne
источник
0

Вы можете рассмотреть возможность проверки многопоточного клона cp для linux (с открытым исходным кодом): http://static.usenix.org/event/lisa10/tech/slides/kolano.pdf

Максим
источник
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Скотт Пак