Uruchamianie wielu wątków scp jednocześnie

11

Uruchamianie wielu wątków scp jednocześnie:

Tło:

Często zdarza mi się, że często dubluję zestaw plików serwera, a pliki te zawierają tysiące małych plików 1kb-3kb. Wszystkie serwery są podłączone do portów 1 Gb / s, zwykle rozmieszczonych w różnych centrach danych.

Problem:

SCP przesyła te małe pliki, JEDEN przez JEDEN, i to zajmuje wieki, i mam wrażenie, że marnuję piękne zasoby sieciowe, które mam.

Rozwiązanie?:

Miałem pomysł; Stworzenie skryptu, który dzieli pliki na równe kwoty i uruchamia 5-6 wątków scp, które teoretycznie byłyby wykonane 5-6 razy szybciej, prawda? Ale nie mam doświadczenia ze skryptami w systemie Linux!

Pytania):

  • Czy istnieje lepsze rozwiązanie wspomnianego problemu?
  • Czy istnieje już coś takiego?
  • Jeśli nie, to czy jest ktoś, kto dałby mi start lub pomoc?
  • Jeśli nie 2 lub 3, gdzie byłoby dobre miejsce, aby zacząć uczyć się skryptowania w systemie Linux? Jak bash lub inny.
caesay
źródło

Odpowiedzi:

11

Zrobiłbym to w ten sposób:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

W zależności od przesyłanych plików warto włączyć kompresję w tarpoleceniach:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Może również mieć sens wybór przyjaznego dla procesora szyfru dla sshpolecenia (np. Arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Lub połącz oba, ale tak naprawdę zależy to od tego, jakie masz wąskie gardło.
Oczywiście rsyncbędzie dużo szybciej, jeśli wykonujesz synchronizacje przyrostowe.

oszust
źródło
10

Użyj rsynczamiast scp. Można używać rsyncna sshrównie łatwo jak scpi obsługuje „rurociąg transferów plików, aby zminimalizować koszty opóźnienia”.

Jedna wskazówka: jeśli dane są kompresowalne, włącz kompresję. Jeśli nie, wyłącz go.

David Schwartz
źródło
Właśnie zrobiłem jeden transfer ostatniej nocy z scp i robię inny podobny transfer z rsync - wydaje się to znacznie szybsze. Jednak nadal wydaje się, że przenosi jeden plik na raz - każdy pomysł, jak to zrobić, aby zrobić wiele wątków (poza - włączanie i wyłączanie wielu katalogów za pomocą skryptu; patrz: sun3.org/archives / 280 )
aendrew
Przesyłanie wielu plików jednocześnie nie ma sensu, biorąc pod uwagę ograniczoną przepustowość. Wierzę, że nie rozważysz tego polecenia, gdy przepustowość jest duża. Wyeliminowanie kosztów opóźnień już bardzo pomogło, gdy kopiujesz wiele małych plików. Nawet jeśli możesz skopiować wiele plików jednocześnie, ograniczona przepustowość nie przyspieszy transferu plików.
Joe
1

Właśnie miałem zasugerować GNO Parallel (który wciąż wymaga trochę pracy skryptowej z twojej strony), ale potem znalazłem pscp (który jest częścią pssh ). To może pasować do twoich potrzeb.

Rilindo
źródło
2
Wydaje się, że psshdziała równolegle na wielu komputerach. Nie wydaje mi się, żeby implementował paralelizm na poziomie plików.
David Schwartz
Prawdopodobnie powinienem być konkretny - miałem na myśli pscp.
Rilindo,
1

Nie scp bezpośrednio, ale opcją transferu wielowątkowego (nawet na pojedynczych plikach) jest bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .

użyj opcji -s dla liczby wątków, które chcesz przesłać dane. Doskonały do ​​połączeń o dużej przepustowości, ale opóźnionych, ponieważ opóźnienie ogranicza rozmiar okna TCP na wątek.

thetoolman
źródło
0

Prawdopodobnie niezwiązane, ale jeśli chcesz czegoś więcej w czasie rzeczywistym, możesz wypróbować GlusterFS . Działa dobrze, ale wymaga strojenia, jeśli chcesz skutecznie czytać małe pliki.

Kyle
źródło