第1章 存储实施同步方案
思路每次用户存入数据的时候 服务器都自动更新备份服务的备份内容 以免各种不可控事件造成数据丢失
1.1 方法一 Inotify服务 实现实时同步
(1) NFS服务器下载安装inotify服务
yum install -y inotify-tools
(2) 搭建rsync备份服务器 并保证可用
(3) 启动inotify服务 编写脚本
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,move,close_write|\
while read line=oldboy03.txt ß判断传过来的文件是不是oldboy03.txt 不是不执行下面
do
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup –password-file=/etc/rsync.password
done
1.2 inotfy服务介绍
下载后会有两个命令
主要是
Inotifywait ß监控目录数据信息变化命令
1.2.1 Inotify参数介绍
--exclude <pattern>
进行监控数据时 指定哪些数据信息不要进行监控
--excludei <pattern>
进行监控数据时, 排除信息不区分大小写
-m|--monitor
一直对指定目录进行监控(守护进程)
-r|--recursive
递归监控目录中数据变化
--format <fmt>
定义输出信息格式
%w
监控目录路径信息
%f
监控触发事件数据信息
%e
相应事件信息
%T
定时触发事件时间信息
--timefmt <fmt>
定义时间格式信息 (类似 date "+%F")(调用--timefmt所定义时间格式)
-q|--quiet
将某些信息不要进行显示输出 类似(>/dev/null)
-e|--event
指定监控的事件信息
1.2.2 事件参数
常用参数
close_write
文件关闭事件(文件打开写入新内容后关闭)
create
创建文件事件
delete
文件删除事件
move
文件数据移动操作
不常用参数
access
文件被读事件
attrib
文件属性信息改变事件
modify
文件修改事件
open
文件打开事件
inotify 语法: inotifywait -mrqe create,delete /data
1.3 方法二 利用sersync服务进行实时同步
Sersync 就是 inotify 在封装版本 加强功能版本
1.3.1 部署实现数据同步
前提必须要有inotify
(1) 在 https://github.com/wsgzao/sersync 下载sersync二进制包
(2) 利用 rz -y 命令将二进制包传输入服务器
利用 unzip 命令进行解压 解压到指定路径
PS 养成好习惯 个人的操作 放到个人家目录或放在 /server/下 方便以后查找
(3) 将解压的文件传输到 /usr/local/ 目录下
mv 或 cp /server/sersync /uer/local/
1.3.2 配置软件
/usr/local/sersync/conf/confxml.xml
第五行显示整个过程 出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"> #<==开关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行监控事件实践变化配置
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参数
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>
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 修改信息后启动服务 赋予执行命令执行权限
chmod +x /usr/local/sersync/bin/sersync
后执行命令
/usr/local/sersync/bin/sersync -h
<--查看命令参数
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
<--运行sersync命令 开启实时备份
自编写启动,关闭,重启服务脚本
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 关闭服务操作
普通的办法无法结束sersync服务必须用杀死进程方式关闭服务
必须用kill杀死进程
第一种 ps -ef|grep sersync 找到进程
使用 kill 进程号方式杀掉进程
第二种 killall 进程名 直接杀死所有进程名指定进程
推荐 但是注意名字一定输入正确 否则会报错
第三种 pkill 进程名 模糊搜索杀死所有进程 不推荐 容易将同名 相关进程关闭 造成各种错误