저는 Ubuntu 20.04를 사용하고 있으며 다음 bash 스크립트/rsync를 사용하여 ssh를 통해 원격 서버의 rsync-daemon에 연결하고 있습니다.
단점은 ssh를 통한 rsync를 사용하면 서버 부하도 발생하므로 서버 부하 문제를 극복하기 위해 아래와 같이 ionice 값을 추가했습니다. 로드는 더 이상 문제가 되지 않습니다.
내 문제는 ionice 값으로 인해 ssh 연결이 불안정해지는 것 같고, 이로 인해 ssh가 계속 연결을 끊었다가 다시 연결하기 때문에 내 로그인 알리미 스크립트가 백만 개의 이메일을 보내게 된다는 것입니다.
로드 문제에 대한 더 나은 솔루션을 보거나 SSH 연결을 안정적으로 유지하는 방법을 아는 사람이 있습니까?
#!/bin/bash
while [ 1 ]
do
rsync -avzxP --delete --checksum --append-verify --timeout=180 --bwlimit=48 --rsync-path="sudo ionice -c 3 rsync" --log-file=/var/log/rsync.log --exclude 'var-logs' --password-file=/etc/rsyncd.passwd -e "ssh -l backups" XXX.XX.XXX.XX::backup-data /media/username/WebMade/Server-Backups/Prod/today/
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 10
fi
done
#EOF
답변1
이 rsync 명령을 사용하면 원격 컴퓨터에서 로컬 컴퓨터로 파일을 가져올 수 있습니다.
이 -z
옵션을 사용하려면 원격 컴퓨터의 rsync 데몬이 네트워크를 통해 전송된 파일 데이터를 로컬 rsync로 압축해야 합니다(그리고 로컬 rsync가 데이터를 파일에 쓰기 전에 데이터 압축을 풀려면). ionice
이 옵션에 지정된 값은 --rsync-path
원격 컴퓨터에서 rsync 프로세스의 디스크 I/O 우선 순위를 낮춥니다.
컴퓨터의 디스크에서 파일을 읽는 프로세스는 일반적으로 디스크가 매우 느리지 않는 한 컴퓨터에 큰 부하를 주지 않으므로 ionice
원격 컴퓨터의 부하를 줄이는 데 도움이 되지 않습니다. 데이터 압축의 경우 압축을 수행하는 프로세스는 일반적으로 컴퓨터에 큰 CPU 로드를 추가하는 반면, 데이터 압축을 해제하는 프로세스는 작은 CPU 로드만 추가합니다. --bwlimit
이 옵션은 파일 전송이 두 컴퓨터 사이의 네트워크 대역폭을 모두 소비하지만 일반적으로 혼잡한 네트워크는 두 컴퓨터 모두에서 추가 로드로 표시되지 않는 경우에 유용합니다.
-z
내 경험에 따르면 컴퓨터 간의 네트워크 연결이 LAN에서 고속으로 작동하거나 가장 현대적인 "고속" 인터넷을 통해 집에 연결되어 있는 경우 rsync에 네트워크(옵션)를 통해 전송되는 데이터를 압축하도록 요청하는 것은 그다지 유용하지 않습니다. 파일을 전송하는 데 걸리는 시간을 줄이기 위해 할 수 있는 일은 거의 또는 전혀 없지만 보내는 쪽에서는 CPU 소비가 더 높아집니다.
이를 바탕으로 및 옵션 --bwlimit
을 제거하는 것이 좋습니다 . 마지막 문제는 해결하려고 했던 서버 부하를 유발할 가능성이 높습니다.--rsync-path
-z