天天看點

rsync+inotify觸發式(實時)同步測試參考文獻:真正的inotify+rsync實時同步 徹底告别同步慢【優質】

1、問題:password file must not be other-accessible

/usr/bin/rsync -vzrtopg --port=36369 --delete --exclude ".svn/" --password-file=/etc/rsync/rsync_users.pass 10.0.1.112::sltweb /var/www/html/

rsync+inotify觸發式(實時)同步測試參考文獻:真正的inotify+rsync實時同步 徹底告别同步慢【優質】

2、解決方法

将password-file設定為600權限

chmod 600 XXX.pass

#########################################################################################################

參考文獻:真正的inotify+rsync實時同步 徹底告别同步慢【優質】

Rsync的指令格式可以為以下六種:

1

2

3

4

5

6

rsync

[OPTION]... SRC DEST

rsync

[OPTION]... SRC [[email protected]]HOST:DEST

rsync

[OPTION]... [[email protected]]HOST:SRC DEST

rsync

[OPTION]... [[email protected]]HOST::SRC DEST

rsync

[OPTION]... SRC [[email protected]]HOST::DEST

rsync

[OPTION]... 

rsync

:

//

[[email protected]]HOST[:PORT]

/SRC

[DEST]

https://blog.csdn.net/weixin_33949359/article/details/94686948

對應于以上六種指令格式,rsync有六種不同的工作模式:

  1)拷貝本地檔案。當SRC和DES路徑資訊都不包含有單個冒号”:”分隔符時就啟動這種工作模式。如:rsync -a /data /backup

  2)使用一個遠端shell程式(如rsh、ssh)來實作将本地機器的内容拷貝到遠端機器。當DST路徑位址包含單個冒号”:”分隔符時啟動該模式。如:rsync -avz *.c foo:src

  3)使用一個遠端shell程式(如rsh、ssh)來實作将遠端機器的内容拷貝到本地機器。當SRC位址路徑包含單個冒号”:”分隔符時啟動該模式。如:rsync -avz foo:src/bar /data

  4)從遠端rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含”::”分隔符時啟動該模式。如:rsync -av [email protected]::www /databack

  5)從本地機器拷貝檔案到遠端rsync伺服器中。當DST路徑資訊包含”::”分隔符時啟動該模式。如:rsync -av /databack [email protected]::www

  6)列遠端機的檔案清單。這類似于rsync傳輸,不過隻要在指令中省略掉本地機資訊即可。如:rsync -v rsync://172.16.78.192/www

rsync參數的具體解釋如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

-

v

, --verbose 詳細模式輸出

-q, --quiet 精簡輸出模式

-c, --checksum 打開校驗開關,強制對檔案傳輸進行校驗

-a, --archive 歸檔模式,表示以遞歸方式傳輸檔案,并保持所有檔案屬性,等于-rlptgoD

-r, --recursive 對子目錄以遞歸模式處理

-R, --relative 使用相對路徑資訊

-b, --backup 建立備份,也就是對于目的已經存在有同樣的檔案名時,将老的檔案重新命名為~filename。可以使用--suffix選項來指定不同的備份檔案字首。

--backup-

dir

将備份檔案(如~filename)存放在在目錄下。

-suffix=SUFFIX 定義備份檔案字首

-u, --update 僅僅進行更新,也就是跳過所有已經存在于DST,并且檔案時間晚于要備份的檔案。(不覆寫更新的檔案)

-l, --links 保留軟鍊結

-L, --copy-links 想對待正常檔案一樣處理軟鍊結

--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鍊結

--safe-links 忽略指向SRC路徑目錄樹以外的鍊結

-H, --hard-links 保留硬鍊結

-p, --perms 保持檔案權限

-o, --owner 保持檔案屬主資訊

-g, --group 保持檔案屬組資訊

-D, --devices 保持裝置檔案資訊

-t, --

times

保持檔案時間資訊

-S, --sparse 對稀疏檔案進行特殊處理以節省DST的空間

-n, --dry-run現實哪些檔案将被傳輸

-W, --whole-

file

拷貝檔案,不進行增量檢測

-x, --one-

file

-system 不要跨越檔案系統邊界

-B, --block-size=SIZE 檢驗算法使用的塊尺寸,預設是700位元組

-e, --rsh=COMMAND 指定使用rsh、

ssh

方式進行資料同步

--

rsync

-path=PATH 指定遠端伺服器上的

rsync

指令所在路徑資訊

-C, --cvs-exclude 使用和CVS一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案

--existing 僅僅更新那些已經存在于DST的檔案,而不備份那些新建立的檔案

--delete 删除那些DST中SRC沒有的檔案

--delete-excluded 同樣删除接收端那些被該選項指定排除的檔案

--delete-after 傳輸結束以後再删除

--ignore-errors 及時出現IO錯誤也進行删除

--max-delete=NUM 最多删除NUM個檔案

--partial 保留那些因故沒有完全傳輸的檔案,以是加快随後的再次傳輸

--force 強制删除目錄,即使不為空

--numeric-ids 不将數字的使用者群組ID比對為使用者名群組名

