inotify+rsync 실시간 동기화 파일
시스템 관리자에게 어떻게 여러 서버 사이에서 실시간으로 파일을 동기화하는지는 매우 중요한 임무이다.이전에 나는 서버 파일을 정시에 동기화하는 방법을 소개한 글이 있었지만, 실시간으로 동기화할 수는 없었다.오늘 여러분에게 inotify+rsync의 실시간 동기화 방안을 소개합니다. 파일 백업, 여러 대의 부하 서버 코드 동기화 등 장면에 응용할 수 있습니다.
전제 조건
otify는 linux 호스트가 2.6.13에서 도입한 파일 시스템 변화 알림 메커니즘입니다.따라서 서버 버전이 inotify 메커니즘을 지원하는지 확인해야 합니다
grep INOTIFY_USER /boot/config-$(uname -r)
하면, 만약, 만약...
CONFIG_INOTIFY_USER=y
지지하다.
inofity-tools 키트 설치
yum install inotify-tools
응용 장면
여러 대의 부하 서버의 코드는 일반적으로 실시간으로 일치를 유지해야 한다. 전통적인 방법은crontab를 사용하여 정시 작업을 동기화하는 것이다. 이런 방법은 실시간이 부족하고 효율이 낮다.오늘 inotify+rsync를 조합하여 새로운 코드 동기화 방안을 소개합니다.현재 서버 A, B, C, 서버 3대가 부하 서버이고 사이트가 있는 디렉터리 구조가 일치한다고 가정하십시오.이제 코드를 A 서버에만 게시하고 코드를 B 및 C 서버에 자동으로 동기화합니다.A서버가 공개 키를 통해 B와 C에 로그인할 수 있도록 하려면 다음 3단계를 수행해야 합니다.
① 서버 A에서 공개 키와 비밀 키를 생성합니다.ssh-keygen-trsa를 사용하여 생성하고 회차하면 됩니다.
② 비밀 키 폴더에 들어가 파일을 봅니다.여기서 id_rsa.pub는 공개 키, id_rsa는 개인 키입니다.cd ~/.ssh
③ id_ 열기rsa.pub 파일을 서버 B와 C
/root/.ssh/authorized_keys
파일에 복사합니다. /root/.ssh
디렉터리에 authorized_keys
파일이 없으면 새 파일을 만듭니다.이제 A 서버에서 ssh 명령을 통해 비밀번호 없이 로그인할 수 있습니다
// , ip_address ip
ssh root@ip_address -p 27631
//
ssh root@ip_address
스크립트 작성:
#!/bin/sh
#var
src="/var/www/html/t/"
des_ip="ip_address1 ip_address2"
#function
inotify_fun ()
{
/usr/bin/inotifywait -mrq --timefmt '%Y%m%d-%H:%M' --format '%T %e %w%f' \
-e attrib,close_write,delete,create,modify,move $1|while read time file
do
for ip in $des_ip
do
echo $des_ip
echo "`date +%Y%m%d-%T`: rsync -avzq --delete --progress $1 root@$ip:$1"
rsync -avzrtopgq --delete --progress $1 root@$ip:$1
#echo
done
done
}
#main
for a in $src
do
inotify_fun $a
done
des_ip
중ip_address1
과ip_address2
는 실제 IP 주소로 바뀌고 여러 IP 주소는 공백으로 구분됩니다.src
는 실시간 동기화가 필요한 디렉터리로 원본 서버와 대상 서버의 디렉터리 구조가 일치합니다.스크립트 파일을 rsync로 저장합니다.sh, 그리고 정시 작업으로 한 번 실행합니다. 실행에 성공하면 이 정시 작업을 취소합니다. (스크립트를 한 번 어떻게 실행해야 할지 잠시 모르겠습니다. 이 흙 방법만 사용할 수 있습니다.inotifywait의 e 매개 변수는 어떤 이벤트를 감청할지 나타냅니다.
access , 。
modify , 。
attrib , 。
move , 。
create ,
open , 。
close , 。
delete , 。
작업이 실행 중인지 확인
ps -ef |grep inotify
스크립트 파일을 수정했다면, inotify를 닫은 다음 시간 작업을 다시 실행하고 취소해야 합니다.
sudo pkill inotifywait
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.