使用rsync+iNotify完成数据定时备份一、概念介绍inotify是一个强大的、细粒度的、异步的文件系统事件控制机制。Linux内核从2.6.13开始增加了对inotify的支持。通过inotify可以监控文件系统的增删改查移动等事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化,inotify-tools就是实现监控的软件.2.功能分析(1).角色分配表生产服务器主机A地址:172.19.255.20系统:centos7.2安装工具:rsync、inotify-tools备份服务器主机B地址:172.19.255.19系统:centos7.2安装工具:rsync像这样解释:谁是主动的是客户端,被动的是服务器如果我们需要实时备份数据;让inotify监控文件系统的各种变化;当文件有变化时,触发rsync同步,则源服务器活跃,则为客户端;备份服务器是被动方,所以它是服务器。三、备份服务器的配置操作如果你有足够的权限也是可以的,谢谢...1、在备份服务器上安装rsync:目前的Linux系统大概已经默认安装了rsync,可以运行命令rpm-aqrsync或rsync-v查看,出现以下信息说明已经安装如果rsync默认没有安装,建议执行以下命令yuminstallrsync2,并创建rsync配置文件。以我为例,因为系统centos7默认安装了rsync。为了方便操作,我直接编辑/etc/rsyncd.conf末尾的配置文件vim/etc/rsyncd.conflogfile=/var/log/rsyncd.log#设置日志文件路径pidfile=/var/run/rsyncd.pid#设置pid进程位置lockfile=/var/run/rsync.lock#lock文件存放位置[inotify] #定义一个模块path=/home/workdata-prd#要同步到的位置目录uid=root#rsync用户gid=root#运行rsync的用户组ignore=errors#忽略一些非严重错误readonly=no#no表示允许读写,yes表示客户端只能读,writeonly=no#no表示允许客户端下载文件,如果设置yes则不能下载hostallow=172.19.255.20#允许连接的主机,'*'表示允许任何主机连接,或者定义一个网段maxconnections=5#设置最大连接数允许连接到主机hostdeny=192.168。22.21#禁止连接serverlist=false#禁止显示列表moduleauthusers=inotify#连接本模块的用户,多个用户用空格或逗号分隔secretsfile=/etc/rsync.d/server.pass#创建并指定包含“用户名:密码”格式的文件。username是authusers定义的用户。该用户与linux系统用户无关。文件名和位置可以自定义。3、添加备份用户的用户密码文件,修改文件权限echo'inotify:inotify123'>/etc/rsync.d/server.passchmod600/etc/rsync.d/server.pass4,Startrsync#Startbecause我直接使用默认的配置文件位置,所以不需要指定配置文件位置rsync--daemon#查询是否启动成功ps-ef|greprsyncroot23561017:29?00:00:00rsync--daemon--config=/etc/rsync.d/rsyncd.confroot23611965017:29pts/100:00:00grep--color=autorsync5.如何重启rsync修改文件后killallrsyncrsync--daemonlsof-i:873#可以查看是否启动了“server”,既有用户名也有密码4.生产服务器配置操作1)安装rsync,只需要安装不启动2)创建访问服务器密码代码认证文件echo"inotify123">/etc/rsync.d/inotify.pass#设置密码文件权限为只读chmod600etc/rsync.d/inotify.pass3),installinotify-toolsyuminstallinotify-tools-yinotify-related系统参数inotify定义了一些系统参数来限制inotify消耗的内存大小。参数设置文件在/proc/sys/fs/inotify下。max_queued_events的值:表示调用inotify_init时分配给实例的实例中可以排队的最大事件数。超过该值的事件被丢弃max_user_instances值:表示每个真实用户ID可以创建的inotify实例数的上限max_user_watches值:表示每个inotify实例最多可以监控的目录数4)、编写inotify监听脚本cd/homemkdirdatabackshcddatabackshtouchbackdata.shvimbackdata.sh#/bin/bash######backupdir=/home/workdata-prdsrcdir=/home/workdata-prdbakmod=inotify#备份用户不是真正的系统用户user=inotifyhost1=172.19。255.19/usr/bin/inotifywait-mrq--timefmt'%F%T'--format'%T%w%f%e'-e修改、创建、属性$srcdir|在读取文件时执行/usr/bin/rsync-vzrtopg--progress$srcdir$user@$host1::$bakmod--password-file=/etc/rsync.d/feng.pass>>/tmp/rsync.log2>&1echo"${files}已同步&quo吨;>>/var/log/rsync.log2>&1done脚本内容参数的简单理解:backupdir=/home/workdata-prd:远程服务器存放备份文件的目录srcdir=/home/workdata-prd:local要备份的数据目录bakmod=inotify:远程服务器定义的rsyncd.conf中的模块名user=inotify:执行备份的用户,即rsyncd.conf中“authusers”指定的用户host1=172.19.255.19:备份Host地址这个脚本的作用是用inotify监听文件目录的变化,然后触发rsync进行同步操作。服务器还需要保留,所以我去掉了inotifywait中的delete监控和rsync5)中--delete的对比,给脚本执行权限chmod755/home/databacksh/backdata.sh6),执行监控脚本后台nohupshbackdata.sh&五.常见问题1.防火墙相关rsync-arzvtopg--deletefeng@192.168.214.190::bak/opt/app/--password-file=/etc/rsync.d/feng.passrsync:无法连接到192.168.214.190:没有到主机(113)的路由firewall并开启端口,不建议直接关闭Firewall,毕竟我们的数据备份是为了数据安全,不能忽视其他。firewall-cmd--add-port=873/tcp--permanentfirewall-cmd--reload2.用户认证相关错误:authfailedonmodulebackupModulebackupverificationfailed[root@web01~]#rsync-avzrsync_bac@172.16.1.41::backup./--password-file=/etc/rsyncd.passwd@ERROR:authfailedonmodulebackuprsyncerror:errorstartingclient-serverprotocol(code5)atmain.c(1649)[Receiver=3.1.2]解决方法:用户名是否写对1.查看备份服务器中rsyncd.conf中auth_users的用户名是否与server.pass中的用户名匹配2.查看密码文件中的生产服务器检查密码是否与备份服务器中定义的密码匹配,并检查rsync同步命令中指定的用户名是否与定义的用户名匹配。watch/mnt/;达到了inotifywatches的上限!请通过“/proc/sys/fs/inotify/max_user_watches”增加每个用户允许的inotify手表数量。cat这个文件,默认值为8192,echo8192000>/proc/sys/fs/inotify/max_user_watches就够了~
