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.
linux
centos
scp
multi-threading
caesay
źródło
źródło
Odpowiedzi:
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
tar
poleceniach:tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
Może również mieć sens wybór przyjaznego dla procesora szyfru dla
ssh
polecenia (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
rsync
będzie dużo szybciej, jeśli wykonujesz synchronizacje przyrostowe.źródło
Użyj
rsync
zamiastscp
. Można używaćrsync
nassh
równie łatwo jakscp
i 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.
źródło
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.
źródło
pssh
działa równolegle na wielu komputerach. Nie wydaje mi się, żeby implementował paralelizm na poziomie plików.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.
źródło
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.
źródło