SSH를 통한 Rsync 전송이 매우 느림

SSH를 통한 Rsync 전송이 매우 느림

내 웹사이트의 원격 백업을 만들고 있습니다. 전체 카탈로그는 약 70GB이며 총 파일 수는 약 5,000,000개입니다. 백업 서버에서 실행하는 명령은 다음과 같습니다.

rsync -ah -e ssh --delete --link-dest=/backups/2013.09.06 [email protected]:/var/www/backups/2013.09.07

프로세스가 48시간 이상 실행되고 중단됩니다.

strace -p클라이언트(웹 사이트가 있는 웹 서버)에서 rsync 프로세스를 실행한 결과 해당 프로세스가 일정 시간이 지난 후 select명령에서 주기적으로 중지된 = 0 (Timeout)다음 계속되는 것을 확인했습니다.

open("mysite/files/1694201", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=10083, ...}) = 0
read(3, "\r\n\320\224\320\265\321\201\321\217\321\202\321\214 \320\273\320\265\321\202, \321\210\320\265\321\201\321\202\321"..., 10083) = 10083
select(2, NULL, [1], [1], {60, 0})      = 1 (out [1], left {59, 999998})
write(1, "\374\17\0\7", 4)              = 4
select(2, NULL, [1], [1], {60, 0})      = 1 (out [1], left {59, 999999})
write(1, "\320\260\320\262\320\260\320\271\321\202\320\265...\320\232\320\270\320\264\320\260\320\271\321\202\320\265 \320\274"..., 4092) = 4092
select(2, NULL, [1], [1], {60, 0})      = 1 (out [1], left {59, 999999})
write(1, "\374\17\0\7", 4)              = 4
select(2, NULL, [1], [1], {60, 0})      = 0 (Timeout)

프로세스가 마지막 줄에서 1분 정도 중단됩니다.

왜 이런 일이 일어날 수 있습니까? 왜 프로세스가 그렇게 오래 걸리고 결코 끝나지 않습니까? strace에 있는 것은 무엇을 0 (Timeout)의미할까요?

두 서버 모두 rsync 3.0.9를 실행하며 IO는 과부하되지 않습니다.

답변1

strace의 0(Timeout)은 무엇을 의미할까요?

5번째 매개변수를 읽어보세요.선택에 전달.

분명히 rsync(자체)는 파일 백업을 위해 선택한 방법에 적합하지 않습니다. 500만 개의 파일 각각에 대해 해시를 생성하고 변경된 사항이 있는지 확인하기 위해 이를 네트워크를 통해 전송해야 합니다.

저라면 소스 서버에서 실행되는 스크립트로 마무리하겠습니다.

  1. 이전에 성공한 동기화가 시작된 시간(tstart)을 확인합니다.

  2. 소스에서 mtime > tstart가 있는 모든 파일을 찾습니다.

  3. 수정된 파일을 백업 서버로 재동기화

예를 들어

#!/bin/bash

touch newrun
find /var/www -newer lastrun -exec rsync ....
rm -f lastrun
mv newrun lastrun

답변2

50억 개의 파일이 있다고 확신하시나요?

나는 오히려 tgz를 rsync하고 tgz를 사용하고 싶습니다. 왜냐하면 고속 SAN 또는 SSD가 없고 다소 "정상적인" hd가 있는 경우 src에서 dst까지의 초기 비교에 시간이 오래 걸리기 때문입니다.

프로세스가 느린 곳은 어디입니까? 파일 전송 중 또는 초기 src<->dst 중 - 확인하시겠습니까?(증분 파일 목록을 보내는 중...)

가능하다면 양쪽 끝에서 IOWAIT를 확인하겠습니다. 그리고 컴퓨터에 md-raid가 있는 경우 cat /proc/mdstatus. 매우 나쁜 IO 성능은 재구축 공격의 결과일 수 있습니다(그러나 가능성은 거의 없음).

--progress그리고 네트워크 속도를 확인하기 위해 rsync-transfer 중에 스위치를 켠 상태에서 하나의 대용량 파일을 전송하려고 합니다 .

디버깅 힌트(이것이 문제가 아닌지 확인하기 위해 가능한 각 병목 현상을 테스트해야 합니다.)

  • -avzh --progress --stats를 사용하여 rsync를 시도하십시오.
  • io 성능을 로컬로
  • 네트워크 성능
  • hd/raid-status(SMART), 하드웨어 결함 확인

관련 정보