1. 程式人生 > >inotify+Rsync數據同步

inotify+Rsync數據同步

inotify+rsync

inotify+Rsync


要求:

把源服務器192.168.1.100服務器的/data/book/ 同步到目標服務器192.168.1.101服務器的/data/book/

要求實時同步,


第一部分:在目標服務器192.168.1.101上操作

一、在目標服務器安裝Rsync服務端

1、關閉SELINUX

2、開啟防火墻tcp 873端口(Rsync默認端口)

3、安裝Rsync服務端軟件


yum -y install rsync xinetd #安裝


chkconfig rsync on #rsync屬於臨時服務,是把rsync交由xinnetd來管理。

service xinetd start #啟動

4、創建rsyncd.conf配置文件,我同步兩個目錄,所以創建兩個rsync模塊,用戶名可以用一個。

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

log file = /var/log/rsyncd.log 
pidfile = /var/run/rsyncd.pid 
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
uid = root
gid = root
use chroot = no
max connections = 1200
timeout = 600
#模塊1
[book]
path = /data/book/
comment = book
port=873
read only = no
list = no
auth users = bookuser 
hosts allow = 192.168.1.100
hosts deny = 192.168.21.254

:wq! #保存,退出


參數說明:

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啟動時歡迎信息頁面文件位置(文件內容自定義)

[home_www.osyunwei.com] #自定義名稱

path = /data/book/ #rsync服務端數據目錄路徑

comment = book #模塊名稱與[book]自定義名稱相同

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 = bookuser #執行數據同步的用戶名,可以設置多個,用英文狀態下逗號隔開

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

hosts deny = 192.168.21.254 #禁止數據同步的客戶端IP地址,可以設置多個,用英文狀態下逗號隔開



5、創建用戶認證文件

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

bookuser:123456 #格式,用戶名:密碼,可以設置多個,每行一個用戶名:密碼

:wq! #保存退出


6、設置文件權限

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

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

service xinetd restart #重新啟動



第二部分:在源服務器192.168.1.100上操作


一、安裝Rsync客戶端

1、關閉SELINUX

2、開啟防火墻tcp 873端口(Rsync默認端口,做為客戶端的Rsync可以不用開啟873端口)

3、安裝Rsync客戶端端軟件

yum -y install rsync xinetd

chkconfig rsync on

/etc/init.d/xinetd start #啟動(以xinetd來管理rsync服務)



4、創建認證密碼文件

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

123456 #密碼

:wq! #保存退出


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


5、測試源服務器192.168.1.100到目標服務器192.168.1.101,之間的數據同步

mkdir /data/testfile

rsync -av /data/testfile [email protected]::book --password-file=/etc/passwd.txt


到目標服務器192.168.1.101 上查看 /data/book/ 此目錄下是否有testfile 。


第三部分:在源服務器192.168.1.100上操作

下載inotify

編譯安裝

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

tar xf inotify-tools-3.14.tar.gz ;cd inotify-tools-3.14

./configure --prefix=/usr/local/inotify && make && make install


創建個腳本,加入後臺運行.

vim /usr/local/inotify/inotify.sh

#!/bin/bash
#para
host01=192.168.1.101  #inotify-slave的ip地址
src=/data/book        #本地監控的目錄
dst=book           #inotify-slave的rsync服務的模塊名
user=bookuser      #inotify-slave的rsync服務的虛擬用戶
rsync_passfile=/etc/passwd.txt  #本地調用rsync服務的密碼文件
inotify_home=/usr/local/inotify    #inotify的安裝目錄
#judge
if [ ! -e "$src" ] || [ ! -e "${rsync_passfile}" ] || [ ! -e "${inotify_home}/bin/inotifywait" ] || [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib $src | while read file
do
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src [email protected]$host01::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./   [email protected]$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0


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

/usr/local/inotify/inotify.sh & #後臺運行此腳本


###########啟動腳本時報錯error while loading shared libraries: libinotifytools.so.0: cannot open shared object fil########

系統找不到該庫

進入目錄

cd /usr/local/inotify/

find . -name libinotifytools.so.0


把查找的文件路徑加到 /usr/lib64/

ln -s /usr/local/inotify/lib/libinotifytools.so.0 /usr/lib64/


配置就完成了,自己檢查一下數據同步的情況吧。


中途遇到一些坑,rsync -av /data/testfile [email protected]::book --password-file=/etc/passwd.txt


源目錄/data/testfile/ 最後面有沒有/的區別很大的,平時沒註意,今天中招了。

後面沒加斜杠,/data/testfile ,同步此目錄下的子目錄,包括此目錄。

後面加了斜杠,/data/testfile/,同步此目錄下的子目錄,不包括此目錄。

......

說的我自己都有點懵逼了,還是自己去體會吧。







本文出自 “Linux運維-小墨” 博客,請務必保留此出處http://xmomo.blog.51cto.com/5994484/1963741

inotify+Rsync數據同步