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.

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.


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.


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.


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,


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.