--timeout=TIME IP逾時時間,機關為秒

-I, --ignore-

times

不跳過那些有同樣的時間和長度的檔案

--size-only 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間

--modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為0

-T --temp-

dir

=DIR 在DIR中建立臨時檔案

--compare-dest=DIR 同樣比較DIR中的檔案來決定是否需要備份

-P 等同于 --partial

--progress 顯示備份過程

-z, --compress 對備份的檔案在傳輸時進行壓縮處理

--exclude=PATTERN 指定排除不需要傳輸的檔案模式

--include=PATTERN 指定不排除而需要傳輸的檔案模式

--exclude-from=FILE 排除FILE中指定模式的檔案

--include-from=FILE 不排除FILE指定模式比對的檔案

--version 列印版本資訊

--address 綁定到特定的位址

--config=FILE 指定其他的配置檔案,不使用預設的rsyncd.conf檔案

--port=PORT 指定其他的

rsync

服務端口

--blocking-io 對遠端shell使用阻塞IO

-stats 給出某些檔案的傳輸狀态

--progress 在傳輸時現實傳輸過程

--log-

format

=formAT 指定日志檔案格式

--password-

file

=FILE 從FILE中得到密碼

--bwlimit=KBPS 限制I

/O

帶寬,KBytes per second

-h, --help 顯示幫助資訊

#########################################################################################################

rsync伺服器架設(資料同步|檔案增量備份)

  #########################################################################################################  

作為系統運維人員,在工作中大多會遇到叢集伺服器的維護,在規模不大的時候,采用手動部署逐台更新項目配置,可能會應付的了不會出問題,可是一旦業務擴增伺服器的規模擴大一個級别,則手動逐台更改配置檔案則效率開始變的地下和容易産生錯誤。 inotify+rsync可以實作,一點變動,多點實時更新的效果。inotify技術從kernel 2.6.13開始正式并入核心,RHEL5已經支援。 下面是安裝計劃步驟

rsync+inotify觸發式(實時)同步測試參考文獻:真正的inotify+rsync實時同步 徹底告别同步慢【優質】

  1、 确認系統對inotify的支援 , 看看是否有 /proc/sys/fs/inotify/目錄,以确定核心是否支援inotify。     [[email protected] inotify]# ls /proc/sys/fs/inotify/    max_queued_events  max_user_instances  max_user_watches

2、安裝程式,inotify 和 rsync    rsync 一般系統會預設安裝好,直接使用即可,如不清楚,請看網上查找相關rsync的文章。    下載下傳inotify  ;   位址: http://inotify-tools.sourceforge.net/

   編譯安裝   ./configure    make   make install     安裝完畢後會有一個inotifywait指令,可以通過man inotifywait 檢視具體的指令幫助。     主要通過inotifywait 監控具體目錄和檔案的變動。          inotify 可以監視的檔案系統事件包括:        IN_ACCESS,即檔案被通路   IN_MODIFY,檔案被 write   IN_ATTRIB,檔案屬性被修改,如 chmod、chown、touch 等   IN_CLOSE_WRITE,可寫檔案被 close   IN_CLOSE_NOWRITE,不可寫檔案被 close   IN_OPEN,檔案被 open   IN_MOVED_FROM,檔案被移走,如 mv   IN_MOVED_TO,檔案被移來,如 mv、cp   IN_CREATE,建立新檔案   IN_DELETE,檔案被删除,如 rm   IN_DELETE_SELF,自删除,即一個可執行檔案在執行時删除自己   IN_MOVE_SELF,自移動,即一個可執行檔案在執行時移動自己   IN_UNMOUNT,宿主檔案系統被 umount   IN_CLOSE,檔案被關閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)   IN_MOVE,檔案被移動,等同于(IN_MOVED_FROM | IN_MOVED_TO)

  注:上面所說的檔案也包括目錄。

      inotifywait 指令的常用參數包括:     -m, --monitor      保持一直監聽     -r, --recursive    若有多級目錄循環遞歸每一層。     -q, --quiet        靜默式運作     -e <event>, --event <event>  create,move,delete,modify           3、實際示例:

#cat inotify.sh

#!/bin/sh src=/usr/local/nginx/conf/ des=inotifyhome                    ip="172.16.1.2 172.16.1.4 172.16.1.5" user=sysman /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib $src |  while read file do         for i in $ip         do                rsync  -vzrtopgl  --delete --progress  --files-from=file.list  --password-file=/etc/rsyncd.pwd  $src          done done

4、運作腳本

[[email protected]]# inotify.sh &

  ####################################################################################

rsync+inotify優勢[引用]:

1、伺服器性能:rsync隻能實作定時更新,無論網站有無檔案更新,rsync都會按着定時任務去檢查檔案是否有更新,當資料檔案較大時會使伺服器性能下降;而rsync+inotify為觸發式更新,也就是說隻有當某個檔案發生改動時才會更新,這樣一來對伺服器性能影響較小

2、資料實時性:如果選擇rsync,每隔多長時間同步一次資料是個問題,時間越短,對性能影響就越大。時間太長,使用者/編輯無法接受。采用rsync+inotify可實作實時更新,當源伺服器檔案有更新時,其它伺服器立即更新

