Linux 期中架構 inotify

 

全網備份數據同步方案git

備份網站內部人員信息  不能解決外部(人員)上傳數據的備份github

定時任務最短執行的週期爲一分鐘,採用定時任務方式,有時可能形成一分鐘內的數據丟失shell

所以對於重要數據須要採用實時同步的方案express

#數據同時同步方法centos

##什麼是實時同步:如何實現實時同步數據備份bash

###1  利用監控服務  監控同步數據目錄信息的變化服務器

###2  發現目錄中數據產生變化  就利用rsync服務推送數據到備份服務器上架構

 

 

##實時同步工做原理概念ssh

    1)進行數據信息的監控異步

2)將變化的數據進行推送備份--利用Rsync

 

##實現實時同步的技術手段:

1-->inotify+rsync    

2-->sersync

 

 

 

 實時同步服務拓撲示意圖

 

 

 

 

服務架構

 

軟件名稱:inotify-tools

intify主要是監控   rsync是傳輸

 

 

 

 

 

TIP:異步就是將全部請求先放入內存當中

 

 

修改1個文件名稱是什麼行爲

 

 

inotify只是監控軟件(事件驅動機制)   同步是rsync作的 

事件驅動機制:

 

中小型比較適合前2款

 

####實現實時同步的方法

01    intofy  對同步數據目錄信息的監控

02   rsync    完成對數據信息的實時同步

intify+rsync   利用腳本進行結合

第一個里程碑:部署rsync服務

客戶端

服務端

 

第二個里程碑:部署inotify軟件

部署數據監控服務(inotify)

   1)安裝inotify軟件(檢查是否安裝)

      yum install inotify-tools -y  --- 基於epel源(/etc/yum.repos.d/ 源文件保存目錄)

   備註:安裝在NFS上

centos系統安裝軟件方式 

1)yum安裝軟件方式

和rpm -ivh安裝軟件命令對比

yum安裝軟件能夠解決軟件之間依賴關係

rpm安裝軟件只能安裝指定的軟件,不會安裝依賴包

 

使用yum安裝軟件:

01  具備yum倉庫:存儲全部軟件的倉庫

 

02  具備yum源文件:利用yum源文件  決定使用哪一個yum倉庫  進行軟件下載

/etc/yum.d/   放置源文件

 

yum repolist --顯示本臺主機的全部可用yum源信息

 

2)編譯安裝軟件

3)利用二進制包方式安裝軟件

安裝採用綠色版本軟件,進行安裝

 

rpm -ql inotify-tools

[root@nfs01 ~]# rpm -ql inotify-tools

/usr/bin/inotifywait   

/usr/bin/inotifywatch

/usr/lib64/libinotifytools.so.0

/usr/lib64/libinotifytools.so.0.4.1

/usr/share/doc/inotify-tools-3.14

/usr/share/doc/inotify-tools-3.14/AUTHORS

/usr/share/doc/inotify-tools-3.14/COPYING

/usr/share/doc/inotify-tools-3.14/ChangeLog

/usr/share/doc/inotify-tools-3.14/NEWS

/usr/share/doc/inotify-tools-3.14/README

/usr/share/man/man1/inotifywait.1.gz

/usr/share/man/man1/inotifywatch.1.gz

 

inotifywait    在被監控的文件或目錄上等待特定文件系統事件(open close delete 等)發生 ,執行後處於阻塞狀態,使用shell腳本中使用,經過此命令。實現對目錄或文件的監控

 

inotifywatch   收集被監控的文件系統使用的統計數據,指文件系統時間發生的次數統計、統計文件數據信息變化的數量

 

[root@nfs01 ~]# ll /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 May 20 10:36 max_queued_events

-rw-r--r-- 1 root root 0 May 20 10:36 max_user_instances

-rw-r--r-- 1 root root 0 May 20 10:36 max_user_watches

 

max_user_watches:        設置inotifywait或inotifywatch命令能夠監視的文件數量(單進程)

8192

max_user_instances:設置每一個用戶能夠運行的inotifywait或inotifywatch命令的進程數

128

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

    16384

 

參數說明:

 

 

 

 

 

 

 

 

-m  表示始終保持事件的監聽狀態

-r   遞歸監控目錄數據信息變化

-q   輸出信息少(只打印事件信息)

-timefmt   指定時間輸出格式

-format    打印使用指定的輸出相似格式字符串:即實際監控輸出的內容

-e         指定監聽的指定的文件,若是省略,表示全部事件都進行監聽

 

 -m|--monitor     --- 始終保持監視狀態,默認對目錄只監視一次

 -r               --- 表示進行遞歸監控(目錄1/目錄2/目錄3/file)

 -q|--quiet       --- 將沒有信息不要輸出在屏幕上顯示 &>/dev/null

