기가비트 LAN을 통해 약 9TB의 데이터를 전송하고 있습니다. 이 작업을 가능한 한 빨리 완료하기 위해(희망합니다) 소스의 NFS를 통해 대상을 마운트하고 rsync를 실행했습니다.
내 설치 옵션은 다음과 같습니다.
x.x.x.x:/mnt on /mnt type nfs (rw,noatime,nodiratime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=x.x.x.x,mountvers=3,mountport=56548,mountproto=udp,local_lock=none,addr=x.x.x.x)
이것은 내 rsync 명령입니다.rsync -avWH --progress ./ /mnt/
nload를 살펴보면 단일 파일의 속도가 최대 900MBps까지 급증한 다음 KBps 범위의 숫자로 떨어졌다가 다시 백업되는 것을 볼 수 있습니다. 다음은 전송이 파일 중간에 중지되는 것처럼 보이는 것을 볼 수 있는 nload의 그래프입니다. 이러한 파일의 크기는 일반적으로 5-6GB입니다. MTU는 9000입니다. 스위치는 적절한 백플레인 속도를 갖춘 cisco 3750x입니다. 이들은 2개의 다른 호스트에 있는 esxi 6.7 게스트입니다. 네트워크 리소스를 놓고 경쟁하는 다른 게스트는 없습니다.
이미지는 전송중인 파일입니다
기본적으로 설정 중 하나가 잘못되었거나 전송 속도를 일정하게 유지하기 위해 일부 설정을 변경할 수 있기를 바랍니다.
CPU 사용률은 소스에서 약 10%, 대상에서 약 10%입니다. 이상하게도 대상에서 iotop은 nfsd에서 99%의 I/O를 표시하고(때때로) 소스에서는 rsync에서 60-80%의 IO를 표시합니다. 7200RPM WD 레드 하드 드라이브입니다. 승
답변1
불행하게도 일어날 수 있는 최악의 상황은 rsync
NFS 전체에서 이를 사용하는 것입니다. (또는 로컬 시스템에 마운트된 원격 파일 시스템.) 이렇게 하면 rsync
알려진 효율성 향상 기능이 거의 모두 꺼집니다.
데이터가 너무 많으면 시스템 간에 데이터를 전송하는 가장 빠른 방법 중 하나는 데이터를 다른 시스템에 덤프하는 것입니다.암호화되지 않은대상 시스템에 이미 무엇이 있는지에 관계없이 연결합니다.
최소한 부분적인 복제본이 있으면 가장 좋은 옵션은 rsync
두 호스트 간에 이를 사용하는 것입니다. 이를 통해 rsync
각 호스트에서 하나의 프로세스를 실행하여 차이점을 고려하고 비교할 수 있습니다. ( rsync
크기와 수정 날짜가 동일한 파일은 완전히 건너뜁니다. 다른 파일의 경우 클라이언트와 서버 구성 요소는 롤링 체크섬을 수행하여 아직 전송해야 할 블록을 결정합니다.)
빠른 덤프. 이 예에서는 인증이나 암호화를 전혀 사용하지 않습니다. 하지만 압축이 적용되며
-z
다음 두 플래그를 생략하여 압축을 제거할 수 있습니다.수신 서버를 시작하려면 대상 머신에서 다음 명령을 실행하세요.
cd /path/to/destination && nc -l 50505 | pax -zrv -pe
전송 클라이언트를 시작하려면 원본 머신에서 다음 명령을 실행하세요.
cd /path/to/source && pax -wz . | nc destination_server 50505
일부 버전에서는
nc -l
플래그(예: )를 사용하여 포트를 지정해야 할 수도 있습니다nc -l -p 50505
. Debian의 OpenBSD 버전(nc.openbsd
링크 )/etc/alternatives
은/bin/nc
그렇지 않습니다.전송 속도가 느려집니다. 이 예에서는 인증 및 암호화를 제공하는
rsync
over 를 사용합니다. 소스 경로의 후행 슬래시( )를ssh
놓치지 마세요 . 압축을 원하지 않으면 이 플래그를 생략하세요./
-z
rsync -avzP /path/to/source/ destination_server:/path/to/destination
Destination_server에 대한 루트 로그인을 허용하려면 SSH 인증서를 설정해야 할 수도 있습니다. -H
하드 링크를 처리해야 하는 경우 이 플래그를 추가하세요.
답변2
가능하면 두 호스트 간에 직접 rsync를 사용하는 것이 가장 좋습니다. rsync는 증가된 디스크 IO를 희생하여 네트워크 IO를 최적화하도록 구축되었습니다. NFS 파일 시스템에서 rsync를 사용할 때 디스크 IO는 네트워크 IO로 변환되므로 이는 매우 차선책인 솔루션입니다. 또한 rsync가 원본과 대상을 모두 로컬로 간주하는 경우 최적화를 끄고 차이점만 전송하는 차이점 비교 알고리즘을 사용하는 대신 매번 전체 파일을 전송합니다.
5GB 파일이 있고 원본과 대상 간의 데이터 차이가 1%만 있다고 가정합니다.
- 호스트 간 전송 시 rsync는 원본 파일과 대상 파일을 확인하고 대상에서만 차이점을 전송하며, 이전 파일과 원본의 새 데이터를 사용하여 파일을 다시 만든 다음 이전 파일을 교체합니다.
- 로컬로 전송할 때 각 파일을 체크섬하는 것은 의미가 없습니다. 즉, 예제 파일에 대해 2 x 5GB를 읽고 1 x 5GB를 써야 함을 의미합니다. 전체 파일 모드로 전환하면 rsync는 1 x 5GB만 읽고 1 x 5GB만 쓰면 됩니다. 로컬 디스크에서는 디스크가 NFS일 때 네트워크 대역폭이 지붕을 통과하므로 이는 완벽하게 이해됩니다.
NFS 파일 시스템을 제공하는 호스트에 직접 rsync를 사용할 수 있다면 그렇게 하면 성능이 크게 향상되는 것을 볼 수 있습니다.