rsync的簡單介紹及rsync+inotify實現實時同步更新

Rsync的簡單介紹及rsync+inotify實現實時同步更新

rsync是類unix系統下的數據鏡像備份工具——remotesync。一款快速增量備份工具 Remote Sync,遠程同步支持本地複製,或者與其他SSHrsync主機同步。Rsync是超級進程來管理的,服務端口爲873

    特點:   

        1、可以鏡像保存整個目錄樹或文件系統;

        2、有較高的數據傳輸效率;

        3、可藉助於SSH實現安全數據傳輸;

        4 支持匿名傳輸

    工作模式:

        1shell模式,也稱作本地模式

        2、遠程shell模式,可以利用ssh協議承載其遠程傳輸過程,命令有兩種

        3、列表模式,僅列出源中的內容,-nv

        4、服務模式,此時rsync工作爲守護進程,能接收客戶端的數據同步請求;

 

下面爲大家介紹rsync工具的使用

rsync常用命令的選項:

  -n: 同步測試,不執行真正的同步過程;

  -v: 詳細輸出模式

  -q: 靜默模式

  -c: checksum,開啓校驗功能

  -r: 遞歸複製

  -a: 歸檔,保留文件的原有屬性;

  -p: 保留文件的權限;

  -t: 保留文件的時間戳;

  -l: 保留符號鏈接

  -g: 保留屬組

  -o: 保留屬主

  -D:保留設備文件

 

  -e ssh: 使用ssh作爲傳輸承載;

  -z: 壓縮後傳輸;

 

  --progress: 顯示進度條

  --stats: 顯示如何執行壓縮和傳輸

注意:rsync命令中,如果源路徑是目錄,且給複製路徑時末尾有/,則會複製目錄中的內容,而非目錄本向;如果末尾沒有/,則會同步目錄本身及目錄中的所有文件;目標路徑末尾是否有/無關緊要;

 

使用示例:
         [root@localhost~]# rsync -r --stats -e ssh --progress /etc/pam.d [email protected]:/rmp/
         從本機複製文件到另一主機


 

以下簡單說下rsync工具的服務模式及rsyncinotify的組合使用實現數據實時同步更新

rsync服務模式

1、設定rsync服務器端

   # yum -y install xinetd

   # chkconfig rsync on

2、爲rsync提供配置文件

   /etc/rsyncd.conf

   配置文件分兩段:

   全局配置段:1

   共享配置段:多個

   配置示例:

   # Global Settings

   uid = nobody//運行RSYNC守護進程的用戶

   gid = nobody//運行RSYNC守護進程的組

   use chroot = no//不使用chroot

   max connections = 10// 最大連接數無限制

   strict modes = yes//是否工作在嚴格模式下

   pid file = /var/run/rsyncd.pid//鎖文件的存放位置

   log file = /var/log/rsyncd.log//日誌記錄文件的存放位置

   # Directory to be synced

   [tools]//這裏是認證的模塊名,在client端需要指定

   path = /data//需要做同步的目錄,不可缺少

   ignore errors = yes//表示在複製文件的過程中,若發生錯誤,是繼續複製(yes)還是終止複製(no)

   read only = no// 非只讀

   write only = no//非只寫

   hosts allow = 172.16.0.0/16//允許哪些主機來訪問,做白名單的

   hosts deny = *//黑名單

   list = false//是否允許用戶列出文件列表

   uid = root//

   gid = root

3、啓動服務

   # service xinetd start

  啓動以後查看是否監聽於873/tcp端口

4、使用服務器啓用認證功能

1)在共享定義處加配置便可實現

 [tools]

   path = /data

   ignore errors = yes

   read only = no

   write only = no

   hosts allow = 172.16.0.0/16

   hosts deny = *

   list = false

   uid = root

   gid = root

   auth users = USERNAME LIST//認證的用戶名,如果沒有這行則表明是匿名,此用戶與系統無關

   secrets file = /etc/rsyncd.passwd//密碼和用戶名對比表,密碼文件自己生成

   說明: USERNAME LIST爲以逗號分隔的在rsyncd.passwd中存在用戶名的列表;

2)創建密碼文件(文件權限爲600,此文件不能允許其他用戶有權限,並且用戶密碼不能超過8位數)

  格式:username:password

3)重啓下服務便實現認證功能

 

 

Rsync+inotify的使用

 實例是用兩臺服務器簡單實現的,其中文件服務器的IP172.16.25.1inotify服務器的IP172.16.25.2

 先搭建文件服務器所需要的環境

