Linux下Rsync+Inotify-tools實現數據實時同步

rsync+inotify同步邏輯圖

這裏寫圖片描述

節點說明

主機名 主機IP地址
inotify-master 10.1.1.1
inotify-slave 10.1.1.2

inotify-slave部署

1 安裝rsync

yum -y install rsync

2 編輯/etc/rsyncd.conf

#設置服務器信息提示文件名稱,在該文件中編寫提示信息
#
motd file = /etc/rsyncd.motd
#開啓rsync數據傳輸日誌功能
transfer logging = yes
#設置日誌文件名稱,可以通過log format參數設置日誌格式
log file = /var/log/rsyncd.log
#設置rsync進程號
pid file = /var/run/rsyncd.pid
#設置鎖文件名稱
lock file = /var/run/rsync.lock
設置服務器監聽的端口號,默認是873
port = 873
#設置服務器所監聽網卡接口的IP地址,
address=10.1.1.2
#設置進行數據傳輸時使用的賬號名稱或ID,默認使用nobody
uid = nobody
#設置進行數據傳輸時所使用的組名或GID,默認使用nobody
gid = nobody

use chroot = no
#是否允許客戶端上傳數據,這裏設置爲只讀
read only = no
#設置併發連接數,0代表無限制。超出併發數後,如果依然有客戶端連接請求,則將會收到稍後重試的提示消息
max connections = 10
#模塊,rsync通過模塊定義同步的目錄,模塊以【name】的形式定義,這與samba定義共享目錄是一樣的效果。在rsync中也可以定義多個模塊

#同步目錄的真實路徑通過path指定
path=/var/www/html/
#忽略一些io錯誤
ignore errors

#exclude 可以指定例外的目錄,即將web1目錄下的某個目錄設置爲不同步數據。
#exclude = /test

#設置允許連接服務器的賬戶,賬戶可以是系統中不存在的用戶
auth users=web1user

#設置密碼驗證文件名稱,注意該文件的權限要求爲只讀,建議權限600,僅在設置auth users參數後有效
secrets file = /etc/rsyncd.secrets

#設置允許那些主機可以同步數據,可以是單個IP,也可以是網段,多個IP與網段之間使用空格分隔
hosts allow = 10.1.1.1/255.255.255.0

#設置拒絕所有(除hosts allow定義的主機外)
hosts deny=*

#客戶端請求顯示模塊列表,本模塊名稱是否顯示,默認爲true
list = false

3 配置寫入目錄權限

chmod -R 777 /var/www/html

4 創建賬戶

echo "web1user:gcks@pass">/etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

5 設置歡迎詞

echo "welcome to access ">/etc/rsyncd.motd

6 以服務形式啓動rsync

rsync --daemon

7 設置開機啓動

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

8 開放873端口

iptables -I INPUT -p tcp --dport 873 -j ACCEPT
service iptables save

inotify-master部署

1 安裝rsync

yum -y install rsync

2 安裝編譯工具

yum -y install make gcc gcc-c++  

3 安裝inotify

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

4 添加密碼文件(#注意:這裏只要寫密碼即可,切記。)

echo "gcks@pass">/etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

5 編寫監控腳本inotify_rsync.sh

#!/bin/bash
host1=10.1.1.2

# 本地目錄
src=/storage/radius
dst1=web1
user1=web1user
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify


${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M'  --format '%T %w%f%e' -e close_write,modify,delete,create,attrib $src |while read lines
do
    rsync -vzrtopg --delete --progress --password-file=${rsync_passfile} $src $user1@$host1::$dst1

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

6 執行監控腳本inotify_rsync.sh

chmod 777 inotify_rsync.sh
./inotify_rsync.sh > /tmp/rsync.log 2 >&1 &
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章