rsync+inotify-tools實時同步
rsync概述:
rsync是類unix系統下的數據鏡像備份工具——remote sync。一款快速增量備份工具 Remote Sync,遠程同步 支持本地復制,或者與其他SSH、rsync主機同步
Rsync(remote sync)是UNIX及類UNIX平臺下一款神奇的數據鏡像備份軟件,它不像FTP或其他文件傳輸服務那樣需要進行全備份,Rsync可以根據數據的變化進行差異備份,從而減少數據流量,提高工作效率。你可以使用它進行本地數據或遠程數據的復制,Rsync可以使用SSH安全隧道進行加密數據傳輸。Rsync服務器端定義源數據,Rsync客戶端僅在源數據發生改變後才會從服務器上實際復制數據至本地,如果源數據在服務器端被刪除,則客戶端數據也會被刪除,以確保主機之間的數據是同步的。Rsync使用TCP 873端口。
實驗描述:
192.168.1.155 ###目標主機(主)
192.168.1.156 ###源主機(客戶端)
通過rsync將源主機上的test1文件夾中的文件復制到目標主機test文件夾中。
然後使用cron定時任務定時執行
關閉兩臺服務器的防火墻( systemctl stop firewalld、setenforce 0)
rsync安裝配置:
在源主機配置:
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# mkdir /root/test1
[[email protected] ~]# vim /etc/rsync_exclude.lst ###指定要排除復制的文件或目錄
123 123.txt ####指定排除123、123.txt文件或目錄
在test1文件夾中創建一個test.123文件,便於同步時,看是否成功
在目標主機配置:
[[email protected] /]# mkdir /root/test
[[email protected] /]# yum -y install rsync
[[email protected] /]# vim /etc/rsyncd.conf
uid = nobody gid = nobody use chroot = yes max connections = 4 pid file = /var/run/rsyncd.pid exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 path = /root/test hosts allow = 192.168.1.156 hosts deny = * |
[[email protected] /]# systemctl start rsyncd
[[email protected] /]# systemctl enable rsyncd
配置完成後,在源主機上執行rsync,並設置cron定時任務
[[email protected] ~]# rsync -avz --delete /root/test1/ 192.168.1.155:/test ###az參數是增量備份 aP是完整備份
[[email protected] ~]# rsync -avz --delete /root/test1/ 192.168.1.155:/test The authenticity of host ‘192.168.1.155 (192.168.1.155)‘ can‘t be established. ECDSA key fingerprint is df:21:e3:6c:36:9a:9d:b5:7e:28:ec:ba:a2:a9:f8:fb. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘192.168.1.155‘ (ECDSA) to the list of known hosts. [email protected]‘s password: sending incremental file list ./ test.123 sent 90 bytes received 34 bytes 22.55 bytes/sec total size is 0 speedup is 0.00 [[email protected] ~]# |
[[email protected] ~]# crontab -l
* 02 * * * rsync -avz --delete /root/test1/ 192.168.1.155:/test
rsync中的參數:
-r 是遞歸 -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件; -z 傳輸時壓縮; -P 傳輸進度; -v 傳輸時的進度等信息,和-P有點關系,自己試試。可以看文檔; -e ssh的參數建立起加密的連接。 -u只進行更新,防止本地新文件被重寫,註意兩者機器的時鐘的同時 --progress是指顯示出詳細的進度情況 --delete是指如果服務器端刪除了這一文件,那麽客戶端也相應把文件刪除,保持真正的一致 --password-file=/password/path/file來指定密碼文件,這樣就可以在腳本中使用而無需交互式地輸入驗證密碼了,這裏需要註意的是這份密碼文件權限屬性要設得只有屬主可讀。
--bwlimit rsync限速參數(限制速度很簡單,添加個參數即可bwlimit,後面的值是多少k Bytes/s,有些機房會限制機器的流量,為了不觸及底線,在使用scp和rsync的時候都要註意。
為了避免你的scp或者rsync因為無良&懶惰的OPS設置防火墻的偷懶而造成的斷流現象,我們必須對自己的數據傳輸進行一定的限流措施,慢一點總比被斷了的好)
Rsync+Inotify-tools實現數據實時同步
上面已經說過,使用rsync進行同步,就算是定時任務,也不是實時的,這時我們要用到一個軟件進行輔助 inotify-tools
inotify-tools 是為linux下inotify文件監控工具提供的一套c的開發接口庫函數,同時還提供了一系列的命令行工具,這些工具可以用來監控文件系統的事件。 inotify-tools是用c編寫的,除了要求內核支持inotify外,不依賴於其他。inotify-tools提供兩種工具,一是inotifywait,它是用來監控文件或目錄的變化,二是inotifywatch,它是用來統計文件系統訪問的次數
下載地址:https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
由於rsync同步時,要輸入對方的賬號密碼,每次同步時都要輸入,這時可以用ssh免秘鑰登陸,前面章節已經講過,這裏不做敘述。
1.inotify安裝步驟:
wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz tar zvxf inotify-tools-3.13.tar.gz cd inotify-tools-3.13/ ./configure && make && make install |
2.編寫腳本
vim /auto_inotify.sh (這裏是從rsync服務器同步到客戶端,推流)
#!/bin/sh src=/root/test/ des=/root/test1/ ip=192.168.1.156 inotifywait -mrq --timefmt ‘%d/%m/%y-%H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib ${src} | while read file do for i in $ip do /bin/rsync -a --delete $src [email protected]$ip:$des done done |
解釋:
#!/bin/sh
src=/root/test/ ###inotify監控的目錄 (服務端目錄)
des=/root/test1/###客戶端目錄
ip=192.168.1.156###客戶端IP
inotifywait -mrq --timefmt ‘%d/%m/%y-%H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib ${src} ###檢查服務器哪個文件在實時變化 | while read file ###讀取文件
do
for i in $ip ###通過循環進行同步
do
/bin/rsync -a --delete $src [email protected]$ip:$des
done
done
3.運行腳本並在後臺執行
[[email protected] test]# 【nohup】sh /auto_inotify.sh &(最好加上nohup 如果只加上&那麽關閉終端,運行程序也隨之關閉加上nohup終端關閉後臺也會運行)
[1] 8856
nohup sh /auto_inotify.sh & [email protected] test]# ps -ef | grep auto_inotify.sh root 16486 1 0 11:32 ? 00:00:00 sh /auto_inotify.sh root 16488 16486 0 11:32 ? 00:00:00 sh /auto_inotify.sh root 16573 16493 0 11:33 pts/1 00:00:00 grep --color=auto auto_inotify.sh [[email protected] test]# ps -ef | grep inotifywait root 16487 16486 0 11:32 ? 00:00:00 inotifywait -mrq --timefmt %d/%m/%y-%H:%M --format %T %w%f -e modify,delete,create,attrib /root/test/ root 17545 16493 0 11:37 pts/1 00:00:00 grep --color=auto inotifywait |
擴展:nohup
原程序的的標準輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用。(也就是原本輸出在屏幕上的,現在輸到一個文件中,相當於一個日誌)
本文出自 “帥小欣” 博客,請務必保留此出處http://jiaxinwang.blog.51cto.com/12273793/1967114
rsync+inotify-tools實時同步