rsync+inotify實現在Linux上文件實時同步

jopen 10年前發布 | 51K 次閱讀 rsync Linux

首先下載好兩個工具:

rsync地址: http://rsync.samba.org/download.html

inotify-tools: http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

這次的實驗主要有兩臺機器,172.16.54.114172.16.54.115,我們把115做為源服務器,114做為目標服務器

主要是把115/home/md中的所有數據實時同步到114上的/home/md

1,先關閉防火墻

vi /etc/selinux/config #編輯防火墻配置文件

#SELINUX=enforcing #注釋掉

#SELINUXTYPE=targeted #注釋掉

SELINUX=disabled #增加

:wq! #保存,退出

setenforce 0 #立即生效

 

2,查看端口是否被占用(直接在命令行輸入)及安裝

netstat –apn | grep 873

 

安裝rsync,在兩臺服務器上都要進行這個步驟

首先將下載的包解壓

tar -xzvf  rsync-3.1.0.tar.gz

解壓后進入目錄

./configure --prefix=/usr/local/rsync

 

#說明安裝在/usr/local/rsync目錄中

在這一步之前要安裝相對就的gccgcc-c++

make

make install

安裝完畢

 

chkconfig rsync on #隨系統啟動

這個只在114上做

創建rsync配置文件rsync.conf

vi /etc/rsyncd.conf #創建配置文件,添加以下代碼

log file = /var/log/rsyncd.log #日志文件位置,啟動rsync后自動產生這個文件,無需提前創建

pidfile = /var/run/rsyncd.pid  #pid文件的存放位置

lock file = /var/run/rsync.lock  #支持max connections參數的鎖文件

secrets file = /etc/rsync.pass  #用戶認證配置文件,里面保存用戶名稱和密碼,后面會創建這個文件

motd file = /etc/rsyncd.Motd  #rsync啟動時歡迎信息頁面文件位置(文件內容自定義)

[md] #自定義名稱

path = /home/md/ #rsync服務端數據目錄路徑

comment = md #模塊名稱

uid = root #設置rsync運行權限為root

gid = root #設置rsync運行權限為root

port=873  #默認端口

use chroot = no #默認為true,修改為no,增加對目錄文件軟連接的備份

read only = no  #設置rsync服務端文件為讀寫權限

list = no #不顯示rsync服務端資源列表

max connections = 200 #最大連接數

timeout = 600  #設置超時時間

auth users = md #執行數據同步的用戶名,可以設置多個,用英文狀態下逗號隔開

hosts allow = 172.16.54.114  #允許進行數據同步的客戶端IP地址,可以設置多個,用英文狀態下逗號隔開

#hosts deny = 218.234.1.254 #禁止數據同步的客戶端IP地址,可以設置多個,用英文狀態下逗號隔開(這個比較隨便,也可以沒有)

:wq!  #保存,退出

 

創建用戶認證文件

vi /etc/rsync.scrt  #配置文件,添加以下內容

md:123456 #格式為 用戶:密碼,如果是多個,可以一行一個

:wq!  #保存,退出

chmod 600 /etc/rsyncd.conf  #設置文件所有者讀取、寫入權限

chmod 600 /etc/rsync.scrt  #設置文件所有者讀取、寫入權限

 

在此,我們普及一個問題,我們先進入/etc/xinetd.d文件中,可以看到rsync這個文件,說明rsync是由xinetd管理,可以通過xinetd來啟動rsync

/etc/init.d/xinetd start  #啟動

service xinetd stop   #停止

service xinetd restart #重新啟動

------------------------只在114上進行的到此為止--------------------

 

以下只到115上進行

vi /etc/rsync.scrt  #編輯文件,添加以下內容

123456 #密碼

:wq! #保存退出

chmod 600 /etc/passwd.txt #設置文件權限,只設置文件所有者具有讀取、寫入權限即可

inotify-tools下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

 

上傳inotify-tools-3.14.tar.gz/usr/local/src目錄下

cd /usr/local/src

tar zxvf inotify-tools-3.14.tar.gz  #解壓

cd inotify-tools-3.14 #進入解壓目錄

./configure --prefix=/usr/local/inotify  #配置

make  #編譯

make install  #安裝

3、設置系統環境變量,添加軟連接

echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh

source /etc/profile.d/inotify.sh  #使設置立即生效

echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf

ln -s /usr/local/inotify/include  /usr/include/inotify

4、修改inotify默認參數(inotify默認內核參數值太小)

查看系統默認參數值

sysctl -a | grep max_queued_events

結果是:fs.inotify.max_queued_events = 16384

sysctl -a | grep max_user_watches

結果是:fs.inotify.max_user_watches = 8192

sysctl -a | grep max_user_instances

結果是:fs.inotify.max_user_instances = 128

修改參數:

sysctl -w fs.inotify.max_queued_events="99999999"

sysctl -w fs.inotify.max_user_watches="99999999"

sysctl -w fs.inotify.max_user_instances="65535"

參數說明:

max_queued_events

inotify隊列最大長度,如果值太小,會出現"** Event Queue Overflow **"錯誤,導致監控文件不準確

max_user_watches

要同步的文件包含多少目錄,可以用:find /home/www.osyunwei.com -type d | wc -l 統計,必須保證max_user_watches值大于統計結果(這里/home/www.osyunwei.com為同步文件目錄)

max_user_instances

每個用戶創建inotify實例最大值

 

5、創建腳本,實時觸發rsync進行同步

vi /usr/local/inotify/rsync.sh   #編輯,添加以下代碼

#!/bin/sh

srcdir=/home/md/

dstdir=buspos

rsyncuser=buspos

rsyncpassdir=/etc/rsync.scrt

dstip="172.16.54.114"

for ip in $dstip

do

rsync -avH --port=873 --progress --delete  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir  //次數的password-file是服務端的密碼文件

done

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |  while read file

do

for ip in $dstip

do

rsync -avH --port=873 --progress --delete  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir

echo "  ${file} was rsynced" >> /tmp/rsync.log 2>&1

done

done

 

 

 

chmod +x /usr/local/inotify/rsync.sh   #添加腳本執行權限

 

6、設置腳本開機自動執行

vi /etc/rc.d/rc.local  #編輯,在最后添加一行

sh /usr/local/inotify/rsync.sh & #設置開機自動在后臺運行腳本

:wq!  #保存退出

啟動腳本

nohup  . /usr/local/inotify/rsync.sh &

 

關閉了窗口也沒事,已在后臺運行下次開機自動啟動

 

 

 

也可以參照此博客:http://dl528888.blog.51cto.com/2382721/771533

還有這個,建議參考這個文檔:http://ixdba.blog.51cto.com/2895551/580280/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!