1. 程式人生 > >inotify+rsync、sersync 實時備份

inotify+rsync、sersync 實時備份

delet 屬性 table folder attr yum rbd not org


作者Georgekai

歸檔:學習筆記

2018/1/26


inotify+rsyncsersync 實時備份

1.1 定時備份缺點:

1. 浪費系統性能(數據沒變化到時間也會備份)

2. 數據安全性不高(定時任務最短1分鐘同步一次,如果1分鐘內數據變化後,服務器宕機了,就 會丟失數據)

1.2 inotify+rsync

1.2.1 inotify是什麽?

1. 是一種強大的,細粒度的,異步的文件系統事件監控系列

2. linux內核從2.6.13起,加入了inotify的支持

3. 作用:通過inotify可以監控文件系統中的添 加,刪除,修改,移動等各種事件

技術分享圖片

1.2.2 實時同步原理

技術分享圖片

1)劃分存儲與備份服務器

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

3)變化後,將文件或目錄數據信息進行推送,實現實時同步到rsync服務器

1.2.3 實時備份部署原理過程

1.部署rsync守護進程模式

2.部署inotify實時監控數據變化的服務

1)安裝inotify

yum install inotify-tools -y


inotify-tools包含2個工具:

主要使用inotifywait :在被監控的文件或目錄中等待系統事件的發生

inotifywatch :統計被監控的目錄或文件中,事件的發生次數

2)事件目錄監控命令總結

inotifywait命令語法格式說明圖:

技術分享圖片


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

註:下面有inotifywait命令每個參數的詳解

3)利用腳本方式,將rsync與inotify服務串聯在一起

vim inotify.sh

腳本內容:

#!/bin/bash

#author:georgekai

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

while read line

do

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

done

註:腳本在無限循環執行時:(用以下一種方法可中斷執行過程)

1.利用ctrl+z,放到後臺暫停腳本運行,在killall -f inotify,在切換到前臺時,已被殺死

註:jobs #查看後臺停止的進程和對應的序號

fg + 進程序號 #將後臺的命令放前臺繼續執行

bg #將前臺運行的命令放入後臺繼續執行

2. pkill -f inotify #-f:帶inotify字符的進程都殺死

3. kill -9 9857 9859 #kill後面接機進程對應的PID號

shell腳本循環方式:

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

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

3. until循環:指定循環條件,當循環條件不滿足時,會無限循環

4)寫好腳本,並賦予x執行權限,放入/etc/rc.local中

1.2.4 inotifywait常用參數

-m #保持實時監控,前臺監控

-d #類似-m,在後臺監控

-r #遞歸監控

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

--timefmt #指定時間輸出的格式

--format #指定指定的輸出類型格式(%w:監控目錄)

-e #指定事件類型(如:modify、create、close_write、move、delete、attrib)

註:-e指定的事件類型,下面有詳詳解

1.2.5 inotify- -format的常用參數:

%f #監控目錄中哪個文件觸發了這個事件

%w #監控的目錄

%T #--timefmt定義的時間格式

%e #產生事件的信息,多個事件默認以逗號分割

%Xe #輸出連續事件信息時,X表示以什麽符號分割

1.2.6 inotify-e參數的常用事件類型:

close_write #文件或目錄在寫入模式打開之後關閉

close_nowrite #文件或目錄在只讀模式打開之後關閉

moved_to #將文件或目錄移動(拉)到監控目錄中

moved_from #將文件或目錄從監控目錄中移動(推)出去

create #在監控目錄中創建文件或目錄

delete #在監控目錄中刪除文件或目錄

測試在監控目錄中對文件的各種操作所觸發的監控事件類型:

1. 創建文件邏輯過程:

touch /data/123.txt

會觸發:/data/ CREATE 123.txt

/data/ OPEN 123.txt

/data/ ATTRIB 123.txt

/data/ CLOSE_WRITE,CLOSE 123.txt


2. 刪除文件邏輯過程:

\rm 999.txt

會觸發:/data/ DELETE 999.txt


3. 修改文件邏輯過程:

echo 123 >> 123.txt

會觸發:/data/ OPEN 123.txt

/data/ MODIFY 123.txt

/data/ CLOSE_WRITE,CLOSE 123.txt


4. 移動文件邏輯過程:

1)將hosts文件移動到data目錄

mv /etc/hosts /data

觸發:/data/ MOVED_TO hosts

2)將data目錄中的hosts文件,移動到/etc下

mv /data/hosts /etc/

觸發:/data MOVED_FROM hosts


5. 修改文件屬性邏輯過程:

mv kai.txt wang.txt ——重命名

觸發:/data/ MOVED_FROM kai.tx

/data/ MOVED_TO wang.txt

1.2.7 inotify服務優化

1. /proc/sys/fs/inotify/目錄下有三個文件,對inotify機制有一定的限制:

1max_user_watches #設置inotifywaitinotifywatch命令可以監控的文件數量(單進程)

註:默認監控文件數8192

2max_user_instances #設置每個用戶可以運行的inotifywaitinotifywatch命令的進程數

註: 1. 一個服務識別不同的配置文件,啟動多個進程,就會開啟多個不同的socket條目 生成多個不同的端 口信息,以上操作就實現了一個服務的多實例創建

2. 默認監控進程數128

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

註:1. 默認隊列中可容納16384個事件

2. 監控目錄中文件變化越頻繁,這個值就越大,超過設置的最大值就會被丟棄

2. max_user_watches max_user_instances max_queued_events 三個文件進行優化

建議設置為最大值:50000000,並設置開機自啟(有時間重啟可能會恢復)

echo “50000000” >/proc/sys/fs/inotify/max_user_watches

echo “50000000” >/proc/sys/fs/inotify/max_queued_events

echo "50000000" >/proc/sys/fs/inotiofy/max_user_istances

將這三條命令追加到/etc/rc.local中。

3 查看inotify man手冊

man inotify #有顯示inotify7),7表示第七個級別

man man #可能查看man的七個級別的含義

man 7 inotify #即可查看inotifymax_queque_event等三個文件的使用幫助

1.2.8 inotify軟件的優點和缺點

優點:監控文件系統事件發生變化,會通過rsync實時同步數據

缺點: 1.發現大於200個文件(大小4-100k),同步時會有延時

2.前面寫的腳本,每次都是全部推送一次,但確實是增量的。也可以只同步變化文件,不 變的可以不理。

3.監控到事件後,rsync同步是單線程的(效率低),serync同步是多線程(效率高)

註:一個進程可管理多個線程

4. inotify實現實時同步需要編寫shell腳本

1.3 sersync軟件(國內金山開發)

1.3.1 sersync功能:

1. 支持配置文件管理

2. 真正的守護守護進程是socket

3. 可以對失敗文件定時重傳(定時任務的功能)

4. 第三方的HTTP接口(例如CDN緩存)

5. 默認多線程同步,效率高(inotify是單線程)

1.3.2 sersync軟件服務部署流程:

1. 部署好rsync守護進程服務

2. 部署sersync實時監控服務

1)確認sersync軟件是否安裝

sersync綠色軟件包的安裝方式(二進制包安裝方式)

sersync軟件官方地址(下載):https://github.com/wsgzao/sersync

技術分享圖片

▲下載好後,上傳到NFS服務器中

▲因為zip格式的,需要unzip 解壓

▲解壓後將軟件包mv到合適位置/usr/local/


2)修改sersync配置文件(修改前先備份源文件)

vim /usr/local/sersync/conf/confxml.xml

技術分享圖片

以下標簽只需了解:

. <filter start="false"> #false表示不過濾(默認)

<exclude expression="(.*)\.svn"></exclude>

<exclude expression="(.*)\.gz"></exclude>

<exclude expression="^info/*"></exclude>

<exclude expression="^static/*"></exclude>

</filter>

註:filter標簽用來實現實時同步的排除功能

. <inotify>

<delete start="true"/>

<createFolder start="true"/>

<createFile start="false"/>

<closeWrite start="true"/>

<moveFrom start="true"/>

<moveTo start="true"/>

<attrib start="false"/>

<modify start="false"/>

</inotify>

註:指定監控文件或目錄變化的事件信息


3. 啟動sersync服務

1chmod +x sersync #先授予sersync命令執行權限

2/bin/sersync -h #查看幫助(都是中文的)

3/bin/sersync -dro /usr/local/sersync/conf/confxml.xml

註:不要用xinetd管理rsync服務(sersync會調用inotify+rsync服務,配置文件中有)

sersync參數信息

參數-d:啟用守護進程模式

參數-r:在監控前,將監控目錄與遠程主機用rsync命令推送一遍

參數-n: 指定開啟守護線程的數量,默認為10

參數-o:指定配置文件,默認使用confxml.xml文件

參數-m:單獨啟用其他模塊,使用 -m refreshCDN 開啟刷新CDN模塊

參數-m:單獨啟用其他模塊,使用 -m socket 開啟socket模塊

參數-m:單獨啟用其他模塊,使用 -m http 開啟http模塊

不加-m參數,則默認執行同步程序

4. 查看服務是否啟動

ps -ef |grep sersync

1.4 互聯網常見數據同步方法總結:

1. inotify(sersync)+rsync ,是文件級別的。

2. drbd數據同步軟件,基於block塊同步

3. 第三方軟件的同步功能:mysql同步(主從復制),oraclemongodb

4. 程序雙寫,直接寫兩臺服務器



感覺最新排版好累,思路不清都沒法排


inotify+rsync、sersync 實時備份