[root@localhost ~]# yum install xinetd –y   //安裝超級守護進程
[root@localhost ~]# mkdir /root/data              //創建共享目錄
[root@localhost data]# vim /etc/rsyncd.conf  //配置rsync的服務配置文件(下面的文件配置項在上面的rsync服務模式中都已做詳細的介紹,這裏不在詳細的說明)
# Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# Directory to be synced
[tools]
path = /root/data/
ignore errors = yes
read only = no
write only = no
hosts allow = 172.16.0.0/16
hosts deny = *
list = false
uid = root
gid = root
auth users = nydia
secrets file = /etc/rsyncd.passwd
[root@localhost data]# vim/etc/rsyncd.passwd //創建認證用戶的密碼文件
nydia:nydia  //文件內容只需填入用戶和密碼並使用:隔開即可,並設定此文件的權限爲600
[root@localhost data]# chkconfig rsync on     //將服務加入啓動列表中
[root@localhost data]# service xinetd start  //然後啓動超級守護進程服務即完成rsync文件服務器的配置


 

Inotify服務器配置

先爲大家介紹下inotify的概述及使用,然後再開始配置服務

Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。

inotifywait

語法:
inotifywait [-hcmrq] [-e ] [-t ] [--format ][--timefmt ] [ ... ]
參數:
-h,–help
輸出幫助信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
–fromfile 
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-m, –monitor
接收到一個事情而不退出,無限期地執行。默認的行爲是接收到一個事情後立即退出。
-d, –daemon
–monitor一樣,除了是在後臺運行,需要指定–outfile把事情輸出到一個文件。也意味着使用了–syslog
-o, –outfile 
輸出事情到一個文件而不是標準輸出。
-s, –syslog
輸出錯誤信息到系統日誌
-r, –recursive
監視一個目錄下的所有子目錄。
-q, –quiet
指定一次,不會輸出詳細信息,指定二次,除了致命錯誤,不會輸出任何信息。
–exclude 
正則匹配需要排除的文件,大小寫敏感。
–excludei 
正則匹配需要排除的文件,忽略大小寫。
-t , –timeout 
設置超時時間,如果爲0,則無限期地執行下去。
-e , –event 
指定監視的事件。
-c, –csv
輸出csv格式。
–timefmt 
指定時間格式,用於–format選項中的%T格式。
–format 
指定輸出格式。
%w 表示發生事件的目錄
%f 表示發生事件的文件
%e 表示發生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式

inotifywatch

語法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
參數:
-h, –help
輸出幫助信息
-v, –verbose
輸出詳細信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
–fromfile 
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-z, –zero
輸出表格的行和列,即使元素爲空
–exclude 
正則匹配需要排除的文件,大小寫敏感。
–excludei 
正則匹配需要排除的文件,忽略大小寫。
-r, –recursive
監視一個目錄下的所有子目錄。
-t , –timeout 
設置超時時間
-e , –event 
只監聽指定的事件。
-a , –ascending 
以指定事件升序排列。
-d , –descending 
以指定事件降序排列。

可監聽事件

wKiom1P9opiAthPzAAIpJIdZv20921.jpg

注:inotifywatch中的信息轉載於http://www.51rhca.com/archives/133文中

簡單的介紹完以後就接着開始配置服務了

[root@localhost ~]#yum installinotify-tools –y  //安裝工具包
[root@localhost ~]# /usr/bin/inotifywait-mrq -e modify,delete,create,attrib /root/data //使用此命令測試inotify工具的效果,在/root/data下創建一個文件可看到inotify工具會做出相應的提醒
[root@localhost ~]# vim /tmp/inotify.sh  //編輯inotify自動同步更新的腳本
#!/bin/bash
/usr/bin/inotifywait -mrq –timefmt '%d/%m/%y%H:%M'--format '%T %w%f' -e modify,delete,create,attrib /root/data/ | while read file
do
/usr/bin/rsync -vzrtopg --delete  --password-file=/etc/rsyncd.passwd  --progress /root/data/  [email protected]::tools
echo "${files} was rsynced">>/var/log/rsync.log 2>&1
done
[root@localhost ~]# vim /etc/rsyncd.passwd          //創建此文件並在其中填入文件服務器設定的用戶密碼
nydia
[root@localhost tmp]# bash +x inotify.sh        //創建完以後就可以運行此文件了,inotify服務也配置完成了,現在只需測試了
[root@localhost data]# touch 3.abc                 //在本服務器的/root/data的目錄中創建一個文件之類,然後就可以看到剛纔編寫的腳本有相關提示,並可在文件服務器上查看到已經同步過來的文件了。


 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章