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檔案 並沒有被同步
到此位置測試同步完成了