实时同步备份方法
1)利用脚本实现实时同步
2)利用软件实现实时同步
实时同步备份原理
存储服务器 ---> 实时同步 ---> 备份服务器
一 实时备份的服务该如何建立
1.如何将存储上的用户产生的数据进行实时监控,然后进行实时传送到备份服务器上。(inotify)
2.存储服务器要进行数据传输同步 如何进行数据传输同步 (rsync备份服务)
- 如何让监控数据变化程序+rsync传输数据程序 建立关系.
二 如何进行实时监控目录数据的变化
监控目录数据变化软件:inotify
yum install -y 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
2.1 监控目录数据变化的命令
/usr/bin/inotifywait *****(重要)
/usr/bin/inotifywatch 监控事件(了解)
监控事件: 创建事件(6次) 删除事件(10) 修改事件 移动事件
监控这些东西意义不是很大
2.2 监控命令的应用及参数的含义
- -m|--monitor ***** Keep listening for events forever. Without this option, inotifywait will exit after one
//让监控过程始终保持下去;没有这个参数,只监控一次 -
-r|--recursive ***** Watch directories recursively.
递归监控目录,对目录及目录的子目录也进行监控。 -
--format <fmt> Print using a specified printf-like format string; read the man page for more details.
//定义输出信息格式
//时间信息 创建什么文件 事件信息:创建文件 -
--timefmt <fmt> strftime-compatible format string for use with %T in --format string.
//具体定义时间的格式 -
-q|--quiet ** Print less (only print events) 利用脚本使用同步备份
//输出更少的信息,只输出事件信息 -
-e|--event <event1> [ -e|--event <event2> ... ]
Listen for specific event(s). If omitted, all events are listened for.
//只监控什么事件 - -exclue //排除监控目录的指定子目录
- -iexclude //排除的监控目录不区分大小写。
2.3 监控的事件
-
access file or directory contents were read
文件或目录内容被读取 -
modify file or directory contents were written
文件或目录内容被写入 -
attrib file or directory attributes changed
文件或目录属性被改变 (大小 权限 时间) -
close_write file or directory closed, after being opened in writeable mode
文件或目录被关闭,在打开之后有写操作然后关闭文件 -
close_nowrite file or directory closed, after being opened in read-only mode
文件或目录被关闭,在打开之后没有任何操作
编写文件--打开文件--编辑/没有编辑--关闭文件 -
close file or directory closed, regardless of read/write mode
文件或目录被关闭,写或读之后被关闭 -
open file or directory opened
文件或目录被打开 -
moved_to file or directory moved to watched directory
文件或目录被移动到监控目录 其他地方--数据--> 监控目录 -
moved_from file or directory moved from watched directory
文件或目录从监控目录移除 监控目录--数据--> 其他地方 -
move file or directory moved to or from watched directory
文件或目录移动到或移走 -
create file or directory created within watched directory
文件或目录在监控目录中被创建出来 -
delete file or directory deleted within watched directory
文件或目录在监控目录中被删除 -
delete_self file or directory was deleted
文件或目录被删除 -
unmount file system containing file or directory unmounted
监控目录中有一个挂载点,包含文件或目录的文件系统被卸载
PS:重要事件 close_write move create delete
2.4 监控命令语法结构
inotifywait 参数信息 监控目录
inotifywait -mrq --timefmt "%F %T" --format "%T %w%f %e" /data
默认把所有事件都监控
%T
%F %T %w %f
2019-07-20 22:13:20 /data/oldboy_dir/oldboy04.txt CREATE
%w --- 监控的目录
%f --- 触发事件文件数据信息
%e --- 触发时间信息
图片.png
三 实现实时同步脚本编写过程
第一个历程:进行数据监控
inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data
/data/file01.txt
/data/file01.txt
第二个历程:部署好rsync守护进程服务
服务端:安装软件 --> 编辑文件 --> 创建用户 --> 创建密码文件(授权)--> 创建备份目录(权限属主属组)--> 启动服务
客户端:创建密码文件(600)--> 测试传输
第三个历程:编写脚本
#!/bin/bash
/data/ 1000个文件
oldboy01.txt
inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data|
while read line
//这种情况直接调用会出现问题,在目录的子目录创建文件 或者重命名的时候都无法正常创建,会出现问题
//原因:是因为当删除的时候,rsync进行增量备份,删除的信息已经删除无法做同步。
do
rsync -az $line--delete /date/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
//使用 --delete /date 传送rsync的传送的时候 使用无差异同步会解决上述问题。
done
3.2 当执行脚本写完出现的问题
-
问题一:执行脚本总有输出信息,并且脚本不能持续运行 & 让脚本后台运行
如何实现脚本在后台一直运行: -
方法一: 执行脚本后面加上 &
sh /server/scripts/inotify_watch.sh & 连接断开,就后台进程会消失 -
方法二: 利用专用命令 nohup
nohup sh /server/scripts/inotify_watch.sh & -
问题二:批量创建文件的时候,数据已经同步完毕,但是脚本还在一直运行
(touch oldboy{01..10}.txt,创建完就目录就会有的,当脚本读取完直接就传到备份服务器。后续while每一行读到的都属于增量备份。)
四.利用软件实现实时同步(专业的编写)
sersync软件实现实时同步:先安装好inotify+rsync
或者是lsyncd
git软件仓库
如何部署安装sersync软件
第一个历程:下载获取软件
[git软件仓库](https://github.com/wsgzao/sersync) 发明人--周洋 金山公司
第二个历程:上传软件到linux系统
yum install -y lrzsz
rz -y windows数据 ---> linux系统
sz -y linux数据 ---> windows系统
第三个历程:安装部署sersync软件(二进制包)
unzip sersync_installdir_64bit.zip
mv|cp -a /server/tools/sersync_installdir_64bit/sersync/ /usr/local/
//正规下载的软件只有两个目录 一个是/conf 一个是/bin
第四个历程:修改配置文件
vim /usr/local/sersync/conf/confxml.xml //66行内容
说明:排除指定信息不要进行实时同步
<debug start="false"/> //开启调试功能。
<fileSystem xfs="false"/>
<filter start="false">
6 <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>
//说明:指定监控的事件信息
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>
//重点说明:实现实时同步关键配置
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>
29 <rsync>
30 <commonParams params="-artuz"/> //后面不需要加/线
31 <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->//如果端口有变化的时候可以更改为true
可参见此图可将配置文件输入相应的内容
第五个历程:启动实时同步服务,并检查测试
需要进入到此软件的/bin下目录,但注意的是不能用systemctl启动
chmod +x /usr/local/sersync/bin/sersync
//不能直接执行此命令,环境变量中便没有环境变量的路径
# ln -s /usr/local/sersync/bin/sersync /usr/local/sbin/sersync
# ll /usr/local/sbin/sersync
lrwxrwxrwx 1 root root 30 Jul 21 00:28 /usr/local/sbin/sersync -> /usr/local/sersync/bin/sersync
第六个历程:使用命令启动服务
sersync -dro//o必须放在最后面 /usr/local/sersync/conf/confxml.xml //运行前先把之前运行的脚本先停止。pkill innotify
4.2 sersync命令的相关参数
命令重要参数:
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍//测试
参数-o: 指定配置文件,默认使用confxml.xml文件//可以使用多个文件 可以监控多个目录 一个配置文件监控一个目录
/usr/local/sersync/conf/confxml.xml
/usr/local/sersync/conf/confxml01.xml
/usr/local/sersync/conf/confxml02.xml
sersync -dro /usr/local/sersync/conf/confxml.xml
五 实现弃用NFS服务方案:
图片.png原理:预防单点故障的问题,在存储服务器上监控数据数据目录,通过sersync进行反向同步,当存储服务器宕机的时候用户可以从web01上的读取数据。
网友评论