Executando vários encadeamentos scp simultaneamente

8

Executando vários encadeamentos scp simultaneamente:

Histórico:

Frequentemente estou me espelhando muito em um conjunto de arquivos do servidor, e incluo nesses arquivos do servidor milhares de pequenos arquivos de 1kb-3kb. Todos os servidores estão conectados a portas de 1 Gbps, geralmente espalhados em uma variedade de centros de dados.

Problema:

O SCP transfere esses pequenos arquivos, UM por UM, e leva muito tempo, e eu sinto que estou desperdiçando os recursos de rede que eu tenho.

Solução?:

Eu tive uma ideia; Criando um script, que divide os arquivos em quantidades iguais e inicia 5-6 threads scp, que teoricamente seriam então executados 5-6 vezes mais rápido, não? Mas eu não tenho nenhuma experiência de script linux!

Pergunta (s):

  • Existe uma solução melhor para o problema mencionado?
  • Existe algo assim que já existe?
  • Se não, há alguém que me desse um começo ou me ajudasse?
  • Se não for 2, ou 3, onde seria um bom lugar para começar a procurar aprender scripts de linux? Como o bash ou outro.
por caesay 31.10.2011 / 22:59

5 respostas

5

Eu faria assim:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Dependendo dos arquivos que você está transferindo, pode fazer sentido ativar a compactação nos comandos tar :
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Também pode fazer sentido escolher uma cifra mais amigável da CPU para o comando ssh (como arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Ou combine os dois, mas isso realmente depende do gargalo.
Obviamente, rsync será muito mais rápido se você estiver fazendo sincronizações incrementais.

    
por 31.10.2011 / 23:56
6

Use rsync em vez de scp . Você pode usar rsync over ssh tão facilmente quanto scp e ele suporta "pipelining de transferências de arquivos para minimizar os custos de latência".

Uma dica: se os dados forem compactáveis, ative a compactação. Se não for, desative-o.

    
por 31.10.2011 / 23:04
1

Eu estava prestes a sugerir ao GNO Paralelo (que ainda requer algum trabalho de script de sua parte), mas então eu encontrado pscp (que faz parte do pssh ). Isso pode se encaixar na sua necessidade.

    
por 01.11.2011 / 00:32
0

Possivelmente não relacionado, mas se você quiser algo mais em tempo real, tente GlusterFS . Funciona bem, mas requer algum ajuste se você deseja ler arquivos pequenos com eficiência.

    
por 31.10.2011 / 23:48
0

Não scp diretamente, mas uma opção para transferência de múltiplos threads (mesmo em arquivos únicos) é bbcp - link .

use a opção -s para o número de threads que você deseja transferir dados. Ótimo para conexões de alta largura de banda, mas com atraso, já que o lag limita o tamanho da janela TCP por encadeamento.

    
por 09.02.2016 / 23:12