一、实时复制服务介绍
企业网站和应用需要有完善的数据备份方案确保数据安全。在真实企业中,通常有两种数据备份方案
1. 利用定时方式实现周期备份重要数据信息
主要是利用定时任务执行备份数据脚本,然后使用Rsync工具推送到远端服务器数据备份。
2.利用实时复制方式实现实时备份重要数据信息
实时复制是企业数据备份最重要的方式,主要用于用户提交的数据备份。对于用户提交到服务器上的普通文件,可采用Inotify/Sersync+Rsync实时备份方式;对于数据文件或者较为复杂的分布式存储工具可以实现将数据同时备份成多份;对于提交到数据库中的数据,一般使用数据库主从复制方式备份。
定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失;其次,用户上传数据信息需要实时备份保存,因此可选实时复制数据的方式实现实时数据备份。
二、实时数据备份的工作原理
1 创建要存储数据的目录
2. 利用实时同步的软件监控要备份的数据目录(注:实时复制软件会监控磁盘文件系统的变化)
3. 利用rsync服务进行数据推送传输备份
由此可见,Rsync备份服务器是需要先行搭建的,Rsync备份服务器搭建完成后,再进行实时复制软件服务的部署。
三、实时同步服务部署
1. 实时复制软件
目前企业较为常用的实时复制软件有以下两种:
2.实时复制服务部署环境
根据实时备份数据原理,实时复制数据项目服务器目录规划表如下:
3. 实时复制Inotify机制
1)Inotify机制简介
Inotify是一种异步的系统事件监控机制,Linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统的添加、删除、修改、移动等各种事件,利用内核接口,第三方软件(如Inotify-tools)就可以监控文件系统下文件的各种变化情况。Inotify-tools是一个监控指定目录数据实时变化的软件程序。Inotify程序原理上是一种事件驱动机制,为应用程序监控文件系统事件提供了实时响应事件机制,可以做到对事件处理的实时响应。
2)Inotify机制的优缺点
优点:a. 监控文件系统事件变化,通过复制工具实现实时数据复制;b. 支持多线程实时复制
缺点:实测并发如果文件大于200个文件(10~100kb),复制会延迟。
3)Inotify+Rsync实现实时同步备份部署过程
第一里程:在NFS服务器上安装inotify软件
a. 检查操作系统内核版本
b. 安装Inotify软件
c. 查看是否支持实时监控程序
安装完Inotify-tools软件后,主要应用两个命令实现数据信息的监控,一个是inotifywait命令实现对数据变化事件的监控;另一个是inotifywatch命令实现对数据事件信息的统计。
max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)。默认只能监控8192个文件
max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。默认每个用户可以开启inotify服务128个进程
max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量。默认监控事件队列长度为16384
d. Inotify工具命令的介绍
inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。
inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。
其中inotifywait是实现监控的重点,该命令常用的参数如下:
以上参数主要为命令相关参数,利用inotify软件主要对数据发生的事件进行实时监控。常用监控文件事件功能参数如下:
测试
(1)测试create事件
(2)测试delete事件
(3)测试close_write事件
(4)测试move事件
(5)测试sed替换文件内容操作事件的变化情况
注:sed替换文件内容事件变换说明
创建临时文件;把源文件内容放到临时文件中;修改临时文件内容;对源文件进行备份-i.ori test.ori;将临时文件重命名为test.txt
inotifywatch 命令实际应用不多,测试创建事件统计功能如下:
第二里程:部署rsync守护进程服务
rsync服务端部署(Backup服务器上)
a 检查rsync软件是否已经安装
b 编写rsync软件主配置文件
c 创建备份目录管理用户
d 创建备份目录,并进行授权
e 创建认证文件,编写认证用户和密码信息,设置文件权限为600
f 启动rsync守护进程服务
rsync客户端部署(nfs服务器上)
a 检查rsync软件是否已经安装
b 创建认证文件,编写认证用户密码信息即可,设置文件权限为600
c 利用客户端进行数据同步测试
第三里程:编写脚本:实现inotify与rsync软件结合
第四里程:测试验证
脚本测试没有问题后,可以将监控脚本放在后台执行,
nohup /bin/sh /server/scripts/monitor1.sh &>/dev/null &
4. Sersync实时复制工具介绍
Sersync项目是利用Inotify与Rsync技术实现对服务器数据实时复制的解决方案,其中Inotify用于监控Sersync所在服务器上文件系统的事件变化,当事件发生变化时,就调用Rsync命令将变化的数据复制到远端服务器上。
软件参考链接:https://github.com/wsgzao/sersync
1) Sersync项目的特点:
a. 使用C++ 编写,支持对监控事件的过滤功能
b. Sersync采用XML配置文件,然后由于守护进程启动,配置起来比Inotify-tools简单
c. 使用多线程进行复制,即可以并发复制多个不同文件
d. Sersync自带出错处理机制,通过失败队列对出错的文件重新进行复制
e. Sersync自带Crontab功能,可实现对失败队列中的文件定时整体复制
f. Sersync自带socket与HTTP协议扩展,可以满足有特殊需求的公司二次开发
2) Sersync软件架构及工作原理
a. inotify监控指定目录对应事件的变化,当有事件变化时进入事件过滤队列
b. 过滤队列负责过滤不需要复制的数据,也可以过滤短时间内产生的重复Inotify事件信息,过滤后的事件触发Rsync对变化数据执行复制
c. 线程组线程是等待线程队列的守护线程,当事件队列中有事件发生时,线程组守护线程就会逐步唤醒复制线程,当队列中Inotify事件较多时,复制线程就会被全部唤醒一起工作,以提升复制效率。
d. 除了线程组线程外,还有Sersync服务线程负责处理复制失败的文件,将他们再次复制,对于再次复制失败的文件记录到rsync_fail_log.sh脚本中,然后定期再执行脚本,同时利用自带的cron功能,实现每隔一定时间将所有未复制的数据再进行整体复制。
3)sersync+rsync实现实时同步备份部署
第一个里程:下载安装sersync软件
unzip sersync_installdir_64bit.zip
cd sersync_installdir_64bit
mv sersync /usr/local/
tree /usr/local/sersync
第二个里程:编写sersync配置文件
/usr/local/sersync/conf/confxml.xml ———配置文件
第三个里程:应用sersync软件,实现实时同步
修改sersync软件配置命令权限信息
通过sersync -h获取sersync软件命令的相关参数,参数说明如下
启动sersync软件服务
注:Sersync可以启动多个配置文件,实现同时监控多个目录
从Sersync启动过程可以看出Sersync+Rsync实时复制,推送的命令实质为:
cd /data && rsync -az -R --delete ./ [email protected]::backup --password-file=/etc/rsync.password >/dev/null 2>&1
4) 实现使用systemctl 命令管理Sersync
第一个里程:编写简易sersync服务启动停止脚本
vim /etc/rc.d/init.d/sersync
chmod +x /etc/rc.d/init.d/sersync
第二个里程:配置sersync.service
vim /usr/lib/systemd/system/sersync.service
chmod +x /usr/lib/systemd/system/sersync.service
第三个里程:激活开机启动并测试启动、停止管理功能
四、实时服务同步知识点总结