当前位置: 首页 > 工具软件 > inotify-tools > 使用案例 >

企业备份方案rsync+inotify-tools与rsync+sersync架构

司空俊雅
2023-12-01

1企业备份方案介绍
定时备份,实现周期备份重要数据信息。
实时复制时,主要用于用户提交的数据的备份,
对于用户提交到服务器上的普通文件(图片,压缩包,视频,文档等),采用inotify/sersync+rsync实时备份方式,对于数据文件还有较复杂的分布式存储工具自身可以实现将数据同步备份成多分,例如:FastDFS,GlusterFS;
对于提交到数据库的数据,可使用数据库的主从复制(如Mysql,Oracle)方式备份,这是软件自带的实时复制备份方案

扩展:
ecs云服务器 ECS(Elastic Compute Service)块存储 云盘 只能挂一台服务器
nas 阿里云文件存储NAS(Apsara File Storage)非结构化数据,支持nfs/smb协议 liinux/win下直接挂载就可以使用, 可以挂多台服务器(部门间文件共享,docker)
oss对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。对象存储 图像 音频,非结构化存储数据(动静分离)减小磁盘的压力

2实时复制软件
inotify-tools 复制脚本编写
sersync 配置文件编写

inotify机制
异步事件系统监控机制
异步(男孩送礼物到快递间,让女孩自己取);同步(男孩手捧礼物,等女孩接,女孩不接就一直等着)
inotify-tools实际上是一个监控指定目录数据实时变化的软件程序
sersync软件在inotify基础上开发,支持配置文件配置,定时重试复制机制,还提供了接口做cdn数据更新,支持多线程操作。

缺点,实测200个文件(10-100k)为极限,超过极限复制会有延迟

实时复制实践(inotify):
前提:backup rsync服务端部署好
1)部署nfs客户端
[root@nfs01~]#echo ‘export RSYNC_PASSWORD=123’ >>/etc/bashrc
[root@nfs01~]#source /etc/bashrc
[root@nfs01~]#echo $RSYNC_PASSWORD
123

测试推送
[root@nfs01~]#rsync -avz /data rsync_backup@172.16.1.41::backup/
sending incremental file list
data/
data/1
data/2
data/3
data/4
data/5
data/web01.txt
data/web02.txt

sent 438 bytes received 161 bytes 1,198.00 bytes/sec
total size is 0 speedup is 0.00

2)查看inotify支持情况
[root@nfs01~]#uname -r
3.10.0-957.el7.x86_64
(版本大于2.6版本)
[root@nfs01~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r–r-- 1 root root 0 Apr 4 19:48 max_queued_events(设置Inotify实例事件队列可容纳事件数量)
-rw-r–r-- 1 root root 0 Apr 4 19:48 max_user_instances(设置每个用户可以运行的inotifywait或inotifywatch命令的进程数,有几个进程来监控)
-rw-r–r-- 1 root root 0 Apr 4 19:48 max_user_watches(设置inotifywait或inotiyewatch命令可以监视的文件数量)
(有这三个参数)

3)inotify-tools工具安装
[root@nfs01~]#rpm -qa epel-release
[root@nfs01~]#yum install epel-release -y
[root@nfs01~]#yum install inotify-tools -y
Installed:
inotify-tools.x86_64 0:3.14-9.el7

Complete!
[root@nfs01~]#rpm -ql inotify-tools|head -2
/usr/bin/inotifywait #
/usr/bin/inotifywatch

4)增,删,改监控测试
[root@nfs01~]#inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f’ -e delete,close_write /data
05/04/20 12:01 /data/a001.txt
05/04/20 12:01 /data/a001.txt
05/04/20 12:02 /data/a001.txt

[root@nfs01/data]#touch a001.txt
[root@nfs01/data]#echo ddd >a001.txt
[root@nfs01/data]#rm -f a001.txt

