Trước tiên hãy chắc chắn rằng khối lượng logic không được gắn kết. Nếu có và bạn muốn tạo một "bản sao nóng", trước tiên hãy tạo một ảnh chụp nhanh và sử dụng nó:
lvcreate --snapshot --name transfer_snap --size 1G
Tôi phải chuyển rất nhiều dữ liệu (7TB) giữa hai Máy chủ được kết nối 1Gbit, vì vậy tôi cần cách nhanh nhất có thể để làm như vậy.
Bạn có nên sử dụng SSH?
Sử dụng ssh là không cần thiết, không phải vì mã hóa của nó (nếu bạn có CPU có hỗ trợ AES-NI, nó không gây hại nhiều) mà là do bộ đệm mạng của nó. Những cái đó không được nhân rộng. Có một phiên bản Ssh được vá để giải quyết vấn đề này, nhưng vì không có gói tiền biên dịch nên nó không tiện lợi lắm.
Sử dụng nén
Khi truyền hình ảnh đĩa thô, luôn luôn nên sử dụng nén. Nhưng bạn không muốn nén trở thành nút cổ chai. Hầu hết các công cụ nén unix như gzip đều là một luồng đơn, vì vậy nếu quá trình nén bão hòa một CPU, nó sẽ là một nút cổ chai. Vì lý do đó, tôi luôn sử dụng pigz, một biến thể gzip sử dụng tất cả các lõi CPU để nén. Và điều này là cần thiết của bạn muốn tăng và tăng tốc độ GBit.
Sử dụng mã hóa
Như đã nói, ssh chậm. Nếu bạn có CPU AES-NI, đây không phải là nút cổ chai. Vì vậy, thay vì sử dụng ssh, chúng ta có thể sử dụng openssl trực tiếp.
Tốc độ
Để cung cấp cho bạn một ý tưởng về tác động tốc độ của các thành phần, đây là kết quả của tôi. Đó là tốc độ truyền giữa hai hệ thống sản xuất đọc và ghi vào bộ nhớ. Kết quả thực tế của bạn phụ thuộc vào tốc độ mạng, tốc độ ổ cứng và tốc độ CPU nguồn! Tôi đang làm điều này để cho thấy rằng ít nhất là không có hiệu suất giảm lớn.
Simple nc dd:
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 47.3576 s, 106 MB/s
+pigz compression level 1 (speed gain depends on actual data):
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 38.8045 s, 130 MB/s
+pigz compression level 5:
network traffic: 2.43GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 44.4623 s, 113 MB/s
+compression level 1 + openssl encryption:
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 43.1163 s, 117 MB/s
Kết luận: sử dụng nén cho phép tăng tốc đáng chú ý, vì nó làm giảm kích thước dữ liệu rất nhiều. Điều này thậm chí còn quan trọng hơn nếu bạn có tốc độ mạng chậm hơn. Khi sử dụng nén, xem sử dụng cpu của bạn. nếu việc sử dụng được tối đa hóa, bạn có thể thử mà không cần sử dụng nó. Sử dụng nén chỉ là một tác động nhỏ trên các hệ thống AES-NI, imho chỉ vì nó đánh cắp khoảng 30-40% cpu từ quá trình nén.
Sử dụng màn hình
Nếu bạn đang truyền nhiều dữ liệu như tôi, bạn không muốn bị gián đoạn bởi việc ngắt kết nối mạng của máy khách ssh của bạn, vì vậy tốt hơn bạn nên khởi động nó bằng màn hình ở cả hai bên. Đây chỉ là một ghi chú, tôi sẽ không viết một hướng dẫn màn hình ở đây.
Cho phép sao chép
Cài đặt một số phụ thuộc (về nguồn và đích):
apt install pigz pv netcat-openbsd
sau đó tạo một âm lượng trên đích với cùng kích thước với nguồn. Nếu không chắc chắn, hãy sử dụng lvdisplay trên nguồn để lấy kích thước và tạo mục tiêu tức là:
lvcreate -n lvname vgname -L 50G
tiếp theo, chuẩn bị đích để nhận dữ liệu:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
và khi sẵn sàng, bắt đầu chuyển tiền trên Nguồn:
pv -r -t -b -p -e /dev/vgname/lvname | pigz -1 | openssl aes-256-cbc -salt -pass pass:asdkjn2hb | nc <destip/host> 444 -q 1
Lưu ý: Nếu bạn đang truyền dữ liệu cục bộ hoặc không quan tâm đến mã hóa, chỉ cần xóa phần Openssl khỏi cả hai bên. Nếu bạn quan tâm, asdkjn2hb là khóa Mã hóa, bạn nên thay đổi nó.