数据备份方案
企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案
定时任务定期备份
需要周期性备份的数据可以分两类:
- 后台程序代码、运维配置文件修改,一般会定时任务执行脚本进行文件备份,然后配置Rsync工具推送到远程服务器备份
- 对于数据库文件用定时任务脚本配合数据库提供的备份工具,定时生成备份文件,配合Rsync备份到远端
为什么要用实时同步服务
因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失
实时复制方案
实施复制是最适合企业备份重要数据的方式,用于用户提交的数据备份,对于用户提交的普通文件(jpg、tar、zip、MP4、txt、html)等待,都可以用Inofity+Rsync
实时备份方案。
对于数据文件,还有更复杂的分布式存储方案,把数据同时备份成多份,如FastDFS、GlusterFS等
对于提交到数据库中的数据,还可以用数据库的主从复制(如MySQL),这是软件自带的实时备份。
图解备份方式
rsync+crond定时备份
rsync+inotify实时同步
实时同步结合NFS
NFS+实时同步 1.解决了NFS单点故障的问题 2.备份NFS的数据,提供了数据冗余
实时同步的难点
1.什么条件下开始同步 2.同步哪些文件夹 3.多长时间同一次? 4.用什么工具同步? ????
inotify隆重出场
Inotify是一个强大的,细粒度的,异步的文件系统事件监控机制。
事件是指如文件的增删改查都是事件。
Linux2.6.13开始就引入了inotify这个功能,用于监控文件系统的增删改查等事件。
第三方软件能实现监控文件内容变化,其实是因为linux提供了这个inotify机制功能。
实施复制软件介绍
软件 | 依赖程序 | 部署难点 | 说明 |
---|---|---|---|
Inotify-tools | Rsync守护进程 | 写复制脚本 | 监控目录数据变化 |
Inotify是一种异步的系统事件监控机制,通过Inotify可以监控文件系统中添加、删除、修改等事件,利用这个内核接口,第三方软件可以监控文件系统下的情况变化。
那么Inofity-tools就是该类软件的实现,是一个监控指定目录数据实时变化的软件。
1.实时复制软件会监控磁盘文件系统的变化,比如指定的/data目录,实时复制软件进程会实时监控这个/data目录中对应文件系统数据的变化。
2.一旦/data目录文件发生变化,就会执行rsync命令,将变化的数据推送到备份服务器对应的备份目录中
Inotify+Rsync实施复制实战
Inotify-tools本身的核心功能都是监控指定目录内的数据变化
,具体的复制到远端服务器的功能还是借助Rsync工具配合,
Inotify机制软件工作流程如下
- 备份源客户端开机运行Inotify软件,检测指定目录的文件系统变化
- 一旦获取到指定监控目录的数据发生变化,即刻执行Rsync命令复制数据。
- 将变化的数据发送到Rsync服务端的备份目录。
先准备rsyncd服务环境
部署拓扑图
部署拓扑图
以rsync守护进程模式部署,且以远程数据同步方式,由client向server推送数据。
我们这里设计的形式是,数据推送
1.准备好rsync服务端,等待客户端发来同步数据。(备份服务器) 2.准备好rsync客户端,结合inotify实现文件更新,主动执行rsync命令推送(开发服务器)
Backup服务器(rsync服务端)
理解rsync部署流程
1.rsync程序安装 2.rsync配置文件修改 3.创建rsync服务特定用户 4.创建rsync数据备份的目录,对特定用户授权 5.创建rsync认证密码文件,修改密码文件权限600 6.启动rsync服务,以守护进程模式 7.设置rsync开机启动
具体部署流程就跳过了,看于超老师讲解rsync的博客篇即可。
dev服务器部署(rsync客户端)
1.确认rsync命令存在
2.创建rsync连接所需的密码文件,授权
具体部署流程就跳过了,看于超老师讲解rsync的博客篇即可。
准备部署inotify-tools软件(nfs-31机器)
内核检查
在上述,确保了,两台机器可以正确进行rsync数据同步后。
我们可以开始部署inotify了
只有Linux内核版本在2.6.13起才支持,以及是否存在三个系统文件,存在则支持
[root@nfs-31 ~]#uname -r 3.10.0-862.el7.x86_64 [root@nfs-31 ~]#ls -l /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Apr 20 20:08 max_queued_events -rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_instances -rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_watches 系统文件解释 max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程) 默认只能监控8192个文件 max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数 默认每个用户可以开启inotify服务128个进程 max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量 默认监控事件队列长度为16384
安装inotifty-tools工具
(需要配置epel源)
[root@nfs-31 ~]#yum install inotify-tools -y 检查生成的软件命令 [root@nfs-31 ~]# rpm -ql inotify-tools |head -2 /usr/bin/inotifywait /usr/bin/inotifywatch
Inotifywait详解
上述操作我们安装好了Inotify-tools软件,生成2个重要的命令
inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键 Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)
【inotifywait命令解释】
inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树; inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息 从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数: 语法格式:inotifywait [-hcmrq][-e][-t][–format][-timefmt][…] -m: 即“–monitor” 表示始终保持事件监听状态。 -d:类似于-m参数,将命令运行在后台,记录出发的事件信息,记录在指定文件里,加上--outfile参数 -r: 即“–recursive” 表示递归查询目录 -q: 即“–quiet” 表示打印出监控事件 -o: 即“–outfile” 输出事情到一个文件而不是标准输出 -s: 即“–syslog” 输入错误信息到系统日志 -e: 即“–event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等 -format: 指定输出格式;常用的格式符如: %w:表示发生事件的目录 %f:表示发生事件的文件 %e:表示发生的事件 %Xe:事件以“X”分隔 %T:使用由-timefmt定义的时间格式 -timefmt:指定时间格式,用于-format选项中的%T格式
利用Inotify软件监控的事件主要是如下,也是我们使用命令,需要指定的那些事件,指的就是你想监控文件内容变化了,还是被删了,还是正在被编辑,被修改,等情况。
Events 含义 access 文件或目录被读取 modify 文件或目录内容被修改 attrib 文件或目录属性被改变 close 文件或目录封闭,无论读/写模式 open 文件或目录被打开 moved_to 文件或目录被移动至另外一个目录 move 文件或目录被移动到另一个目录或从另一个目录移动至当前目录 create 文件或目录被创建在当前目录 delete 文件或目录被删除 umount 文件系统被卸载
关于监控事件的细节解释
可监控的事件 有几种事件能够被监控。一些事件,比如 IN_DELETE_SELF 只适用于正在被监控的项目,而另一些,比如 IN_ATTRIB 或者 IN_OPEN 则只适用于监控过的项目,或者如果该项目是目录,则可以应用到其所包含的目录或文件。 IN_ACCESS 被监控项目或者被监控目录中的条目被访问过。例如,一个打开的文件被读取。 IN_MODIFY 被监控项目或者被监控目录中的条目被修改过。例如,一个打开的文件被修改。 IN_ATTRIB 被监控项目或者被监控目录中条目的元数据被修改过。例如,时间戳或者许可被修改。 IN_CLOSE_WRITE 一个打开的,等待写入的文件或目录被关闭。 IN_CLOSE_NOWRITE 一个以只读方式打开的文件或目录被关闭。 IN_CLOSE 一个掩码,可以很便捷地对前面提到的两个关闭事件(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)进行逻辑操作。 IN_OPEN 文件或目录被打开。 IN_MOVED_FROM 被监控项目或者被监控目录中的条目被移出监控区域。该事件还包含一个 cookie 来实现 IN_MOVED_FROM 与 IN_MOVED_TO 的关联。 IN_MOVED_TO 文件或目录被移入监控区域。该事件包含一个针对 IN_MOVED_FROM 的 cookie。如果文件或目录只是被重命名,将能看到这两个事件,如果它只是被移入或移出非监控区域,将只能看到一个事件。如果移动或重命名一个被监控项目,监控将继续进行。参见下面的 IN_MOVE-SELF。 IN_MOVE 可以很便捷地对前面提到的两个移动事件(IN_MOVED_FROM | IN_MOVED_TO)进行逻辑操作的掩码。 IN_CREATE 在被监控目录中创建了子目录或文件。 IN_DELETE 被监控目录中有子目录或文件被删除。 IN_DELETE_SELF 被监控项目本身被删除。监控终止,并且将收到一个 IN_IGNORED 事件。 IN_MOVE_SELF 监控项目本身被移动。
inotifywait实践
使用参数解释
命令用法 inotifywait -mrq --timefmt "%d/%m/%y %H:%M" --format "%T %w%f" /yuchao-data -m: 即“–monitor” 表示始终保持事件监听状态。 -r: 即“–recursive” 表示递归查询目录 -q: 即“–quiet” 表示打印出监控事件 -e: 即“–event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等 --timefmt:指定时间格式 %m 月份(以01-12来表示)。 %d 日期(以01-31来表示)。 %y 年份(以00-99来表示)。 %F %w:表示发生事件的目录 %f:表示发生事件的文件 %T:使用由-timefmt定义的时间格式 %e:表示发生的事件
当我们的代码目录,有了更新,希望立即实现数据同步,即可检测create事件。
所有事件
执行命令,以及对日志进行格式化,默认检测所有事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt "%F" --format "%T %w%f 捕获到的事件是:%e" /yuchao-data
默认程序会夯住,正在监测事件中
Create、delete
inotifywait -mrq --timefmt "%d/%m/%y %H:%M" --format "%T %w%f" -e create,delete /yuchao-data
move事件
inotifywait -mrq --timefmt "%F" --format "%T %w %f 捕获到的事件是:%e" -e move /yuchao-data
可以知道,inotiify的作用是,基于不同的事件,检测文件夹中,文件的变化。
当检测到有事件发生后,证明文件变化,我们可以执行数据同步rsync操作了。
close_write事件
IN_CLOSE_WRITE 一个打开的,等待写入的文件或目录被关闭。 inotifywait -mrq --timefmt "%F" --format "%T %w %f 捕获到的事件是:%e" -e close_write /yuchao-data
inotify结合rsync实时同步
可知,这个工具的用法就是
1.inotify检测文件变化
2.执行rsync同步
那么想自动化实现的话,手工是不行了,就的结合脚本实现。
数据实时监测备份
简单看一下shell语法
1.脚本如下,这里需要跟着超哥学完shell编程之后,方可理解。 先看下shell脚本,如何检测到文件内容的变化
1.生成一个普通文本 [root@yuchao-dev01 data]# seq 10 > yuchao.txt [root@yuchao-dev01 data]# [root@yuchao-dev01 data]# cat yuchao.txt 1 2 3 4 5 6 7 8 9 10 2.来看一个简单的循环shell脚本 [root@yuchao-dev01 data]# vim about_while.sh [root@yuchao-dev01 data]# [root@yuchao-dev01 data]# cat about_while.sh cat yuchao.txt |while read line do echo 当前行内容是:$line done 3.执行脚本 [root@yuchao-dev01 data]# pwd /data [root@yuchao-dev01 data]# ls about_while.sh yuchao.txt [root@yuchao-dev01 data]# sh about_while.sh 当前行内容是:1 当前行内容是:2 当前行内容是:3 当前行内容是:4 当前行内容是:5 当前行内容是:6 当前行内容是:7 当前行内容是:8 当前行内容是:9 当前行内容是:10
改造脚本结合rsync
这个脚本作用是让shell的while循环,不断的读取,文件内容
因此也可以用来读取inotifywait检测的日志信息,一旦有新日志出现,我们就执行rsync同步,实现(文件内容检测+rsync同步)
改造脚本,脚本需求是
1.开发机器上的代码目录,一旦有代码更新,执行rsync,将代码文件发给备份服务器
[root@yuchao-dev01 data]# cat about_inotify.sh #!/bin/bash path=/yuchao-data backup_server=172.16.1.41 export RSYNC_PASSWORD=chaoge666 /usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /yuchao-data | while read line do echo ${line} rsync -az --delete /yuchao-data/ rsync_backup@${backup_server}::data done 参数解释 # 参数解释 -m 保持监控状态 -r 递归监控 -q 只打印事件 -e 指定事件 事件: move 移动 delete 删除 create 创建 modify 修改 attrib 属性信息 添加权限,执行脚本 [root@nfs-31 ~]#./test_inotify.sh
测试脚本结果
1.写入数据;2.查看rsync是否有数据同步 ;3.删除事件也支持
总结inotify
优点: 1.linux内核本身支持inotify机制 2.用于监控文件系统事件变化的神器 缺点: 1.如果并发修改的文件超过200个,同步会延迟,以及会丢掉部分文件,这是inotifywait软件的bug,官网有说明。 2.该脚本监控到事件后,调用rsync是单进程执行,一次cpu只会同步一次rsync命令,效率很低,大数据量下没法使用。 3.自己写的脚本,其实问题还是很多的,简单场景没问题,高并发,复杂场景下,要求多的情况下,那就有点羞涩了。 4.其实已经有了更牛b的程序员,开发了第三方工具,强化了inotify的作用,再结合rsync实现实时同步。
基于sersync工具同步(了解)
https://code.google.com/archive/p/sersync/ 关于软件的下载地址,以及项目介绍,作者介绍。
提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。
针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案。
sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
Sersync项目利用Inotify和Rsync工具技术实现对服务器数据实时复制。
当事件发生变化后,利用rsync命令把变化的数据复制到远端服务器上。
Sersync特点
- 使用C++编写,支持对监控事件的过滤
- Sersync采用xml配置文件,由守护进程启动,配置起来比起简易的
inotify+rsync更简单
- 使用多线程复制,可以并发复制多个不同文件,效率更高
- Sersync自带异常检测机制,可以通过
失败队列
对出错的文件重新复制 - 自带crontab功能,实现对
失败队列
中的文件定时整体复制 - 自带socket和HTTP协议扩展,定制特殊需求,二次开发
机器准备
nfs-31 172.16.1.31 rsync+intofiy+sersync rsync-41 172.16.1.41 rsyncd服务
安装sersync程序
1.下载 cd /opt && wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz 2.解压缩 [root@nfs-31 /opt]#ls GNU-Linux-x86 sersync2.5.4_64bit_binary_stable_final.tar.gz 3.重命名,查看配置文件 [root@nfs-31 /opt]#mv GNU-Linux-x86 sersync-2-5-4 [root@nfs-31 /opt]#cd sersync-2-5-4/ [root@nfs-31 /opt/sersync-2-5-4]#cp confxml.xml confxml.xml.bak 4.该软件就俩文件,一个二进制,一个配置文件 [root@nfs-31 /opt/sersync-2-5-4]#ls confxml.xml confxml.xml.bak sersync2 [root@nfs-31 /opt/sersync-2-5-4]#file sersync2 sersync2: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, BuildID[sha1]=c41f3d73f3d4fe1d6931d93a4e64fe805769b28f, stripped [root@nfs-31 /opt/sersync-2-5-4]# [root@nfs-31 /opt/sersync-2-5-4]#file confxml.xml confxml.xml: XML 1.0 document, ASCII text
配置文件修改
其中confxml.xml是配置文件,文件内容很容易理解。以下是示例文件内容说明。
注意,确保你的rsync服务正常,以你的rsyncd服务端的配置信息填写
23 <sersync> 24 <localpath watch="/data"> 25 <remote ip="172.16.1.41" name="data"/> # rsyncd服务器地址以及模块名 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"/> # rsync参数 31 <auth start="true" users="rsync_backup" # rsync认证用户 passwordfile="/etc/rsync.passwd"/>
命令解释
[root@nfs-31 /opt/sersync-2-5-4]#./sersync2 -h 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命令推送一遍 c参数-n: 指定开启守护线程的数量,默认为10个 参数-o:指定配置文件,默认使用confxml.xml文件 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块 参数-m:单独启用其他模块,使用 -m socket 开启socket模块 参数-m:单独启用其他模块,使用 -m http 开启http模块 不加-m参数,则默认执行同步程序 ________________________________________________________________ [root@nfs-31 /opt/sersync-2-5-4]#
启动sersync程序
[root@nfs-31 /opt/sersync-2-5-4]#./sersync2 -rdo confxml.xml
检查数据是否同步
rsync服务端
[root@rsync-41 ~]#cd /data [root@rsync-41 /data]#ls [root@rsync-41 /data]#while true;do ls ;sleep 0.1;done
nfs-31 客户端
分析工具启动日志
分析,是为了更好的排错
总结sersync
1.金山软件、花椒直播的技术总监开发而来,开源免费 2.缺点,缺少了后期的维护,性能存在问题,小规模生产环境已经可以直接使用了
lsyncd工具(推荐使用)
https://github.com/lsyncd/lsyncd Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。 我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。 另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。 lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。 实现简单高效的本地目录同步备份(网络存储挂载也当作本地目录),一个命令搞定。
lsyncd安装
[root@nfs-31 /data]#yum install lsyncd -y
修改配置文件
只监控一个目录
[root@nfs-31 /data]#cat /etc/lsyncd.conf settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } sync { default.rsync, source = "/data", target = "rsync_backup@172.16.1.41::data", delete= true, exclude = {".*"}, delay=1, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, password_file="/etc/rsync.passwd", _extra={"--bwlimit=200"} } }
监控2个目录
[root@nfs-31 /data]#cat /etc/lsyncd.conf settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } sync { default.rsync, source = "/data", target = "rsync_backup@172.16.1.41::data", delete= true, exclude = {".*"}, delay=1, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, password_file="/etc/rsync.passwd", _extra={"--bwlimit=200"} } } sync { default.rsync, source = "/backup", target = "rsync_backup@172.16.1.41::backup", delete= true, exclude = {".*"}, delay=1, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, password_file="/etc/rsync.passwd", _extra={"--bwlimit=200"} } }
配置文件详解
syncd.conf配置选项说明 settings 里面是全局设置,--开头表示注释,下面是几个常用选项说明: logfile 定义日志文件 stausFile 定义状态文件 nodaemon=true 表示不启用守护模式,默认 statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒 inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程 maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到 sync 里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式: default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程; default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份; default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证 source 同步的源目录,使用绝对路径。 target 定义目的地址.对应不同的模式有几种写法: /tmp/dest :本地目录同步,可用于direct和rsync模式 172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接的命令类似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密码同步 172.29.88.223::module :同步到远程服务器目录,用于rsync模式 三种模式的示例会在后面给出。 init 这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件) excludeFrom 排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。 这里的排除规则写法与原生rsync有点不同,更为简单: 监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo 如果规则以斜线/开头,则从头开始要匹配全部 如果规则以/结尾,则要匹配监控路径的末尾 ?匹配任何字符,但不包括/ *匹配0或多个字符,但不包括/ **匹配0或多个字符,可以是/ delete 为了保持target与souce完全同步,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。 rsync (提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销) bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出) compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false perms 默认保留文件权限。 其它rsync的选项 其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。 lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。
启动lsyncd服务
systemctl start lsyncd
测试数据写入
Nfs-31
[root@nfs-31 /data]#for i in {1..100};do echo ${i};echo ${i} > ${i}.log;sleep 0.1;done
rsync-41
[root@rsync-41 /data]#for i in {1..100};do ls;sleep 0.1;done
实时同步方案总结
- inotify+rsync,可以用于小数据量的实时备份,需要自己编写脚本,问题较多;
- sersync工具还不错,可以用于小规模的生产环境;
- 目前最好用的是lsyncd工具,支持很多高级功能(要求需要学习lua脚本语言方可掌握),适用于生产环境的复杂运维数据同步业务。