Chạy nhiều luồng scp cùng một lúc


11

Chạy nhiều luồng scp cùng một lúc:

Lý lịch:

Tôi thường thấy mình phản chiếu rất nhiều tập tin máy chủ và bao gồm trong các tập tin máy chủ này là hàng ngàn tập tin 1kb-3kb nhỏ. Tất cả các máy chủ được kết nối với cổng 1Gbps, thường trải rộng ở nhiều trung tâm dữ liệu khác nhau.

Vấn đề:

SCP chuyển các tệp nhỏ này, từng phần một và mất nhiều thời gian và tôi cảm thấy như mình đang lãng phí tài nguyên mạng tuyệt đẹp mà mình có.

Giải pháp?:

Tôi có ý này; Tạo một tập lệnh, chia các tệp thành số lượng bằng nhau và bắt đầu 5-6 luồng scp, về mặt lý thuyết sau đó sẽ được thực hiện nhanh hơn 5-6 lần, phải không? Nhưng tôi không có kinh nghiệm về kịch bản linux!

Câu hỏi:

  • Có một giải pháp tốt hơn cho vấn đề được đề cập?
  • Có một cái gì đó như thế này đã tồn tại?
  • Nếu không, có ai đó sẽ cho tôi một khởi đầu, hoặc giúp tôi ra ngoài?
  • Nếu không đến 2, hoặc 3, đâu sẽ là nơi tốt để bắt đầu tìm hiểu kịch bản linux? Giống như bash, hoặc khác.

Câu trả lời:


10

Tôi sẽ làm như thế này:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Tùy thuộc vào các tệp bạn đang chuyển, nó có thể có ý nghĩa để cho phép nén trong các tarlệnh:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Cũng có thể có nghĩa là bạn chọn một mật mã thân thiện với CPU cho sshlệnh (như arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Hoặc kết hợp cả hai, nhưng nó thực sự phụ thuộc vào nút cổ chai của bạn là gì.
Rõ ràng rsyncsẽ nhanh hơn rất nhiều nếu bạn đang thực hiện đồng bộ gia tăng.


10

Sử dụng rsyncthay vì scp. Bạn có thể sử dụng rsyncqua sshdễ dàng như scp, và nó hỗ trợ "pipelining of chuyển file để giảm thiểu độ trễ chi phí".

Một mẹo: Nếu dữ liệu có thể nén được, hãy bật tính năng nén. Nếu không, vô hiệu hóa nó.


Tôi vừa thực hiện một lần chuyển tối qua với scp và đang thực hiện một lần chuyển tương tự khác với rsync - có vẻ nhanh hơn rất nhiều. Tuy nhiên, dường như vẫn đang chuyển một tệp cùng một lúc - bất kỳ ý tưởng nào về cách thực hiện việc này thực hiện nhiều luồng (Beyond --include'ing và --exclude'ing một loạt các thư mục thông qua tập lệnh; xem: sun3.org/archives / 280 )
gửi

Không có điểm nào chuyển nhiều tệp cùng một lúc với băng thông hạn chế. Tôi tin rằng bạn sẽ không xem xét lệnh này khi băng thông dồi dào. Loại bỏ chi phí độ trễ đã giúp ích rất nhiều khi bạn đối phó với rất nhiều tệp nhỏ. Ngay cả khi bạn có thể sao chép nhiều tệp cùng một lúc, băng thông hạn chế sẽ không tăng tốc độ truyền tệp của bạn.
Joe

1

Tôi đã đề xuất GNO Parallel (vẫn yêu cầu một số công việc viết kịch bản từ phía bạn), nhưng sau đó tôi đã tìm thấy pscp (là một phần của pssh ). Điều đó có thể chỉ phù hợp với nhu cầu của bạn.


1
Nó dường như psshhoạt động đồng thời cho nhiều máy. Tôi không nghĩ rằng nó thực hiện song song cấp độ tập tin.
David Schwartz

Tôi có lẽ nên được cụ thể - tôi có nghĩa là pscp.
Rilindo

1

Không phải scp trực tiếp, nhưng một tùy chọn để chuyển luồng theo luồng (ngay cả trên các tệp đơn) là bbcp - https://www2.cisl.ucar.edu/resource/st Storage-and-file-systems / bbcp .

sử dụng tùy chọn -s cho số lượng chủ đề bạn muốn truyền dữ liệu. Tuyệt vời cho băng thông cao nhưng kết nối chậm, vì độ trễ giới hạn kích thước cửa sổ TCP trên mỗi luồng.


0

Có thể không liên quan, nhưng nếu bạn muốn một cái gì đó thời gian thực hơn, bạn có thể thử GlusterFS . Hoạt động tốt, nhưng yêu cầu một số điều chỉnh nếu bạn muốn đọc các tệp nhỏ một cách hiệu quả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.