rsync+inotify 實現服務器目錄自動同步(centos)

使用rsync+inotify的意義:
其實同步服務器之間的目錄,只需要安裝rsync並通過腳本就可以做到定時同步。但是採用inotify是爲了做到更精確的同步,因爲inotify是一個文件監控工具,它會對指定文件的狀態進行實時監控輸出。實時同步的邏輯就是通過inotify對同步內容監控,然後通過記錄來使用rsync命令實現實時傳輸。
本文章只對操作過程做詳細記錄,具體功能一概而過。
模擬環境:
將服務器1中的a目錄,b目錄實時同步到服務器2中的c目錄,d目錄。a→c b→d
服務器1 IP:172.16.1.20 a目錄:/alidata/htmlService/ b目錄: /alidata/phpService/
服務器2 IP:172.16.8 c目錄:/alidata/htmlService/ d目錄: /alidata/phpService/
操作注意事項:
*建議用root用戶進行安裝

安裝rsync,測試手動同步

服務器2:
1.安裝rsync

yum -y install rsync

2.添加pass文件,pass文件名和位置都可自定義

vim /root/rsync.pass
user:password           #自定義rsync用戶名和密碼,中間冒號隔開
保存退出
chmod 600 /root/rsync.pass  #修改文件權限,必須要600

3.打開/etc/rsyncd.conf,修改如下:

port = 873      										#rsync服務端口
log file = /var/log/rsync/rsyncd.log
pid file = /var/log/rsync/rsyncd.pid

[htmlService]					                        #自定義模塊名稱,一個目錄對應一個模塊
path = /alidata/htmlService/							#被同步的目錄,c目錄
uid = root												#使用root用戶執行rsync
gid = root
read only = no
write only = no
auth users = nginx_user
secrets file = /root/rsync.pass 			            #pass文件位置
hosts allow = 172.16.1.20                               #允許訪問的IP,服務器1

[phpService]
path = /alidata/phpService/
uid = root
gid = root
read only = no
write only = no
auth users = nginx_user
secrets file = /root/rsync.pass
hosts allow = 172.16.1.20

4.啓動rsync服務,並添加自啓動

rsync --daemon
echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local

服務器1
1.安裝xinet,rsync,inotify

yum -y install rsync xinet

2.添加pass文件,輸入服務器1中設置的密碼

vim /root/rsync.pass
password  
保存退出
chmod 600 /root/rsync.pass  #修改文件權限,必須要600

3.測試rsync命令是否成功

執行命令:
rsync -avpgolr --progress --delete /alidata/htmlService/ [email protected]::nginx --password-file=/root/rsync.pass

/alidata/htmlService/	#服務器要傳輸的文件目錄
user                    #pass文件用戶名
172.16.1.8		    
htmlService  	        #rsyncd.conf文件中模塊名稱
--password-file=/root/rsync.pass    :pass文件位置

安裝配置inotify

服務器1
1.安裝inotify

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz
./configure
make && make install

2.手動執行inotifywait命令,監控/alidata/htmlService/目錄

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move /alidata/htmlService/

3.再打開一個終端,運行rsync命令,檢查inotifywait命令是否輸出操作歷史

rsync -avpgolr --progress --delete /alidata/htmlService/ [email protected]::nginx --password-file=/root/rsync.pass

4.以上成功後,就可以用下面腳本做到實時同步

htmlService(){
srdir="/alidata/htmlService/"             # 同步的文件夾
user="nginx_user"                         # pass文件用戶名
ip="172.16.1.8"           
pass_file="/home/ngariPro/rsync.pass"     #pass文件位置
module_name="htmlService"                 #模塊名稱
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srdir | while read file
do
rsync -avpgolr --progress --delete $srdir $user@$ip::$module_name --password-file=$pass_file
echo "  ${file} was rsynced" >> /alidata/logs/inotify/inotify.log 2>&1
done
}
phpService(){
srdir="/alidata/phpService/"             #同步的文件夾
user="nginx_user"                        #pass文件用戶名
ip="172.16.1.8"                      
pass_file="/home/ngariPro/rsync.pass"    #pass文件位置
module_name="phpService"                 #模塊名稱
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srdir | while read file
do
rsync -avpgolr --progress --delete $srdir $user@$ip::$module_name --password-file=$pass_file
echo "  ${file} was rsynced" >> /alidata/logs/inotify/inotify.log 2>&1
done
}
htmlService
phpService

5.將腳本放在後臺運行,添加自啓動

nohup sh /root/xxx.sh &
echo “nohup sh  /root/xxx.sh &” >>/etc/rc.local
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章