Menjalankan beberapa thread scp secara bersamaan

11

Menjalankan beberapa thread scp secara bersamaan:

Latar Belakang:

Saya sering mendapati diri saya sering mem- mirror satu set file server, dan termasuk dalam file server ini ada ribuan file 1kb-3kb kecil. Semua server terhubung ke port 1Gbps, umumnya tersebar di berbagai pusat data.

Masalah:

SCP mentransfer file-file kecil ini, SATU demi SATU, dan itu butuh waktu lama, dan saya merasa seperti saya membuang-buang sumber daya jaringan yang indah yang saya miliki.

Larutan?:

Saya punya ide; Membuat skrip, yang membagi file menjadi jumlah yang sama, dan memulai 5-6 scp utas, yang secara teoritis kemudian akan dilakukan 5-6 kali lebih cepat, bukan? Tapi saya tidak punya pengalaman scripting linux!

Pertanyaan:

  • Apakah ada solusi yang lebih baik untuk masalah yang disebutkan?
  • Apakah sudah ada yang seperti ini?
  • Jika tidak, apakah ada seseorang yang akan memberi saya permulaan, atau membantu saya?
  • Jika tidak ke 2, atau 3, di mana akan menjadi tempat yang baik untuk mulai mencari belajar scripting linux? Seperti bash, atau lainnya.
caesay
sumber

Jawaban:

11

Saya akan melakukannya seperti ini:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Bergantung pada file yang Anda transfer, masuk akal untuk mengaktifkan kompresi dalam tarperintah:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Mungkin juga masuk akal bahwa Anda memilih cipher yang lebih ramah untuk sshperintah (seperti arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Atau gabungkan keduanya, tetapi itu benar-benar tergantung pada apa yang menjadi hambatan Anda.
Jelas rsyncakan jauh lebih cepat jika Anda melakukan sinkronisasi tambahan.

pemalsu
sumber
10

Gunakan rsyncsebagai ganti scp. Anda dapat menggunakan rsynclebih sshsemudah scp, dan mendukung "pipelining transfer file untuk meminimalkan latency biaya".

Satu tip: Jika data kompresibel, aktifkan kompresi. Jika tidak, nonaktifkan.

David Schwartz
sumber
Saya baru saja melakukan satu transfer tadi malam dengan scp dan saya melakukan transfer serupa dengan rsync - sepertinya jauh lebih cepat. Namun, tampaknya masih mentransfer satu file pada suatu waktu - setiap ide bagaimana membuat ini melakukan banyak utas (Melampaui - termasuk 'dan - mengecualikan' banyak direktori melalui skrip; lihat: sun3.org/archives / 280 )
aendrew
Tidak ada gunanya mentransfer banyak file pada saat yang sama mengingat bandwidth terbatas. Saya yakin Anda tidak akan mempertimbangkan perintah ini ketika bandwidth berlimpah. Menghilangkan biaya latensi sudah banyak membantu ketika Anda menangani banyak file kecil. Bahkan jika Anda dapat menyalin beberapa file secara bersamaan, bandwidth terbatas tidak akan mempercepat transfer file Anda.
Joe
1

Saya baru saja akan menyarankan GNO Parallel (yang masih membutuhkan beberapa pekerjaan scripting di pihak Anda), tetapi kemudian saya menemukan pscp (yang merupakan bagian dari pssh ). Itu mungkin hanya sesuai dengan kebutuhan Anda.

Rilindo
sumber
1
Tampaknya psshberoperasi secara bersamaan ke beberapa mesin. Saya tidak berpikir itu menerapkan paralelisme tingkat file.
David Schwartz
Saya mungkin harus spesifik - maksud saya pscp.
Rilindo
1

Bukan scp secara langsung, tetapi opsi untuk transfer berulir mutli (bahkan pada satu file) adalah bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .

gunakan opsi -s untuk jumlah utas yang ingin Anda transfer data. Bagus untuk bandwidth tinggi tetapi koneksi laggy, karena lag membatasi ukuran jendela TCP per utas.

tukang itu
sumber
0

Mungkin tidak berhubungan, tetapi jika Anda menginginkan sesuatu yang lebih nyata, Anda dapat mencoba GlusterFS . Bekerja dengan baik, tetapi membutuhkan penyetelan jika Anda ingin membaca file kecil secara efisien.

Kyle
sumber