rsync+inotify实时同步案例推荐

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

1.1 inotify介绍2.1 rsync+inotify同步逻辑图3.1 环境部署4.1 inotify-slave部署4.1.1检查是否安装rsync4.1.2 新建rsync用户及模块目录并更改其用户组4.1.3 编写rsync daemon配置文件/etc/rsyncd.conf4.1.4 配置虚拟用户的密码文件4.1.5 启动rsync 服务4.1.6 通过inotify-master测试推送5.1 inotify-master部署5.1.1 查看当前系统是否支持inotify5.1.2 inotify安装5.1.3 inotify之inotifywait命令常用参数详解5.1.4 编写监控脚本并加载到后台执行5.1.5 实时同步测试

1.1 inotify介绍inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。

2.1基本架构

3.1 基本环境部署(这里为了避免不兼容的情况出现,采用统一版本的系统)主机名IP地址系统版本内核版本inotify master192.168.42.116centos 6.82.6.32-642.el6.x86_64inotify slave192.168.42.112centos 6.82.6.32-642.el6.x86_644.1 inotify-slave部署这里就是部署rsync服务,rsync daemon工作模式。4.1.1检查是否安装rsync

rpm-qarsync

结果

4.1.2 新建rsync用户及模块目录并更改其用户组

useraddrsync-s/sbin/nologin-Mmkdir/backup#创建rsyncdaemon工作模式的模块目录chownrsync.rsync/backup/#更改模块目录的用户组ll-d/backup/

4.1.3 编写rsync daemon配置文件/etc/rsyncd.conf

##rsyncd.confstart###工作中指定用户(需要指定用户)uid=rsyncgid=rsync#相当于黑洞.出错定位usechroot=no#有多少个客户端同时传文件maxconnections=200#超时时间timeout=300#进程号文件pidfile=/var/run/rsyncd.pidlockfile=/var/run/rsync.lock#日志文件logfile=/var/log/rsyncd.log#模块开始#这个模块对应的是推送目录#模块名称随便起[backup]#需要同步的目录path=/backup/#表示出现错误忽略错误ignoreerrors#表示网络权限可写(本地控制真正可写)readonly=false#这里设置IP或让不让同步list=false#指定允许的网段hostsallow=192.168.42.0/24#拒绝链接的地址,一下表示没有拒绝的链接。hostsdeny=0.0.0.0/32#不要动的东西(默认情况)#虚拟用户authusers=root#虚拟用户的密码文件secretsfile=/etc/rsync.password#配置文件的结尾#rsync_config_______________end

4.1.4 配置客户端及虚拟inotify-backup用户的密码文件

echo"root:123456" /etc/rsync.password#注:这里是客户端,密码文件得写全,root为rsync同步使用的用户,123456为这个虚拟用户的密码chmod600/etc/rsync.password#为密码文件提权,增加安全性

4.1.5 启动rsync 服务

rsync--daemon#启动rsync服务ps-ef|greprsyncroot23891010:15?00:00:00rsync--daemonroot23922305010:15pts/000:00:00greprsyncss-tunltcpLISTEN05:::873:::*tcpLISTEN05*:873*:*

4.1.6 通过inotify-master测试推送 inotify-master配置密码文件,测试推送

echo"123456" /etc/rsync.password#注意:服务器端只要写密码即可,切记。chmod600/etc/rsync.passwordecho"hellosjf" test.txtrsync-avztest.txtroot@192.168.42.116::backup--password-file=/etc/rsync.passwordsendingincrementalfilelisttest.txtsent79bytesreceived27bytes42.40bytes/sectotalsizeis10speedupis0.09inotify-slave检查:ll/backup/total4-rw-r--r--1rsyncrsync10Oct2910:20test.txtcat/backup/test.txthellosjf

5.1 inotify-master部署注:inotify是rsync客户端安装和执行的企业场景压力测试200-300个同步限制,受网卡,磁盘,带宽等的制约。5.1.1 查看当前系统是否支持inotify

