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.
linux
centos
scp
multi-threading
caesay
sumber
sumber
Jawaban:
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
tar
perintah:tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
Mungkin juga masuk akal bahwa Anda memilih cipher yang lebih ramah untuk
ssh
perintah (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
rsync
akan jauh lebih cepat jika Anda melakukan sinkronisasi tambahan.sumber
Gunakan
rsync
sebagai gantiscp
. Anda dapat menggunakanrsync
lebihssh
semudahscp
, dan mendukung "pipelining transfer file untuk meminimalkan latency biaya".Satu tip: Jika data kompresibel, aktifkan kompresi. Jika tidak, nonaktifkan.
sumber
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.
sumber
pssh
beroperasi secara bersamaan ke beberapa mesin. Saya tidak berpikir itu menerapkan paralelisme tingkat file.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.
sumber
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.
sumber