1. 程式人生 > >rsync+inotify 檔案同步

rsync+inotify 檔案同步

伺服器A 192.168.0.203 

伺服器B 192.168.0.204

這裡假設B 伺服器 為 A的備份伺服器 

首先 我們在A 伺服器 和B 伺服器 都裝rsync 和 inoifty

B 伺服器  rsync 服務端

開啟 rsync

rsync --daemon --config=/etc/rsyncd.conf 配置檔案如下

rsyncd.conf 

pid file = /var/run/rsyncd.pid
#port = 873  #這個埠也註釋掉 預設就是873 如果你開了這一段可能會報錯
#address = 192.168.0.203   #這個註釋掉
uid = root
gid = root

use chroot = yes
read only = no

hosts allow=192.168.0.203  #允許訪問的ip
hosts deny=*

max connections = 5
motd file = /etc/rsyncd.motd
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log


log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
#exclude=a b ob.log  #禁止同步的檔案


[www]
path = /home/wwwroot/default  #同步的目錄
list=no
ignore errors
comment = www 
auth users = user1 允許的使用者
secrets file = /etc/rsyncd.secrets #使用者密碼

/etc/rsyncd.secrets  密碼檔案 格式為 使用者名稱:密碼   這裡記住服務端 要寫使用者名稱和密碼 客戶端的話 只寫密碼就可以

user1:user1

密碼檔案需要 600 許可權 必須600 

chmod 600 /etc/rsyncd.secrets 

啟動後發現  服務運行了

centos7 裡 預設安裝好了 rsync 如果沒安裝 百度一堆教程

inotiyf 需要自己安裝 其實這裡伺服器可以不安裝的  客戶端需要安裝  

上面服務端就完成了 接下來回到客戶端

A 伺服器

首先安裝inofity 大致流程如下

224  ls
  225  wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
  226  ls
  227  tar zxvf inotify-tools-3.13.tar.gz 
  228  ls
  229  cd inotify-tools-3.13/
  230  ls
  231  ./configure 
  232  make && make install
  233  ls
  234  inotify
  235  make
  236  make install
  237  ./configure 
  238  make check
  239  make
  240  make install
  241  inotify
  242  ls
  243  cd man/
  244  ls
  245  cd ..
  246  cd src
  247  ls
  248  cd ..
  249  ls
  250  cd ..
  251  ls
  252  inotify
  253  ls
  254  cd inotify-tools-3.13/
  255  ls
  256  ./configure --prefix=/usr/local/inotify
  257  make && make install
  258  cd /usr/local/inotify/
  259  ls
  260  cd bin/
  261  ls
  262  inotifywait 
  263  inotifywatch
  264  ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
  265  inotifywatch
  266  inotifywait 

客戶端不需要啟動 rsync 

rsync.conf的配置如下 也可以當做服務端 但是如果想和B 伺服器同步的話 不要這樣 rsync --daemon --config=/etc/rsyncd.conf  啟動 就好

pid file = /var/run/rsyncd.pid
#port = 873
#address = 192.168.0.202
uid = root
gid = root

use chroot = yes
read only = no

hosts allow=192.168.0.204
hosts deny=*

max connections = 5
motd file = /etc/rsyncd.motd
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log


log format = %t %a %m %f %b
syslog facility = local3
timeout = 300


[www]
path = /home/wwwroot/default
list=no
ignore errors
comment = www
auth users = user1
secrets file = /etc/rsyncd.secrets

A 伺服器 只需要配置密碼檔案就好 如下

[[email protected] ~]# cat /etc/rsyncd.secrets  user1

密碼檔案需要 600 許可權 必須600 

chmod 600 /etc/rsyncd.secrets 

然後 我們設定一下 inotify

vim inotify_back.sh  配置如下   

#!/bin/bash
host=192.168.0.204
src=/home/wwwroot/default/
des=www
user=user1
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
#/usr/bin/rsync -aSz --delete  --exclude-from=exclude.txt  --password-file=/etc/rsyncd.secrets $src [email protected]$host::$des
/usr/bin/rsync -auvrtzopgP  --progress --delete  --exclude-from '/usr/local/inotify/exclude.txt'  --password-file=/etc/rsyncd.secrets $src [email protected]$host::$des
#/usr/bin/rsync -av --delete  --exclude-from '/usr/local/inotify/exclude.txt'  --password-file=/etc/rsyncd.secrets $src [email protected]$host::$des
echo "${files} was rsynced" > /var/log/rsyncd.log 2>&1
done

chmod a+x  inotify_back.sh  給與執行許可權  

上面的檔案裡 如果加上 --delete 那麼客戶端刪除的 伺服器端也會刪除  如果不需要刪除 可以去掉 --delete引數 這個引數挺危險的

//設定一個禁止同步的檔案 裡面寫上禁止同步的檔案或者資料夾型別

比如下面的這個大概就是所有的log cache資料夾  cache檔案下的所有檔案 fk資料夾 fk檔案下的所有  還有所有txt

這裡如果出現不管用的話 記得先停止一下rysnc服務端指令碼 重新啟動一下 或者重新啟動一下整個伺服器 還有客戶端 

之前遇到這個問題很神奇 重啟後就好了 或者殺掉所有相關的rsync程序

[[email protected] inotify]# cat exclude.txt  *.log* cache/ cache/* fk/ fk/* *.txt

最後以這種方式啟動 inotify 

nohup ./inotify_back.sh & 這樣就算shell 視窗關掉 也可以繼續服務 

啟動後 回到客戶端 touch一個kk檔案

然後去服務端觀察發現

到此為止 發現檔案可以同步了 

 

測試一下 在上傳的禁止的檔案裡

發現禁止的txt檔案 並沒有被同步

到此位置測試同步完成了