Rsync 데몬 최대 연결 트래픽 정체

Rsync 데몬 최대 연결 트래픽 정체

나는 모든 rync 요구 사항에 대해 rsync 데몬을 사용하는 것을 선호합니다. 왜냐하면 깔끔한 중앙 집중식 관리를 제공하고 시스템 리소스를 절약하기 때문입니다. 따라서 광산에는 /etc/rsyncd.conf여러 모듈 항목이 포함되어 있습니다.

실제 rsync 명령에 대한 내 래퍼 스크립트는 while모두 연결이 끊어진 경우 rsync를 즉시/반복적으로 다시 연결하는 루프입니다.

질문:
max connections = 1각 모듈의 변수 항목 읽기세계적인대신에개별적으로모듈당. 따라서 @ERROR: max connections (1) reached -- try again later(rsync 데몬이 먼저 연결되면 사용 가능한 단일 데몬을 얻게 됩니다.)잘못된 글로벌 max connection = 1, 다른 모든 연결이 실패하게 됩니다..짜증납니다).

그렇지 않으면 max connections = 1루프 while가 무한 스레드를 시작하고 불필요한 리소스를 소비할 수 있으므로 모듈당 연결 수가 제한됩니다. 동시에 각 문서에는 max connections = 1file.lock이 함께 제공됩니다.per module

이 내 꺼야 /etc/rsyncd.conf:

[home]
path = /home/username
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
read only = yes
# Data source information
max connections = 1
lock file = /var/run/rsyncd-home.lock

[prod-bkup]
path = /media/username/external/Server-Backups/Prod/today
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-prod-bkup.lock

[test-bkup]
path = /media/username/external/Server-Backups/Test/today
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-test-bkup.lock

[VminRoot2]
path = /root/VDI-Files
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-VminRoot2.lock

다음은 rsync-daemon 래퍼 스크립트 중 하나의 예입니다.

#!/bin/sh
#
#
while [ 1 ]
do

   cputool --load-limit 7.5 -- nice -n -15 rsync -avxP --no-i-r --rsync-path="rsync" --log-file=/var/log/rsync-home.log --exclude 'snap'  --exclude 'lost+found' --exclude=".*" --exclude=".*/" 127.0.0.1::home /media/username/external/home-files-only && sync && echo 3 > /proc/sys/vm/drop_caches
   
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 10
    fi
done

#end of shell script

질문
이 오류를 어떻게 제거할 수 있나요 ERROR: max connections (1) reached -- try again later?

답변1

내가 내린 해결책은 while loop연결이 아직 설정되지 않았거나 연결이 끊어진 경우 이 작업을 한 번만 수행하는 것이었습니다.

노트:.lockrsync-daemon 구성에 대한 문서에 따르면 해결 방법이 아닌 내 솔루션은 불필요해야 하지만 각 모듈에 대해 개별적으로 이름이 지정된 파일이 있음에도 불구하고 A 방식으로 연결하는 첫 번째 스크립트는 while loop방지하는 것이 아닌 것 같습니다. 다른 .lock파일은 해당 스크립트에서 사용되지 않습니다. (rsync 오류?)

해결 방법 1(빠르고 지저분함):

flock -n <lock file> <script>

또는 제 경우에는 다음 명령을 사용하여 cron 작업을 실행합니다.

flock -n /var/run/rsyncd-home.lock /path/to/my_script.sh

경고하다- 이로 인해 스크립트가 오래된 잠금 파일에 취약해져서 다음 간격에서 실행되지 않을 수 있습니다.

해결 방법 2:
그래서 나는방탄접근 방식(그래서...필요하다면 사람들에게 내 이해를 바로잡도록 권유합니다)...

먼저 내가 그랬어apt install procmail

거기에서 /usr/local/bin/backupscript.sh다음과 같이 편집했습니다.

#!/bin/bash
#
LOCK=/var/run/rsyncd-home.lock
remove_lock()
{
    rm -f "$LOCK"
}
another_instance()
{
    echo "There is another instance running, exiting"
    exit 1
}
lockfile -r 0 -l 3600 "$LOCK" || another_instance
trap remove_lock EXIT

#new using rsyncd & perpetual restart
while [ 1 ]
do
   cputool --load-limit 7.5 -- nice -n -15 rsync -avxP --no-i-r --rsync-path="rsync" --log-file=/var/log/rsync-home.log --exclude 'lost+found' --exclude=".*" --exclude=".*/" 127.0.0.1::home /media/username/external/home-files-only && sync && echo 3 > /proc/sys/vm/drop_caches
   
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 10
    fi
done

#end of shell script

프레스토 악장:
스크립트는 rsync 데몬에 한 번만 연결되며 while 루프로 인해 연결이 끊어지면 다시 연결되며 오래된 잠금 파일이 향후 간격으로 백업 프로세스를 방해할 위험이 없습니다...(즉, 문제 해결되었습니다).

관련 정보