数据库运维
记录DBA学习成长历程

第17章:实时同步备份

文章目录

1 实时备份服务

1.1 定义

因为定时备份最快的备份周期为1分钟,所以需要实时备份

1.2 实现实时备份原理

2 实时同步服务端部署

2.1 安装inotify监控软件

inotify-tools --> epel
yum install -y inotify-tools
软件使用方法说明:
[root@nfs01 yum.repos.d]# rpm -ql inotify-tools
/usr/bin/inotifywait  ---实践监控目录数据信息变化
/usr/bin/inotifywatch  --- 完成基本监控功能,统计操作的事件信息次数

2.1.1 监控软件命令参数

-m 始终处于监控数据变化状态
-r 表示实现递归监控
-q 只显示输出事件信息
--format <fmt> 定义输出信息的格式
[root@nfs01 data]#mkdir oldboy_dir03
[root@nfs01 ~]# inotifywait -mrq --format "变化文件信息:%f 事件信息:%e 监控目录:%w" /data
变化文件信息:oldboy_dir03 事件信息:CREATE,ISDIR 监控目录:/data/
变化文件信息:oldboy_dir03 事件信息:OPEN,ISDIR 监控目录:/data/
变化文件信息:oldboy_dir03 事件信息:CLOSE_NOWRITE,CLOSE,ISDIR 监控目录:/data/
sed 命令修改文件流程
[root@nfs01 data]# sed -i "s#oldboy#oldgirl#g" oldboy123.txt 
变化文件信息:oldboy123.txt 事件信息:OPEN 监控目录:/data/ 
变化文件信息:sedLy8mI7 事件信息:CREATE 监控目录:/data/ 
变化文件信息:sedLy8mI7 事件信息:OPEN 监控目录:/data/ 
变化文件信息:oldboy123.txt 事件信息:ACCESS 监控目录:/data/ 变化文件信息:sedLy8mI7 事件信息:MODIFY 监控目录:/data/ 
变化文件信息:sedLy8mI7 事件信息:ATTRIB 监控目录:/data/ 
变化文件信息:oldboy123.txt 事件信息:CLOSE_NOWRITE,CLOSE 监控目录:/data/ 
变化文件信息:sedLy8mI7 事件信息:CLOSE_WRITE,CLOSE 监控目录:/data/ 
变化文件信息:sedLy8mI7 事件信息:MOVED_FROM 监控目录:/data/ 
变化文件信息:oldboy123.txt 事件信息:MOVED_TO 监控目录:/data/
--timefmt <fmt> 定义时间格式信息 %F %d 
[root@nfs01 ~]# inotifywait -mrq --timefmt "%F %T" --format "时间信息:%T 变化文件信息:%f 事件信息:%e 监控目录:%w" /data 
时间信息:2019-03-01 09:22:33 变化文件信息:oldboy_dir05 事件信息:CREATE,ISDIR 监控目录:/data/
时间信息:2019-03-01 09:22:33 变化文件信息:oldboy_dir05 事件信息:OPEN,ISDIR 监控目录:/data/
时间信息:2019-03-01 09:22:33 变化文件信息:oldboy_dir05 事件信息:CLOSE_NOWRITE,CLOSE,ISDIR 监控目录:/data/
-e 指定监控事件信息
[root@nfs01 data]# mkdir oldboy_02
[root@nfs01 data]# rm -rf oldboy_02
[root@nfs01 ~]# inotifywait -mrq --format "变化文件信息:%f 事件信息:%e 监控目录:%w" /data -e create
变化文件信息:oldboy_02 事件信息:CREATE,ISDIR 监控目录:/data/

2.1.2 监控软件事件信息

access 目录或文件内容被读取
modify 目录或文件内容被写入(修改)
attrib 目录或文件属性信息有改变
close_write 文件或目录被关闭,是在写入模式之后进行关闭的 编写文件了
close_nowrite 文件或目录被关闭,是在未写入模式之后进行关闭的 读取文件了
close 文件或目录被关闭,无论是读取或是写入关闭
open 文件或目录被打开
moved_to 有文件或目录移动到监控目录
moved_from 有文件或目录从监控目录移出
move 有文件或目录发生移动
create 有文件或目录被创建
delete 有文件或目录被删除
delete_self 有监控目录被删除了

总结: 那些事件比较重要 (增 删 改(内容 属性 名字))
close_write -- 改(内容)
attrib -- 改(属性)
moved_to -- 改(名字)
create -- 增
delete -- 删

2.2 部署配置rsync软件

echo oldboy123 >/etc/rsync.password && chmod 600 /etc/rsync.password

2.3 sersync软件部署和配置

2.3.1 软件部署安装过程

(二进制包安装---绿色安装软件)
mkdir /server/tools -p
https://github.com/wsgzao/sersync
将软件上传
[root@nfs01 tools]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs01 tools]# ll GNU-Linux-x86/
confxml.xml sersync2
[root@nfs01 tools]# cp -a /server/tools/GNU-Linux-x86/ /usr/local
[root@nfs01 tools]# cd /usr/local
[root@nfs01 local]# mv GNU-Linux-x86/ sersync

2.3.2 软件配置文件编写

01. 实现数据信息同步排除/过滤功能

<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>

02.定义实时监控的事件信息

<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>

03. 最核心部分(将监控+传输数据进行结合)

<localpath watch="/opt/tongbu">
<remote ip="127.0.0.1" name="tongbu1"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>

修改后内容
24 <localpath watch="/data">
25 <remote ip="172.16.1.41" name="backup"/>
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="-az"/>
31 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>

2.3.3 启动服务

[root@nfs01 sersync]# chmod +x /usr/local/sersync/bin/sersync2
[root@nfs01 sersync]# ./sersync2 -help
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命令推送一遍
参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
            监控/data --- 同步传输 --- confxml.xml
            监控/data01 --- 同步传输 --- confxml01.xml
            监控/data02 --- 同步传输 --- confxml02.xml
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

启动sersync
[root@nfs01 sersync]# ./sersync2 -dro /usr/local/sersync/confxml.xml
...
config xml parse success
...
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

2.3.4 进行数据同步测试

[root@nfs01 sersync]# rm -rf /data/*
[root@backup backup]# ll
total 0
[root@nfs01 data]# touch /data/oldboy01.txt
[root@nfs01 data]# touch /data/oldboy{02..1000}.txt
[root@nfs01 data]# ls|wc -l
1000

3 客户端部署

(备份服务器)
第一个步骤: 完成rsync备份服务搭建

4  sersync数据重传和debug功能

开启重启功能:
cd /usr/local/sersync/conf/
vim confxml.xml
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/> 实现重传功能
<debug start="true"/>  --- 调式模式 显示sersync同步过程,需要开启调式模式

5 NFS服务单点问题解决方案

1. keepalived服务可以解决单点故障
2. 弃用NFS存储方案

存储解决单点问题:
分布式存储

数据库解决单点问题:
主从复制
高可用配置 MHA

赞(0)
MySQL学习笔记 » 第17章:实时同步备份