Birden çok scp iş parçacığını aynı anda çalıştırma


11

Birden çok scp iş parçacığını aynı anda çalıştırma:

Arka fon:

Sık sık kendimi bir dizi sunucu dosyasını yansıtan buluyorum ve bu sunucu dosyalarına binlerce küçük 1kb-3kb dosyası ekledim. Tüm sunucular, genellikle çeşitli veri merkezlerine dağılmış 1Gbps bağlantı noktalarına bağlanır.

Sorun:

SCP bu küçük dosyaları birer birer aktarır ve uzun zaman alır ve sahip olduğum güzel ağ kaynaklarını boşa harcadığımı hissediyorum.

Çözüm?:

Bir fikrim vardı; Dosyaları eşit miktarlara bölen ve 5-6 scp iş parçacığını başlatan bir komut dosyası oluşturmak, teorik olarak 5-6 kat daha hızlı yapılır, değil mi? Ama linux komut dosyası oluşturma deneyimim yok!

Soru (lar):

  • Bahsedilen soruna daha iyi bir çözüm var mı?
  • Böyle bir şey var mı zaten?
  • Değilse, bana bir başlangıç ​​yapacak ya da bana yardım edecek biri var mı?
  • 2 veya 3 değilse, linux komut dosyası öğrenmeye başlamak için iyi bir yer neresi olurdu? Bash gibi, ya da diğerleri.

Yanıtlar:


11

Bunu şöyle yaparım:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Aktardığınız dosyalara bağlı olarak, tarkomutlarda sıkıştırmayı etkinleştirmek mantıklı olabilir :
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

sshKomut için CPU dostu bir şifre seçmeniz de mantıklı olabilir (arcfour gibi): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Veya her ikisini de birleştirin, ama gerçekten darboğazınızın ne olduğuna bağlı. Artımlı senkronizasyonlar yapıyorsanız
açıkçası rsyncçok daha hızlı olacaktır.


10

Yerine rsynckullanın scp. Sen kullanabilirsiniz rsyncüzerinde sshkolayca olduğunca scp"dosya transferlerinin ardışık düzen maliyetlerini gecikme en aza indirmek için" ve destekler.

Bir ipucu: Veriler sıkıştırılabilir durumdaysa sıkıştırmayı etkinleştirin. Değilse, devre dışı bırakın.


Dün gece scp ile bir transfer yaptım ve rsync ile benzer bir transfer yapıyorum - çok daha hızlı görünüyor . Bununla birlikte, yine de her seferinde bir dosya aktarılıyor gibi görünüyor - bunun nasıl birden fazla iş parçacığı yapması gerektiği konusunda herhangi bir fikir (Bir dizi dizini komut dosyasıyla - ve dışlamak - bkz. Sun3.org/archives) 280 )
aendrew

Sınırlı bant genişliği göz önüne alındığında, aynı anda birden fazla dosya aktarmanın bir anlamı yoktur. Bant genişliği bol olduğunda bu komutu dikkate almayacağınıza inanıyorum. Gecikme maliyetini ortadan kaldırmak, çok sayıda küçük dosyayla başa çıkarken çok yardımcı oldu. Aynı anda birden fazla dosya kopyalayabilseniz bile, sınırlı bant genişliği dosya aktarımınızı hızlandırmaz.
Joe

1

Ben GNO önermek üzereyken Paralel (hala sizin açınızdan biraz komut dosyası çalışma gerektirir) ama sonra (ki bir parçasıdır İSSA bulundu Pssh ). Bu sadece ihtiyacınıza uygun olabilir.


2
psshBirden fazla makineyle aynı anda çalışıyor gibi görünüyor . Dosya düzeyinde paralellik uyguladığını sanmıyorum.
David Schwartz

Muhtemelen spesifik olmalıyım - pscp demek istedim.
Rilindo

1

Doğrudan scp değil, ancak mutli dişli aktarım için bir seçenek (tek dosyalarda bile) bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .

veri aktarmak istediğiniz iş parçacığı sayısı için -s seçeneğini kullanın. Gecikme iş parçacığı başına TCP pencere boyutunu sınırladığından, yüksek bant genişliği ancak gecikmeli bağlantılar için idealdir.


0

Muhtemelen ilgisiz, ancak daha gerçek bir şey istiyorsanız GlusterFS'yi deneyebilirsiniz . İyi çalışır, ancak küçük dosyaları verimli bir şekilde okumak istiyorsanız bazı ayarlamalar gerektirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.