ll/proc/sys/fs/inotify/total0-rw-r--r--1rootroot0Oct2910:43max_queued_events-rw-r--r--1rootroot0Oct2910:43max_user_instances-rw-r--r--1rootroot0Oct2910:43max_user_watches#显示这三个文件则证明支持。番外:/proc/sys/fs/inotify/max_queued_evnets表示调用inotify_init时分配给inotifyinstance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。/proc/sys/fs/inotify/max_user_instances表示每一个realuserID可创建的inotifyinstatnces的数量上限。/proc/sys/fs/inotify/max_user_watches表示每个inotifyinstatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。例如:echo30000000 /proc/sys/fs/inotify/max_user_watches

5.1.2 inotify的安装

inotify可以编译安装也可以直接yum安装我这里采用的是yum安装的方式yum-yinstallinotify-tools当然我这里也给出编译安装的方法wgethttp://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gztarzxfinotify-tools-3.14.tar.gzcdinotify-tools-3.14./configure--prefix=/usr/local/inotify-3.14#配置inotify,并指定安装路径为/usr/local/inotify-3.14make makeinstall注意这里安装完成后记得将命令所在路径引入环境变量

5.1.3 inotify之inotifywait命令常用参数详解

inotifywait--help-r|--recursiveWatchdirectoriesrecursively.#递归查询目录-q|--quietPrintless(onlyprintevents).#打印监控事件的信息-m|--monitorKeeplisteningforeventsforever.Withoutthisoption,inotifywaitwillexitafteroneeventisreceived.#始终保持事件监听状态--excludei pattern Like--excludebutcaseinsensitive.#排除文件或目录时,不区分大小写。--timefmt fmt strftime-compatibleformatstringforusewith%Tin--formatstring.#指定时间输出的格式--format fmt Printusingaspecifiedprintf-likeformatstring;readthemanpageformoredetails.#打印使用指定的输出类似格式字符串-e|--event event1 [-e|--event event2 ...]Listenforspecificevent(s).Ifomitted,alleventsarelistenedfor.#通过此参数可以指定需要监控的事件如下所示:Events:accessfileordirectorycontentswereread#文件或目录被读取。modifyfileordirectorycontentswerewritten#文件或目录内容被修改。attribfileordirectoryattributeschanged#文件或目录属性被改变。closefileordirectoryclosed,regardlessofread/writemode#文件或目录封闭,无论读/写模式。openfileordirectoryopened#文件或目录被打开。moved_tofileordirectorymovedtowatcheddirectory#文件或目录被移动至另外一个目录。movefileordirectorymovedtoorfromwatcheddirectory#文件或目录被移动另一个目录或从另一个目录移动至当前目录。createfileordirectorycreatedwithinwatcheddirectory#文件或目录被创建在当前目录deletefileordirectorydeletedwithinwatcheddirectory#文件或目录被删除unmountfilesystemcontainingfileordirectoryunmounted#文件系统被卸载

5.1.4 编写监控脚本并加载到后台执行

#!/bin/bash#sjfhost01=192.168.42.116#inotify-slave的ip地址src=/backup/#本地监控的目录dst=backup#inotify-slave的rsync服务的模块名user=rsync_backup#inotify-slave的rsync服务的虚拟用户rsync_passfile=/etc/rsync.password#本地调用rsync服务的密码文件#inotify_home=/usr/share/doc/inotify-3.14#inotify的安装目录inotify_home=/usr#这个是yum安装的软件的安装所在目录#judgeif[-z"$src"]\||[-z"${rsync_passfile}"]\||[-z"${inotify_home}/bin/inotifywait"]\||[-z"/usr/bin/rsync"];thenecho"CheckFileandFolder"exit9${inotify_home}/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-eclose_write,delete,create,attrib$src\|whilereadfiledo#rsync-avzP--delete--timeout=100--password-file=${rsync_passfile}$src$user@$host01::$dst /dev/null2 1cd$src rsync-aruz-R--delete./--timeout=100$user@$host01::$dst--password-file=${rsync_passfile} /dev/null2 1doneexit0先知三日,富贵十年。

rsync+inotify实时同步案例推荐

相关文章:

你感兴趣的文章:

标签云: