Cách tăng tốc rsync cho các tệp nhỏ


15

Tôi đang cố gắng chuyển hàng ngàn tệp nhỏ từ máy chủ này sang máy chủ khác bằng lệnh sau:

rsync -zr --delete /home/user/ user@10.1.1.1::backup

Hiện tại việc chuyển tiền mất nhiều thời gian (tôi chưa tính thời gian). Có cách nào để làm điều này nhanh hơn? Tôi có nên sử dụng một công cụ khác? Tôi có nên sử dụng rsync trên ssh thay vì sử dụng giao thức rsync không?


Có thực sự chỉ có hàng trăm? Như trong ít hơn một vài ngàn?
Zoredache

Nhiều hơn thế nữa ... 475.576 tổng cộng 9,3GB

Điều đó sẽ hút bằng cách sử dụng hầu hết mọi công cụ hoạt động ở cấp hệ thống tập tin. Tôi nghi ngờ nếu bạn thực hiện một số hồ sơ, bạn sẽ thấy một lượng lớn thời gian được gọi là cuộc gọi stat().
Zoredache

Tại sao không -anhưng -r?
kamae

Câu trả lời:


13

Bạn cần xác định nút cổ chai. Đó không phải là rsync. Nó có thể không phải là băng thông mạng của bạn. Như @Zoredache đề xuất, rất có thể số lượng iops khổng lồ được tạo bởi tất cả các stat()cuộc gọi. Bất kỳ công cụ đồng bộ hóa nào cũng sẽ cần thống kê các tệp. Trong khi đồng bộ hóa chạy iostatđể xác minh.

Vì vậy, câu hỏi trở thành; Làm thế nào để tôi tối ưu hóa stat? Hai câu trả lời dễ dàng:

  1. có được một hệ thống con đĩa nhanh hơn (trên cả hai máy chủ nếu cần) và
  2. điều chỉnh hệ thống tập tin của bạn (ví dụ để gắn kết ext3 với noatimevà thêm a dir_index).

Nếu tình cờ, đĩa của bạn không phải là giới hạn thì bạn có thể thử nghiệm tách cây dir thành nhiều cây khác nhau và chạy nhiều rsyncs.


1
Cảm ơn, tôi sẽ xem xét dir_index và xem cách tôi tiếp tục (chúng tôi đã sử dụng noatime). Có vẻ như đĩa io là nút cổ chai, nhưng chúng tôi đã chạy 15k ổ đĩa SAS trong RAID 5. Bước tiếp theo sẽ là SSD, nhưng công ty lưu trữ của chúng tôi chưa cung cấp cho chúng tôi tùy chọn đó.

5

Nén không hữu ích cho các tệp nhỏ (giả sử, dưới 100 byte). Đối với các tệp nhỏ, đôi khi phiên bản nén có thể còn lớn hơn bản gốc. Hãy thử rsynclệnh mà không có -zcờ.

sshlà tốt cho bảo mật, nhưng sẽ không làm cho việc chuyển tiền nhanh hơn. Trên thực tế, nó sẽ làm cho việc chuyển tiền chậm hơn do nhu cầu mã hóa / giải mã.

rsynccó thể không nhanh khi lần đầu tiên được chạy vì có rất nhiều dữ liệu cần truyền. Tuy nhiên, nếu bạn có kế hoạch chạy lệnh này định kỳ, các lần chạy tiếp theo có thể nhanh hơn nhiều vì rsyncthông minh về việc không chuyển các tệp không thay đổi.


Nếu bạn chỉ sử dụng rsyncmáy khách, nó sẽ sử dụng SSH phía sau hậu trường. Bạn phải tránh đường để vô hiệu hóa mã hóa khi sử dụng rsync. Xem: stackoverflow.com/a/1821574/64911
mlissner

1

Bạn đang sử dụng phiên bản nào của rsync? Bất cứ điều gì cũ hơn 3.0.0 (ở cả hai đầu) đều không có tính năng filelist gia tăng, giúp tăng tốc độ chuyển lớn.


Sử dụng rsync 3.0.5 trên cả hai máy chủ.

1

Thêm vào -v --progressdòng lệnh rsync của bạn

rsync được thực hiện trong 2 bước:

  1. duyệt sâu tất cả các tệp trên cả hai nền tảng để so sánh kích thước và mdate của chúng
  2. thực hiện chuyển khoản

Nếu bạn là rsync hàng ngàn tệp nhỏ trong các thư mục lồng nhau, có thể đơn giản là rsync dành phần lớn thời gian này để đi vào thư mục con và tìm tất cả các tệp

Nếu thời gian không dành cho trình duyệt, thời gian có thể chỉ đơn giản là do việc thêm tất cả các độ trễ bắt đầu mỗi lần chuyển tệp mới.


1

Trong trường hợp các hệ thống tập tin ext3 hoặc ext4 có liên quan, hãy kiểm tra xem cả hai đều có tính năng dir_index được bật chưa! Điều này tăng gấp ba lần thông qua rsync trong trường hợp của tôi.

Xem chi tiết trong câu trả lời của tôi tại: /server//a/759421/80414

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.