Ejecutar múltiples hilos scp simultáneamente:
Antecedentes:
A menudo me encuentro reflejando mucho un conjunto de archivos de servidor, e incluidos en estos archivos de servidor hay miles de pequeños archivos de 1 kb a 3 kb. Todos los servidores están conectados a puertos de 1 Gbps, generalmente distribuidos en una variedad de centros de datos.
Problema:
SCP transfiere estos pequeños archivos, UNO a UNO, y lleva años, y siento que estoy desperdiciando los hermosos recursos de red que tengo.
¿Solución?:
Tuve una idea; Crear una secuencia de comandos, que divide los archivos en cantidades iguales, y pone en marcha entre 5 y 6 hilos scp, que teóricamente se realizarían entre 5 y 6 veces más rápido, ¿no? ¡Pero no tengo ninguna experiencia en scripts de Linux!
Pregunta (s):
- ¿Existe una mejor solución para el problema mencionado?
- ¿Hay algo como esto que ya existe?
- Si no es así, ¿hay alguien que me ayude o me ayude?
- Si no es para 2 o 3, ¿dónde sería un buen lugar para comenzar a buscar aprender scripting de Linux? Como bash u otro.
linux
centos
scp
multi-threading
caesay
fuente
fuente
Respuestas:
Lo haría así:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'
Dependiendo de los archivos que esté transfiriendo, puede tener sentido habilitar la compresión en los
tar
comandos:tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
También puede tener sentido que elija un cifrado más amigable con la CPU para el
ssh
comando (como arcfour):tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'
O combine ambos, pero realmente depende de cuál sea su cuello de botella.
Obviamente
rsync
será mucho más rápido si está haciendo sincronizaciones incrementales.fuente
Usar en
rsync
lugar descp
. Se puede utilizarrsync
sobressh
la misma facilidad quescp
, y es compatible con "la canalización de transferencia de archivos para minimizar la latencia de los costos".Un consejo: si los datos son comprimibles, habilite la compresión. Si no es así, desactívelo.
fuente
Estaba a punto de sugerir GNO Parallel (que todavía requiere un poco de trabajo de secuencias de comandos de su parte), pero luego encontré pscp (que es parte de pssh ). Eso puede adaptarse a su necesidad.
fuente
pssh
funciona simultáneamente con múltiples máquinas. No creo que implemente el paralelismo a nivel de archivo.No es scp directamente, pero una opción para la transferencia multiproceso (incluso en archivos individuales) es bbcp: https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .
use la opción -s para la cantidad de hilos que desea transferir datos. Excelente para conexiones de gran ancho de banda pero con retraso, ya que el retraso limita el tamaño de la ventana TCP por hilo.
fuente
Posiblemente no relacionado, pero si quieres algo más en tiempo real, puedes probar GlusterFS . Funciona bien, pero requiere un poco de ajuste si desea leer eficientemente archivos pequeños.
fuente