--timefmt <fmt>  --- 時間格式信息(date)

--format         --- 輸出內容的格式信息

 -e               --- 指定監控的事件信息(若是不指定此參數,表示全部事件都監控)

 

指定的事件:

 

 

 

 

建立1個文件的邏輯

[root@nfs01 ~]# inotifywait -m /data    ###   -m表示一直顯示

Setting up watches.

Watches established.

/data/ CREATE 0603-1.txt

/data/ OPEN 0603-1.txt

/data/ ATTRIB 0603-1.txt

/data/ CLOSE_WRITE,CLOSE 0603-1.txt

 

刪除1個文件的邏輯

/data/ OPEN,ISDIR

/data/ CLOSE_NOWRITE,CLOSE,ISDIR

/data/ DELETE 0603-1.txt

 

修改1個文件的邏輯

 

/data/ OPEN 0603.txt

/data/ MODIFY 0603.txt

/data/ CLOSE_WRITE,CLOSE 0603.txt

 

重命名一個文件,會觸發什麼事件?

  2018-05-09 /data/file01 事件信息:MOVED_FROM

          2018-05-09 /data/file10 事件信息:MOVED_TO

 

sed命令替換文件信息原理過程

                    2018-05-09 /data/file10 事件信息:OPEN

          2018-05-09 /data/sedRSK9Gs 事件信息:CREATE

          2018-05-09 /data/sedRSK9Gs 事件信息:OPEN

          2018-05-09 /data/file10 事件信息:ACCESS

          2018-05-09 /data/sedRSK9Gs 事件信息:MODIFY

          2018-05-09 /data/sedRSK9Gs 事件信息:ATTRIB

          2018-05-09 /data/sedRSK9Gs 事件信息:ATTRIB

          2018-05-09 /data/file10 事件信息:CLOSE_NOWRITE,CLOSE

          2018-05-09 /data/sedRSK9Gs 事件信息:CLOSE_WRITE,CLOSE

          2018-05-09 /data/sedRSK9Gs 事件信息:MOVED_FROM

          2018-05-09 /data/file10 事件信息:MOVED_TO

 

 

建立目錄

/data/ CREATE,ISDIR 01

 

基本用法:用-mrq 參數

 

[root@nfs01 ~]# inotifywait -mrq /data

/data/ OPEN,ISDIR

/data/ CLOSE_NOWRITE,CLOSE,ISDIR

/data/01/ CREATE ceshi.txt

/data/01/ OPEN ceshi.txt

/data/01/ ATTRIB ceshi.txt

/data/01/ CLOSE_WRITE,CLOSE ceshi.txt

 

inotifywait -mrq /data/   --- 實現數據監控最重要的三個參數

 

inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" /data/   ---詳細監控命令

 

-e create     -e參數指定監控的事件  監控的目錄

 

 

 

 

實時同步命令參數示意圖

 

 

 

 

 

 

經常使用的時間參數參照表
 

 

 

第三個里程碑:編寫inotify+rsync腳本

 

01 inotify使用方法

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

02 rsync 使用方法

 

初步完善後腳本:

#!/bin/bash

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

while read line

do

rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

done

 

 

 

 

 

 

 

快捷命令

ctrl+z  暫停運行的進程

 

pkill  -f  "sh -x inotify.sh"

殺手說明:殺手三人組只能殺死運行中的進程,不能殺死暫停的進程

 

jobs   檢查放入後臺運行的進程信息

 

bg           後臺運行進程放入前臺

fg            前臺運行進程放入後臺

 

sh   inotify.sh   &   腳本運行在後臺

ps -ef | grep sh

 

讓腳本程序在後臺運行的方法

 

1         sh inotify.sh &

2         nohup sh inotify.sh &

 

思考 screen   實現腳本後臺運行

 

<<inotify.sh>>

 

#!/bin/bash

inotifywait -mrq --format "%w%f" -e create,close_write,delete,moved_to /data/|\
while read line
do
rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
done

 

 

[root@nfs01 scripts]# sz inotify.sh   將指定文件發送到桌面

 

優化配置實踐

 

 

 

 

 

 

sersync部分

 

2)sersync

   第一個里程碑:安裝sersync軟件

   https://github.com/wsgzao/sersync

  

  cd /server/tools  工具放在這個目錄

 

   01  上傳軟件

<<sersync_installdir_64bit.zip>>

 

02  解壓軟件包

[root@nfs01 tools]# unzip sersync_installdir_64bit.zip

Archive:  sersync_installdir_64bit.zip

   creating: sersync_installdir_64bit/

   creating: sersync_installdir_64bit/sersync/

   creating: sersync_installdir_64bit/sersync/bin/

  inflating: sersync_installdir_64bit/sersync/bin/sersync 

   creating: sersync_installdir_64bit/sersync/conf/

  inflating: sersync_installdir_64bit/sersync/conf/confxml.xml 

   creating: sersync_installdir_64bit/sersync/logs/

 

[root@nfs01 tools]# cd sersync_installdir_64bit

[root@nfs01 sersync_installdir_64bit]# ll

total 4

drwxr-xr-x 5 root root 4096 Dec 23  2012 sersync

[root@nfs01 sersync_installdir_64bit]# tree    --軟件組成

.

└── sersync

    ├── bin

    │   └── sersync

    ├── conf

    │   └── confxml.xml

    └── logs

 

4 directories, 2 files

03  將軟件包移動到指定目錄中

[root@nfs01 sersync_installdir_64bit]# mv sersync/ /usr/local/

 

 

 

 

第二個里程碑:編寫軟件配置文件(難點)

 

配置文件位置:

[root@nfs01 conf]# ll

total 4

-rw-r--r-- 1 root root 2214 Oct 26  2011 confxml.xml

[root@nfs01 conf]# pwd

/usr/local/sersync/conf

 

 

#01 編寫配置文件前先進行備份

[root@nfs01 conf]# cp confxml.xml{,.bak}

[root@nfs01 conf]# ll

total 8

-rw-r--r-- 1 root root 2214 Oct 26  2011 confxml.xml

-rw-r--r-- 1 root root 2214 Jun  3 18:27 confxml.xml.bak

 

#02 編寫配置文件

 

 

<filter start="false">

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

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

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

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

 11     </filter>

 

說明:表示排除同步數據

 

<inotify>

 13         <delete start="true"/>

 14         <createFolder start="true"/>

 15         <createFile start="false"/>

 16         <closeWrite start="true"/>

 17         <moveFrom start="true"/>

 18         <moveTo start="true"/>

 19         <attrib start="false"/>

 20         <modify start="false"/>

 21     </inotify>

 

說明:指定監控的事件信息

 

23     <sersync>

 24         <localpath watch="/opt/tongbu">       --監控的目錄

 25             <remote ip="127.0.0.1" name="tongbu1"/>   --推送的遠程主機和目錄

 26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->   --註釋信息

 27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->

 28         </localpath>

 

 

 

說明:定義監控的目錄信息   指定推送的備份服務器IP地址與目錄信息

 

 <rsync>

 30             <commonParams params="-artuz"/>

 31             <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

 32             <userDefinedPort start="false" port="874"/><!-- port=874 -->

 33             <timeout start="false" time="100"/><!-- timeout=100 -->

 34             <ssh start="false"/>

 35         </rsync>

 

 

 

說明rsync部分:定義rsync數據推送時的參數信息

 

 

 

 

第三個里程碑:啓動sersync軟件服務

 

01   先給與執行權限:

[root@nfs01 bin]# pwd

/usr/local/sersync/bin

 

[root@nfs01 bin]# chmod +x sersync

[root@nfs01 bin]# ll

total 1768

-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync

 

 

02  查看幫助信息:

[root@nfs01 bin]# ./sersync -h

set the system param

execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events

parse the command param

_______________________________________________________

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

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

c參數-n: 指定開啓守護線程的數量,默認爲10個

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

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

參數-m:單獨啓用其餘模塊,使用 -m socket 開啓socket模塊

參數-m:單獨啓用其餘模塊,使用 -m http 開啓http模塊

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

________________________________________________________________

 

 

03  正式啓動

[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml

set the system param

execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events

parse the command param

option: -d         run as a daemon

option: -r         rsync all the local files to the remote servers before the sersync work

option: -o         config xml name:  /usr/local/sersync/conf/confxml.xml

daemon thread num: 10

parse xml config file

host ip : localhost        host port: 8008

daemon start,sersync run behind the console

use rsync password-file :

user is        rsync_backup

passwordfile is         /etc/rsync.password

config xml parse success

please set /etc/rsyncd.conf max connections=0 Manually

sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)

Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)

please according your cpu ,use -n param to adjust the cpu rate

------------------------------------------

rsync the directory recursivly to the remote servers once

working please wait...

execute command: cd /data && rsync -az -R --delete ./ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1

run the sersync:

watch path is: /data

 

至此能夠進行測試

相關文章
相關標籤/搜索