Запуск декількох scp потоків одночасно


11

Запуск декількох scp потоків одночасно:

Фон:

Я часто знаходжу себе в дзеркальному наборі серверних файлів, і до цих серверних файлів належать тисячі маленьких файлів 1kb-3kb. Всі сервери підключені до портів 1 Гбіт / с, як правило, розкинуті в різних центрах обробки даних.

Проблема:

SCP передає ці маленькі файли, один на один, і це займає віки, і я відчуваю, що витрачаю прекрасні мережеві ресурси, які у мене є.

Рішення ?:

У мене була ідея; Створення сценарію, який розділяє файли на рівні кількості, і запускає 5-6 ниток scp, які теоретично потім зробиться в 5-6 разів швидше, ні? Але я не маю жодного досвіду сценаріїв Linux!

Питання:

  • Чи є краще рішення зазначеної проблеми?
  • Чи є щось подібне, що вже існує?
  • Якщо ні, чи є хтось, хто би почав мене, чи допоможе мені?
  • Якщо не 2, чи 3, де було б гарне місце, щоб почати шукати, щоб вивчити сценарії Linux? Як баш, чи інше.

Відповіді:


11

Я б це зробив так:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Залежно від файлів, які ви переносите, може мати сенс включити компресію в tarкомандах:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Можливо, також буде сенс, що для команди ви вибрали шифр для процесора ssh(наприклад, arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Або комбінуйте обидва, але це дійсно залежить від того, яке ваше вузьке місце.
Очевидно, rsyncбуде набагато швидше, якщо ви робите додаткові синхронізації.


10

Використовуйте rsyncзамість scp. Ви можете використовувати rsyncбільш sshлегко , як scpі він підтримує «конвеєрну передачі файлів для мінімізації затримки витрат».

Одна порада: якщо дані є стислими, увімкніть стиснення. Якщо ні, вимкніть її.


Я щойно зробив одну передачу вчора ввечері з scp і роблю ще одну подібну передачу з rsync - це здається набагато швидшим. Однак все ще здається, що це передача файлу за один раз - будь-яка ідея, як змусити це зробити декілька потоків (Позаду --include'ing та --exclude'ing купу каталогів за допомогою сценарію; див .: sun3.org/archives / 280 )
aendrew

Немає сенсу передавати декілька файлів одночасно, враховуючи обмежену пропускну здатність. Я вважаю, що ви не будете враховувати цю команду, коли пропускна здатність буде достатньою. Усунення вартості затримки вже дуже допомогло, коли ви справляєте безліч невеликих файлів. Навіть якщо ви можете копіювати кілька файлів одночасно, обмежена пропускна здатність не прискорить передачу файлів.
Джо

1

Я збирався запропонувати GNO Parallel (який все ще потребує певної сценаріальної роботи з вашого боку), але потім я знайшов pscp (який є частиною pssh ). Це може просто відповідати вашим потребам.


2
Здається, psshпрацює одночасно на декількох машинах. Я не думаю, що він реалізує паралелізм файлового рівня.
Девід Шварц

Я, мабуть, повинен бути конкретним - я мав на увазі pscp.
Ріліндо

1

Не scp безпосередньо, але варіантом передачі потоку через mutli (навіть на окремих файлах) є bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .

скористайтеся опцією -s для кількості потоків, які ви хочете передати дані. Відмінно підходить для великої пропускної здатності, але млявих з'єднань, оскільки відставання обмежує розмір вікна TCP на потік.


0

Можливо, не пов'язане, але якщо ви хочете чогось більш реального часу, ви можете спробувати GlusterFS . Працює добре, але вимагає певної настройки, якщо ви хочете ефективно читати невеликі файли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.