需求說明
在web服務器中,作為代碼發布機A,文件同步到服務器B,C,D等集群中,可以忽略某個文件和目錄。
A服務器:內網IP: 192.168.1.2
B服務器:內網IP: 192.168.1.3
A和B的www用戶,或者root用戶免密登錄。
rsync介紹
rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。
inotify介紹
inotify是一種強大的、細粒度的、異步的文件系統事件監控機制,linux內核從2.6.13起,加入了inotify支持,通過inotify可以監控文件系統中添加、刪除,修改、移動等各種細微事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。
1.安裝rsync
A和B都做
yum -y install xinetd
yum -y install rsync
chkconfig rsync on
service xinetd restart
systemctl restart xinetd
A上操作:
rsync -av root@192.168.1.3:/rsynctest/1.txt /root
B上操作
rsync -av /rsynctest/2.txt root@192.168.1.2:/root
rsync -av -e "ssh -p 22" /rsynctest/2.txt root@192.168.1.2:/root 【如果ssh的開啟的端口不是22 則用-e指定ssh端口】
2.安裝 inotify
只在A上操作即可。
安裝inotify-tools
wget http://js.地址funet8地址.com/centos_software/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
inotifywait -m /root 【查看inotify-tools是否運行正常】
新開一個終端:
[root@localhost ~]# cd /root
[root@localhost ~]# touch bb.txt
監控到
# inotifywait -m /root
Setting up watches.
Watches established.
/root/ OPEN .bash_profile
/root/ ACCESS .bash_profile
/root/ CLOSE_NOWRITE,CLOSE .bash_profile
/root/ OPEN .bashrc
/root/ ACCESS .bashrc
/root/ CLOSE_NOWRITE,CLOSE .bashrc
/root/ CREATE bb.txt
/root/ OPEN bb.txt
/root/ ATTRIB bb.txt
/root/ CLOSE_WRITE,CLOSE bb.txt
網站實時同步腳本
test.sh 為要運行網站實時同步腳本 其中定義了要同步的網站的路徑,要同步到的ip地址,哪些后綴名的文件忽略監控,同步的用戶名,同步的文件列表,哪些文件不需要同步。
cat test.sh
#!/bin/sh
SRC=/data/wwwroot/web/test/ #代碼發布服務器目錄
DST=/data/wwwroot/web/test/ #目標服務器目錄
IP="192.168.1.3 192.168.1.4" # 這里可以用hostname,多個主機用空格
USER=www
inotifywait -mrq $SRC -e modify,delete,create,close_write,attrib | while read D E F
do
for i in $IP
do
#排除后綴名和目錄
/usr/bin/rsync -e 'ssh -p 60920'
-ahqzt --exclude "*.swp"
--exclude "*.svn"
--exclude "test/"
--exclude "runtime/"
--delete $SRC $USER@$i:$DST
done
done
運行:
增加權限:
chmod +x test.sh
后臺運行:
nohup ./test.sh > nohup_test 2>&1 &
生成一個文件才能觸發文件同步
touch /data/wwwroot/web/test/test_rsync_`date +%Y%m%d-%H:%M:%S`.html
刪除測試文件
rm -rf /data/wwwroot/web/test/test_rsync*.html
測試文件是否同步