저는 inotify를 사용하여 디렉터리를 모니터링하고 rsync를 사용하여 서버 간에 파일을 동기화하고 있습니다. 동기화는 완벽하게 작동하며 메모리 사용량은 기본적으로 문제가 되지 않습니다. 그러나 최근에는 많은 수의 파일(350k)이 추가되어 성능, 특히 CPU 성능에 영향을 미칩니다. 이제 rsync가 실행되면 CPU 사용량이 90%/100%로 급증하고 650,000개의 파일이 모니터링/동기화되면서 rsync를 완료하는 데 오랜 시간이 걸립니다.
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
서버의 프로세서가 느린 경우 체크섬 및 압축에 rsync를 사용하지 마십시오. rsync 명령에서 ht "-z" 옵션을 제거하겠습니다.
rsync --update -alvr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
650k 파일을 비교하기 위해 rsync를 피하지 않는다는 점에 유의하세요. /var/www의 하위 디렉터리를 하나씩 재동기화하여 한 번에 확인되는 파일 수를 줄일 수 있습니다.
답변2
답변을 게시해 주셔서 감사합니다. 정말 도움이 되었습니다. 루프를 단순화할 수 있다고 생각합니다.
EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
sync() {
rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
}
watch() {
inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*'
}
watch | (
while true ; do
read -t 1 LINE && sync
done
)
약간 수정해야 할 수도 있지만 요점은 명확해야 합니다. 저는 Amazon의 AWS s3 동기화 변형을 사용하고 있으므로 rsync 명령을 잘못 대체했을 수 있습니다.
답변3
이 도구를 확인할 수 있습니다사물을 동기화
Dockerized 버전을 사용하고 있습니다이 창고
이 도구를 사용하여 동기화할 파일이 411,000개 있는데 아랍어로 명명된 파일의 파일 이름 인코딩에 문제가 있습니다.
#!/bin/bash
docker run -d --rm \
--name=syncthing \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Jordan \
-e UMASK_SET=022 \
-p 8384:8384 \
-p 22000:22000 \
-p 21027:21027/udp \
-v "$(pwd)/config:/config" \
-v "path_to_sync:/config/Sync" \
--net host \
linuxserver/syncthing
참고: 구성에는 GUI를 사용하십시오.