rsync+inotify實時同步備份服務

第1章 企業實時同步備份服務部署-inotify

1.1 inotify是什麼?

inotify是一種強大的,細粒度的.異步文件系統監控機制,通過inotify可以監控文件系統中添加/刪除/修改/移動等各種事件,inotify-tools正是實施這樣監控的軟件      

sersync就是在inotify基礎上強化了一些功能,比如重試機制,過濾機制,提供接口做CDN

1.2 linux內核從2.16.13起才支持inotify 

/proc/sys/fs/inotify    系統默認的目錄下有三個文件,inotify機制有一定的限制

max_user_watches   設置inotifyinotifywatch命令可以監視的文件數量(單進程)默認8192

max_user_ instances  設置每個用戶可以運行inotifywaitinotifywatch命令的進程數,默認進程數128

max_queued_events  設置inotify實例事件(event)隊列可容納的事件數量

1.2.1 多實例的含義:

一個服務識別不同的配置文件,啓動多個進程,開啓不同的socket條目信息,生成多個不同端口信息,這樣就實現了一個服務的多實例創建

1.3 實時備份原理過程:

1.      劃分nfs存儲與rsync備份服務器

2.      在存儲服務器上部署監控服務,監控相應文件或目錄中數據信息的變化

3.      將監控文件或目錄,變化的數據信息進行推送,從而實現實時備份到rsync服務器中

1.4 inotify實現實時同步部署流程:

1.      部署rsync服務,守護進程模式要開啓

2.      部署inotify軟件,進行實時監控數據信息的變化

a)        默認沒有inotify軟件,需要進行yum安裝  

yum  install  -y  inotify-tools  

b)        檢查事件目錄監控命令執行是否正確 

inotifywait -mrq /data

    inotifywait -mrq --timefmt "%y/%m/%d %H:%M" --format "%T %w%f" /data

    inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" /data

    inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%:e" -e create /data

c)        腳本需要編寫監控命令:

    inotifywait -mrq  --format "%w%f" -e create,close_write,delete,moved_to /data

3.      編寫inotify+rsync的結合腳本

#!/bin/bash

   

    inotifywait -mrq  --format "%w%f" -e create,close_write,delete,moved_to /data|\

    while read line

    do

      rsync -az /data/ --delete [email protected]::backup --password-file=/etc/rsync.password

    done

1.5 inotify命令如何使用:

1.5.1 inotifywait   命令參數  開啓實時監控服務,監控文件目錄

-m   始終保持監控狀態

-r    遞歸監控目錄中的數據變化

-o    打印事件到文件中,相當於標準正確輸出

-q    安靜模式,輸出信息少

--timefmt    指定事件格式

--format     指定輸出格式

-s     輸出錯誤信息

-e     指定監聽的事件,比如只監聽刪除的事件或者 只監聽添加的事件

1.5.2 inotify命令語法格式:

                                             

%T  = 時間格式

%w  = 監控的文件或目錄名稱

%f   = 事件出現時,將顯示監控目錄下觸發時間的文件或目錄信息

%e  = 顯示發生的事件信息,不同的事件信息用逗號進行分割

1.5.3 inotify中事件都有什麼?

access   數據內容被讀取

modify  數據內容被寫入

attrib   屬性被改變

close_write   修改文件目錄之後關閉

close_nowrite   沒有修改文件或目錄之後關閉

close   文件或目錄被關閉

open   文件或目錄被打開

move   文件或目錄被移動

create   在目錄中創建文件或目錄

delete   在目錄中刪除文件或目錄

在實際使用時,只要監控以下事件即可:

create---創建

delete---刪除

move---移動

close_write---修改

1.5.4 對文件的監控信息:

命令爲: [root@nfs01 ~]# inotifywait -mr --timefmt "%Y-%m-%d" --format '%T: %w %e'  /data/

查看文件的邏輯過程:

2018-01-26: /data/ OPEN,ISDIR

2018-01-26: /data/ CLOSE_NOWRITE,CLOSE,ISDIR

創建文件的邏輯過程:

2018-01-26: /data/ CREATE

2018-01-26: /data/ OPEN

2018-01-26: /data/ ATTRIB

2018-01-26: /data/ CLOSE_WRITE,CLOSE

刪除文件的邏輯過程:

2018-01-26: /data/ DELETE

移動文件的邏輯過程:

2018-01-26: /data/ MOVED_FROM

1.5.5 對目錄的監控信息:

創建目錄的邏輯過程:

2018-01-26 /data/ CREATE,ISDIR

2018-01-26 /data/ OPEN,ISDIR

2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR

刪除目錄的邏輯過程:

2018-01-26 /data/ OPEN,ISDIR

2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR

2018-01-26 /data/ OPEN,ISDIR

2018-01-26 /data/boyang/ OPEN,ISDIR

2018-01-26 /data/ DELETE,ISDIR

2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR

2018-01-26 /data/boyang/ CLOSE_NOWRITE,CLOSE,ISDIR

2018-01-26 /data/boyang/ DELETE_SELF

移動目錄的邏輯過程:

2018-01-26 /data/ MOVED_FROM,ISDIR

2018-01-26 /data/jiang/ MOVE_SELF

Failed to remove watch on /data/jiang/: Unknown error 18446744073709551615

Error removing watch on /data/jiang/: Unknown error 18446744073709551615

2018-01-26 /data/ OPEN,ISDIR

2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR

1.6 shell循環方式:

1.      for循環:   指定循環條件,循環條件不滿足會停止循環

2.      while循環: 指定循環條件,循環條件滿足時,會無限循環=死循環

3.      until(直到): 指定循環條件,循環不滿足時,會無線循環

1.6.1 腳本在循環執行時:

利用ctrl+z 只是暫停腳本運行,進程還在

jobs命令將前臺運行腳本命令,放入後臺

利用kill將進程殺死

然後在將進程轉到前臺,

將進程暫停,然後直接用pkill+進程名字將其殺死

1.7 inotify服務優化:

根據/proc/目錄下的機制文件,對自己的需求進行更改

inotify缺點:

併發大於200個文件時 ,同步就會有延遲

前面寫的腳本,每次都是全部推送一次,單確實是澤尼昂的.也可以只同步變化的文件,不變化的不理會

監控到事件後,rsync同步是單線程的,serync是多線程同步

inotify實現實時同步必須要編寫腳本


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