
나는 rsync를 사용하여 서버 간 디렉터리 및 동기화 파일을 감시하기 위해 inotify를 사용하고 있습니다. 동기화는 완벽하게 작동하며 메모리 사용량은 대부분 문제가 되지 않습니다. 그러나 최근에는 많은 수의 파일(350k)이 추가되었으며 이는 특히 CPU 성능에 영향을 미쳤습니다. 이제 rsync가 실행되면 CPU 사용량이 90%/100%로 급증하고 rsync를 완료하는 데 시간이 오래 걸리며 650,000개의 파일이 감시/동기화됩니다.
rsync 속도를 높이고 변경된 디렉토리만 rsync할 수 있는 방법이 있습니까? 또는 별도의 디렉터리에 여러 개의 inotifywait를 설정하는 방법도 있습니다. 사용중인 스크립트는 아래와 같습니다.
업데이트: --update 플래그를 추가했는데 사용법이 거의 변하지 않은 것 같습니다.
#! /bin/bash
EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' | (
WAITING="";
while true; do
LINE="";
read -t 1 LINE;
if test -z "$LINE"; then
if test ! -z "$WAITING"; then
echo "CHANGE";
WAITING="";
rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
fi;
else
WAITING=1;
fi;
done)
답변1
결국 압축 옵션(z)을 제거하고 WAITING 변수를 10(초)으로 늘렸습니다. 이것이 도움이 된 것 같습니다. rsync는 여전히 CPU 로드를 급증시키지만 수명이 더 짧습니다. 신용은 다음에 대한 답변으로 이동합니다.유닉스 스택교환
답변2
당신은 또한 조사할 수 있습니다lsyncd더 많은 옵션이 있습니다. Lua 스크립팅을 사용할 수 있으므로 사용해야 하는 동시 프로세스 수와 관심을 가질 만한 더 많은 항목을 말할 수 있습니다.
이것은 rsync와 ionotify도 사용합니다.
답변3
SSH 압축을 비활성화하고 덜 까다로운 암호화 알고리즘을 사용하는 것도 고려할 수 있습니다. 예:
rsync -e "ssh -c arcfour -x -o 압축=아니요" ....
또 다른 방법은 SSH 터널을 명시적으로 설정하는 것입니다. 하지만 해당 목적을 위해서는 Rsync 데몬을 설정해야 합니다. 우리의 쉘 스크립트를 확인하십시오자주하는 질문. 귀하의 경우에도 사용할 수 있어야 합니다.