Запуск нескольких потоков scp одновременно:
Задний план:
Я часто нахожу себя зеркальным отражением набора файлов сервера, и в эти файлы сервера входят тысячи маленьких файлов размером от 1 до 3 КБ. Все серверы подключены к портам 1 Гбит / с, как правило, в разных дата-центрах.
Проблема:
SCP передает эти небольшие файлы, ОДИН за ОДНЫМ, и на это уходит много времени, и я чувствую, что теряю прекрасные сетевые ресурсы, которые у меня есть.
Решение?:
У меня была идея; Создание сценария, который делит файлы на равные количества и запускает 5-6 потоков scp, что теоретически будет выполняться в 5-6 раз быстрее, не так ли? Но у меня нет опыта написания сценариев для Linux!
Вопросов):
- Есть ли лучшее решение упомянутой проблемы?
- Есть ли что-то подобное, что уже существует?
- Если нет, есть ли кто-то, кто мог бы дать мне старт или помочь?
- Если не 2 или 3, где было бы хорошее место, чтобы начать изучать сценарии Linux? Как Bash или другой.
linux
centos
scp
multi-threading
caesay
источник
источник
Ответы:
Я бы сделал это так:
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
будет намного быстрее, если вы делаете инкрементные синхронизации.источник
Используйте
rsync
вместоscp
. Вы можете использоватьrsync
болееssh
легко , какscp
и он поддерживает «конвейерную передачи файлов для минимизации задержки расходов».Один совет: если данные сжимаемы, включите сжатие. Если это не так, отключите его.
источник
Я собирался предложить GNO Parallel (который все еще требует некоторой работы сценариев с вашей стороны), но потом я нашел pscp (который является частью pssh ). Это может просто соответствовать вашим потребностям.
источник
pssh
работает одновременно на нескольких машинах. Я не думаю, что он реализует параллелизм на уровне файлов.Не scp напрямую, но опция для многопоточной передачи (даже для отдельных файлов) - bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .
используйте параметр -s для количества потоков, которые вы хотите передать данные. Отлично подходит для высокой пропускной способности, но с задержкой соединений, поскольку задержка ограничивает размер окна TCP на поток.
источник
Возможно, не связано, но если вы хотите что-то более в реальном времени, вы можете попробовать GlusterFS . Работает хорошо, но требует некоторой настройки, если вы хотите эффективно читать небольшие файлы.
источник