實時同步備份的部署
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 設置inotify或inotifywatch命令可以監視的文件數量
max_user_ instances 設置每個用戶可以運行inotifywait或inotifywatch命令的進程數,默認進程數128
max_queued_events 設置inotify實例事件(event)隊列可容納的事件數量
1.2.1 多實例的含義:
一個服務識別不同的配置文件,啟動多個進程,開啟不同的socket條目信息,生成多個不同端口信息,這樣就實現了一個服務的多實例創建
1.3 實時備份原理過程:
1. 劃分nfs存儲與rsync備份服務器
2. 在存儲服務器上部署監控服務,監控相應文件或目錄中數據信息的變化
3. 將監控文件或目錄
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實現實時同步必須要編寫腳本
實時同步備份的部署