源伺服器:192.168.128.10

目标伺服器:192.168.128.11

1,源伺服器rsync配置

uid = root

gid = root

use chroot = no

max connections =20

strict modes =yes

log file =/var/log/rsyncd.log

pid file =/var/run/rsyncd.pid

lock file =/var/run/rsync.lock

log format = %t %a %m %f%b

[web]

path =/var/www/html/

auth users = root

read only = no

hosts allow =192.168.128.0/24

list = no

uid = root

gid = root

secrets file =/etc/rsync.passwd

ignore errors =yes

[[email protected] ~]# vi/etc/rsyncd.secrets

root:111111

[[email protected] ~]# chmod600 /etc/rsyncd.secrets

[[email protected] ~]#/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

2,目标伺服器inotify、rsync配置

擷取且編譯inotify:

wget http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz

[[email protected] ~]# cd/usr/local/src/

[[email protected] src]# tarzxf inotify-tools-3.13.tar.gz

[[email protected] src]# cdinotify-tools-3.13

[[email protected]]# ./configure

[[email protected]]# make && makeinstall

[[email protected]]# cd

[[email protected] ~]# vi/etc/rsyncd.secrets

111111

[[email protected] ~]# vi/etc/rsync.sh

#!/bin/bash

src="/var/www/html"    #源伺服器同步目錄

dst=web                 #目标伺服器rsync子產品

ip="192.168.128.11"      #目标伺服器IP,可添加多台同步伺服器

/usr/local/bin/inotifywait-mrq -e create,move,delete,modify ${src} | while read

 file

do

     for i in $ip

     do

         rsync-avz --password-file=/etc/rsyncd.secrets --delete --progress${src}/* [email protected]${ip}::${dst}

     done

done

[[email protected] ~]# chmod +x/etc/rsync.sh

[[email protected] ~]# nohup/etc/rsync.sh &

inotify指令參數:

-m 是保持一直監聽

-r 是遞歸檢視目錄

-q 是列印出事件

-ecreate,move,delete,modify,attrib

監聽 建立 移動 删除 寫入  事件

--timefmt指定輸出時的輸出格式 例:--timefmt '%d/%m/%y-%H:%M'

--format:'%T %w%f'指定輸出的格式 例:--format '%T %w%f'

create:建立檔案

move:檔案移動

delete:檔案被删除

modify:是監控檔案被write

attrib:檔案屬性被修改

rsync -aHqzt $SRC $DST

    -a 存檔模式

    -H 儲存硬連接配接

    -q 制止非錯誤資訊

    -z 壓縮檔案資料在傳輸

    -t 維護修改時間

    -delete 删除于多餘檔案

當要排出同步某個目錄時,為rsync添加--exculde=PATTERN參數,注意,路徑是相對路徑。詳細檢視man rsync

當要排除都某個目錄的事件監控的處理時,為inotifywait添加--exclude或--excludei參數。詳細檢視man inotifywait

另:

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f' \

-e modify,delete,create,attrib \

${src} \

上面的指令傳回的值類似于:

10/03/09 15:31 /wwwpic/1

這3個傳回值做為參數傳給read,關于此處,有人是這樣寫的:

inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F;do

細化了傳回值。

說明: 當檔案系統發現指定目錄下有如上的條件的時候就觸發相應的指令,是一種主動告之的而非我用循環比較目錄下的檔案的異動,該程式

在運作時,更改目錄内的檔案時系統核心會發送一個信号,這個信号會觸發運作rsync指令,這時會同步源目錄和目标目錄。

--timefmt:指定輸出時的輸出格式

--format:  '%T %w%f'指定輸出的格式

二.關于inotify介紹

Inotify 是檔案系統事件監控機制,作為 dnotify 的有效替代。dnotify 是較早核心支援的檔案監控機制。Inotify 是一種強大的、細粒度的

、異步的機制,它滿足各種各樣的檔案監控需要,不僅限于安全和性能。

inotify 可以監視的檔案系統事件包括:

IN_ACCESS,即檔案被通路

IN_MODIFY,檔案被 write

IN_ATTRIB,檔案屬性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可寫檔案被 close

IN_CLOSE_NOWRITE,不可寫檔案被 close

IN_OPEN,檔案被 open

IN_MOVED_FROM,檔案被移走,如 mv

IN_MOVED_TO,檔案被移來,如 mv、cp

IN_CREATE,建立新檔案

IN_DELETE,檔案被删除,如 rm

IN_DELETE_SELF,自删除,即一個可執行檔案在執行時删除自己

IN_MOVE_SELF,自移動,即一個可執行檔案在執行時移動自己

IN_UNMOUNT,宿主檔案系統被 umount

IN_CLOSE,檔案被關閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,檔案被移動,等同于(IN_MOVED_FROM | IN_MOVED_TO)

注:上面所說的檔案也包括目錄。

3,測試

啟動rsync.sh監控腳本之後,源伺服器目錄/var/www/html下有增、添、改、删檔案操作時,将會實時同步到目标伺服器的/var/www/html目錄。