1. 程式人生 > >實時同步備份的部署

實時同步備份的部署

後臺 eat jobs 監聽 狀態 備份服務器 格式 themes 服務

第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實現實時同步必須要編寫腳本


實時同步備份的部署