Ejecutar múltiples hilos scp simultáneamente

11

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.
caesay
fuente

Respuestas:

10

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 tarcomandos:
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 sshcomando (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 rsyncserá mucho más rápido si está haciendo sincronizaciones incrementales.

falsificador
fuente
10

Usar en rsynclugar de scp. Se puede utilizar rsyncsobre sshla misma facilidad que scp, 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.

David Schwartz
fuente
Acabo de hacer una transferencia anoche con scp y estoy haciendo otra transferencia similar con rsync, parece mucho más rápido. Sin embargo, todavía parece estar transfiriendo un archivo a la vez: cualquier idea de cómo hacer que esto haga múltiples hilos (más allá de --incluir y --excluir'un montón de directorios a través de script; ver: sun3.org/archives / 280 )
aendrew el
No tiene sentido transferir varios archivos al mismo tiempo dado el ancho de banda limitado. Creo que no considerarás este comando cuando el ancho de banda sea abundante. Eliminar el costo de latencia ya ayudó mucho cuando está haciendo frente a muchos archivos pequeños. Incluso si puede copiar varios archivos al mismo tiempo, el ancho de banda limitado no acelerará su transferencia de archivos.
Joe
1

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.

Rilindo
fuente
1
Parece que psshfunciona simultáneamente con múltiples máquinas. No creo que implemente el paralelismo a nivel de archivo.
David Schwartz el
Probablemente debería ser específico, me refería a pscp.
Rilindo
1

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.

thetoolman
fuente
0

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.

Kyle
fuente