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數據同步