inotify+rsync 실시간 동기화 파일

2549 단어
원문을 클릭하면 창고 기술 교류군에 가입할 수 있습니다(QQ군 번호: 254842154)
시스템 관리자에게 어떻게 여러 서버 사이에서 실시간으로 파일을 동기화하는지는 매우 중요한 임무이다.이전에 나는 서버 파일을 정시에 동기화하는 방법을 소개한 글이 있었지만, 실시간으로 동기화할 수는 없었다.오늘 여러분에게 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_ipip_address1ip_address2는 실제 IP 주소로 바뀌고 여러 IP 주소는 공백으로 구분됩니다.src는 실시간 동기화가 필요한 디렉터리로 원본 서버와 대상 서버의 디렉터리 구조가 일치합니다.스크립트 파일을 rsync로 저장합니다.sh, 그리고 정시 작업으로 한 번 실행합니다. 실행에 성공하면 이 정시 작업을 취소합니다. (스크립트를 한 번 어떻게 실행해야 할지 잠시 모르겠습니다. 이 흙 방법만 사용할 수 있습니다.
inotifywait의 e 매개 변수는 어떤 이벤트를 감청할지 나타냅니다.
access   , 。
modify   , 。
attrib   , 。
move     , 。
create   , 
open     , 。
close    , 。
delete   , 。

작업이 실행 중인지 확인
ps -ef |grep inotify

스크립트 파일을 수정했다면, inotify를 닫은 다음 시간 작업을 다시 실행하고 취소해야 합니다.
sudo pkill inotifywait

좋은 웹페이지 즐겨찾기