5)编写实时监控和复制脚本:
[root@nfs01/data]#cat /server/scripts/monitor.sh
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format ‘%w%f’ -e close_write,delete /data|\ #监控目录如果/data有变化
while read line
do
cd /data &&
rsync -az --delete ./ rsync_backup@172.16.1.41::backup
done #向/backup中推送变化

在后台运行:
[root@nfs01/data]#/bin/sh /server/scripts/monitor.sh &
[1] 10376
添加到rc.local
[root@nfs01/data]#vim /etc/rc.local
[root@nfs01/data]#tail -2 /etc/rc.local
####################
/bin/sh /server/scripts/monitor.sh &

6)sersync项目的优点:
支持多线程,自带出错处理机制,自带crontab功能,重传机制
还支持socket与http协议扩展,cdn推送

多线程推送远程服务器,推送失败的再通过crontab定时推送

扩展:
企业案例有用户上传非法图片,网监局打电话要求删除,先删本地nfs服务器源图,再删cdn缓存中的图片,才能彻底删除。
一般情况用户访问网站图片,先通过cdn缓存,如果有直接返回用户,如果没有,cdn向nfs存储服务器索取返回后,cd在本地缓存一份,用户再次访问时,cdn直接返回用户。
解决用户第一次访问存储服务器的问题,当web服务器存储图片的事件发生时,nfs存储服务器不等用户访问直接推送到cdn缓存服务器。
但这样就出现了图片删除的问题。
只删cdn没用,cdn还会往源站取
只删源站也没有用,因为cdn还有缓存备份
所以先删除本地,再通知cdn删除,通过cdn管理平台。(sersync可以自动通知cdn删除)

sersync实践:
1) 客户端推送成功
[root@nfs01/data]#rsync -avz /data rsync_backup@172.16.1.41::backup
sending incremental file list
data/

sent 72 bytes received 28 bytes 66.67 bytes/sec
total size is 0 speedup is 0.00

2)部署sersync服务(nfs)
下载
[root@nfs01/server/tools]#wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
–2020-04-05 16:35:48-- http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
2020-04-05 16:36:00 (65.2 KB/s) - ‘sersync2.5.4_64bit_binary_stable_final.tar.gz’ saved [727290/727290]
解压
[root@nfs01/server/tools]#tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
重构目录
[root@nfs01/server/tools]#tree
.
├── GNU-Linux-x86
│ ├── confxml.xml
│ └── sersync2
└── sersync2.5.4_64bit_binary_stable_final.tar.gz

1 directory, 3 files

[root@nfs01/server/tools]#mkdir -p application
[root@nfs01/server/tools]#mv /application/sersync2 application/
[root@nfs01/server/tools]#mv GNU-Linux-x86/ conf/
[root@nfs01/server/tools]#cp conf/confxml.xml conf/confxml.xml.ori
[root@nfs01/server/tools]#tree
.
├── application
│ └── sersync2
├── conf
│ ├── confxml.xml
│ └── confxml.xml.ori
└── sersync2.5.4_64bit_binary_stable_final.tar.gz

2 directories, 4 files

3)完成监控配置
inotifywait -mrq --format ‘%w%f’ -e createFolder,close_write,delete,delete,moveFrom,moveTo /data
4)完整命令拼接:
rsync –az –time=100 /data rsync_backup@172.16.1.41::backup

[root@nfs01/server/tools]#vim conf/confxml.xml

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

4)启动服务
[root@nfs01/server/tools]#application/sersync2 -d -n 10 -o /server/tools/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: -n thread num is: 10
option: -o config xml name: /server/tools/conf/confxml.xml
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
run the sersync:
watch path is: /data

二进制程序,不是yum安装的,所以不能用systemctl start
关闭服务pkill sersync
添加开机启动:
[root@nfs01/data]#vim /etc/rc.local
[root@nfs01/data]#tail -1 /etc/rc.local
/server/tools/application/sersync2 -d -n 10 -o /server/tools/conf/confxml.xml
[root@nfs01/data]#pkill sersync

 类似资料: