全網備份數據同步方案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
至此能夠進行測試