第1章 存儲(chǔ)實(shí)施同步方案
思路每次用戶存入數(shù)據(jù)的時(shí)候 服務(wù)器都自動(dòng)更新備份服務(wù)的備份內(nèi)容 以免各種不可控事件造成數(shù)據(jù)丟失
1.1 方法一 Inotify服務(wù) 實(shí)現(xiàn)實(shí)時(shí)同步
(1) NFS服務(wù)器下載安裝inotify服務(wù)
yum install -y inotify-tools
(2) 搭建rsync備份服務(wù)器 并保證可用
(3) 啟動(dòng)inotify服務(wù) 編寫腳本
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,move,close_write|\
while read line=oldboy03.txt ?判斷傳過來的文件是不是oldboy03.txt 不是不執(zhí)行下面
do
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup –password-file=/etc/rsync.password
done
1.2 inotfy服務(wù)介紹
下載后會(huì)有兩個(gè)命令
主要是
Inotifywait ?監(jiān)控目錄數(shù)據(jù)信息變化命令
1.2.1 Inotify參數(shù)介紹
--exclude <pattern>
進(jìn)行監(jiān)控?cái)?shù)據(jù)時(shí) 指定哪些數(shù)據(jù)信息不要進(jìn)行監(jiān)控
--excludei <pattern>
進(jìn)行監(jiān)控?cái)?shù)據(jù)時(shí), 排除信息不區(qū)分大小寫
-m|--monitor
一直對(duì)指定目錄進(jìn)行監(jiān)控(守護(hù)進(jìn)程)
-r|--recursive
遞歸監(jiān)控目錄中數(shù)據(jù)變化
--format <fmt>
定義輸出信息格式
%w
監(jiān)控目錄路徑信息
%f
監(jiān)控觸發(fā)事件數(shù)據(jù)信息
%e
相應(yīng)事件信息
%T
定時(shí)觸發(fā)事件時(shí)間信息
--timefmt <fmt>
定義時(shí)間格式信息 (類似 date "+%F")(調(diào)用--timefmt所定義時(shí)間格式)
-q|--quiet
將某些信息不要進(jìn)行顯示輸出 類似(>/dev/null)
-e|--event
指定監(jiān)控的事件信息
1.2.2 事件參數(shù)
常用參數(shù)
close_write
文件關(guān)閉事件(文件打開寫入新內(nèi)容后關(guān)閉)
create
創(chuàng)建文件事件
delete
文件刪除事件
move
文件數(shù)據(jù)移動(dòng)操作
不常用參數(shù)
access
文件被讀事件
attrib
文件屬性信息改變事件
modify
文件修改事件
open
文件打開事件
inotify 語法: inotifywait -mrqe create,delete /data
1.3 方法二 利用sersync服務(wù)進(jìn)行實(shí)時(shí)同步
Sersync 就是 inotify 在封裝版本 加強(qiáng)功能版本
1.3.1 部署實(shí)現(xiàn)數(shù)據(jù)同步
前提必須要有inotify
(1) 在 https://github.com/wsgzao/sersync 下載sersync二進(jìn)制包
(2) 利用 rz -y 命令將二進(jìn)制包傳輸入服務(wù)器
利用 unzip 命令進(jìn)行解壓 解壓到指定路徑
PS 養(yǎng)成好習(xí)慣 個(gè)人的操作 放到個(gè)人家目錄或放在 /server/下 方便以后查找
(3) 將解壓的文件傳輸?shù)?/usr/local/ 目錄下
mv 或 cp /server/sersync /uer/local/
1.3.2 配置軟件
/usr/local/sersync/conf/confxml.xml
第五行顯示整個(gè)過程 出bug用 打開寫true
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <head version="2.5">
3 <host hostip="localhost" port="8008"></host>
4 <debug start="false"/>
5 <fileSystem xfs="false"/>
6-11行過濾功能
6 <filter start="false"> #<==開關(guān)true為開啟
7 <exclude expression="(.*)\.svn"></exclude>
8 <exclude expression="(.*)\.gz"></exclude>
9 <exclude expression="^info/*"></exclude>
10 <exclude expression="^static/*"></exclude>
11 </filter>
12-21行監(jiān)控事件實(shí)踐變化配置
12 <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>
29-35行 rsync命令的配置
29 <rsync>
30 <commonParams params="-artuz"/> #rsync參數(shù)
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 --> #超時(shí)時(shí)間
34 <ssh start="false"/>
35 </rsync>
36-42 失敗重傳
36 <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
37 <crontab start="false" schedule="600"><!--600mins-->
38 <crontabfilter start="false">
39 <exclude expression="*.php"></exclude>
40 <exclude expression="info/*"></exclude>
41 </crontabfilter>
42 </crontab>
43 <plugin start="false" name="command"/>
44</sersync>
1.3.3 修改信息后啟動(dòng)服務(wù) 賦予執(zhí)行命令執(zhí)行權(quán)限
chmod +x /usr/local/sersync/bin/sersync
后執(zhí)行命令
/usr/local/sersync/bin/sersync -h
<--查看命令參數(shù)
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
<--運(yùn)行sersync命令 開啟實(shí)時(shí)備份
自編寫啟動(dòng),關(guān)閉,重啟服務(wù)腳本
if [ "$1" == "start" ]
then
sersync -dro /usr/local/sersync/conf/confxml.xml
elif [ "$1" == "stop" ]
then
killall sersync
sleep 1
killall sersync
elif [ "$1" == "restart" ]
then
killall sersync
sleep1
sersync -dro /usr/local/sersync/conf/confxml.xml
else
echo "pls input: start|stop|restart"
fi
1.3.4 關(guān)閉服務(wù)操作
普通的辦法無法結(jié)束sersync服務(wù)必須用殺死進(jìn)程方式關(guān)閉服務(wù)
必須用kill殺死進(jìn)程
第一種 ps -ef|grep sersync 找到進(jìn)程
使用 kill 進(jìn)程號(hào)方式殺掉進(jìn)程
第二種 killall 進(jìn)程名 直接殺死所有進(jìn)程名指定進(jìn)程
推薦 但是注意名字一定輸入正確 否則會(huì)報(bào)錯(cuò)
第三種 pkill 進(jìn)程名 模糊搜索殺死所有進(jìn)程 不推薦 容易將同名 相關(guān)進(jìn)程關(guān)閉 造成各種錯(cuò)誤