rsync+inotify實現在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.114和172.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目錄中
在這一步之前要安裝相對就的gcc和gcc-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/