Esecuzione di più thread scp contemporaneamente


11

Esecuzione di più thread scp contemporaneamente:

Sfondo:

Mi trovo spesso a eseguire il mirroring di un set di file server molto, e inclusi in questi file server ci sono migliaia di piccoli file da 1kb-3kb. Tutti i server sono collegati a porte da 1 Gbps, generalmente distribuiti in una varietà di data center.

Problema:

SCP trasferisce questi piccoli file, ONE by ONE, e ci vogliono anni, e mi sento come se stessi sprecando le meravigliose risorse di rete che ho.

Soluzione?:

Ho avuto un'idea; Creare uno script, che divide i file in uguali quantità e avvia 5-6 thread scp, che teoricamente verrebbero eseguiti 5-6 volte più velocemente, no? Ma non ho alcuna esperienza di scripting su Linux!

Domande):

  • Esiste una soluzione migliore al problema menzionato?
  • Esiste già qualcosa del genere?
  • In caso contrario, c'è qualcuno che potrebbe darmi un inizio o aiutarmi?
  • Se non a 2, o 3, dove sarebbe un buon posto per iniziare a cercare di imparare lo scripting Linux? Come bash o altro.

Risposte:


11

Lo farei così:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

A seconda dei file che si stanno trasferendo, può avere senso abilitare la compressione nei tarcomandi:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Potrebbe anche avere senso scegliere un codice più adatto alla CPU per il sshcomando (come arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

O combinali entrambi, ma dipende davvero da quale sia il tuo collo di bottiglia.
Ovviamente rsyncsarà molto più veloce se stai facendo sincronizzazioni incrementali.


10

Usa rsyncinvece di scp. Puoi utilizzarlo rsynccon la sshstessa facilità scpe supporta il "pipelining dei trasferimenti di file per ridurre al minimo i costi di latenza".

Un consiglio: se i dati sono comprimibili, abilita la compressione. In caso contrario, disabilitalo.


Ho appena fatto un trasferimento la scorsa notte con SCP e sto facendo un altro trasferimento simile con rsync: sembra molto più veloce. Tuttavia, sembra che stia ancora trasferendo un file alla volta - qualsiasi idea su come farlo fa più thread (Oltre - include e - esclude un gruppo di directory tramite script; vedi: sun3.org/archives / 280 )
aendrew

Non ha senso trasferire più file contemporaneamente, vista la larghezza di banda limitata. Credo che non prenderai in considerazione questo comando quando la larghezza di banda è abbondante. L'eliminazione del costo di latenza ha già aiutato molto quando si gestiscono molti file di piccole dimensioni. Anche se è possibile copiare più file contemporaneamente, la larghezza di banda limitata non accelera il trasferimento dei file.
Joe

1

Stavo per suggerire GNO Parallel (che richiede ancora un po 'di lavoro di scripting da parte tua), ma poi ho trovato pscp (che fa parte di pssh ). Questo potrebbe soddisfare le tue necessità.


1
Sembra psshfunzionare contemporaneamente a più macchine. Non credo che implementa il parallelismo a livello di file.
David Schwartz,

Probabilmente dovrei essere specifico - intendevo pscp.
Rilindo


0

Forse non correlato, ma se vuoi qualcosa di più in tempo reale potresti provare GlusterFS . Funziona bene, ma richiede qualche ottimizzazione se desideri leggere in modo efficiente file di piccole dimensioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.