首页 > 网络 > 其他 >

rsync+inotify实现数据的实时同步

2019-01-29

rsync+inotify实现数据的实时同步。 rsync数据同步优缺点与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁

rsync数据同步优缺点

与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。

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

inotify

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

图片.png

一、环境准备

IP地址:
inotify_rsync_client:192.168.1.103
rsync_server:192.168.1.189

操作系统:
centos6.964位

二、rsync部署(每步说明了在那里配置)

1、关闭SELINUX(inotify_rsync_client、rsync_server均配置)
vi/etc/selinux/config
修改下面一行代码:
SELINUX=disabled
运行此命令立即生效。
setenforce0


2、开启防火墙tcp873端口、或关掉防火墙(inotify_rsync_client、rsync_server均配置)
vi/etc/sysconfig/iptables
-AINPUT-mstate--stateNEW-mtcp-ptcp--dport873-jACCEPT
或者关闭防火墙
serviceiptablesstop
chkconfigiptablesoff


3、安装rsync服务端软件(inotify_rsync_client配置)
yuminstallrsyncxinetd
vi/etc/xinetd.d/rsync
修改disable的值为no:
disable=no
启动xinetd(CentOS中是以xinetd来管理Rsync服务的)
/etc/init.d/xinetdstart
chkconfigxinetdon


4、安装xinetd(rsync_server配置)
yuminstallrsyncxinetd
vi/etc/xinetd.d/rsync
修改disable的值为no:
disable=no
启动xinetd(CentOS中是以xinetd来管理Rsync服务的)
/etc/init.d/xinetdstart
chkconfigxinetdon
rsync--daemon--config=/etc/rsyncd.conf
echo"rsync--daemon--config=/etc/rsyncd.conf">>/etc/rc.local


5、创建rsyncd.conf配置文件(rsync_server配置。假如需要同步多个目录,注意加多个目录;此root是rsync的认证账号,后面步骤会配置认证账号和密码)
创建配置文件:
vi/etc/rsyncd.conf
logfile=/var/log/rsyncd.log
pidfile=/var/run/rsyncd.pid
lockfile=/var/run/rsync.lock
secretsfile=/etc/rsyncd.secret
motdfile=/etc/rsyncd.motd
[test]
path=/home/xyz/
comment=test
uid=root
gid=root
incomingchmod=Du=rwx,Dog=rx,Fu=rwx,Fgo=rx
port=873
usechroot=no
readonly=no
list=no
maxconnections=200
timeout=600
authusers=root
hostsallow=192.168.1.103
hostsdeny=*
目录权限(如果uid和gid都是root,这里不用操作):
cd/home
chown-hRroot.rootxyz/#如果xyz目录是在root下新建的,默认就是root权限。


6.创建用户认证文件(rsync_server)
配置文件
vi/etc/rsyncd.passwd
root:123456
保存退出


7.设置文件权限(rsync_server)
设置文件所有者读取、写入权限
chmod600/etc/rsyncd.conf
chmod600/etc/rsyncd.passwd


8.启动rsync(rsync_server)
/etc/init.d/xinetdstart
参考指令
停止:servicexinetdstop
启动:servicexinetdrestart


9、创建用户认证文件(inotify_rsync_client配置)
配置文件
vi/etc/rsyncd.passwd
123456
保存退出
chmod600/etc/rsyncd.passwd


10、从inotify_rsync_client手动rsync同步到rsync_server看下,只有成功后(查看日志),下面inotify才会成功。(inotify_rsync_client上运行此命令测试)
rsync-avzrtopgL--progress/root/root@192.168.1.189::test/--password-file=/etc/rsyncd.passwd

三、sersync部署(inotify_rsync_client配置)

1、查看服务器内核是否支持inotify
列出文件目录
ll/proc/sys/fs/inotify
出现下面的内容、说明服务器内核支持inotify
-rw-r--r--1rootroot0Dec2512:03max_queued_events
-rw-r--r--1rootroot0Dec2515:05max_user_instances
-rw-r--r--1rootroot0Dec2512:03max_user_watches
备注:centos6.9默认支持inotify


2.修改inotify默认参数(inotify默认内核参数值太小)
sysctl-a|grepmax_queued_events
sysctl-a|grepmax_user_watches
sysctl-a|grepmax_user_instances
修改参数
sysctl-wfs.inotify.max_queued_events="99999999"
sysctl-wfs.inotify.max_user_watches="99999999"
sysctl-wfs.inotify.max_user_instances="65535"
生效
sysctl-p
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现”EventQueueOverflow“错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find/var/www/synctest-typed|wc-l统计,必须保证max_user_watches值大于统计结果(这里/var/www/synctest为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值


3、最好更改最大连接数、最大文件描述符。
vi/etc/pam.d/login
sessionrequired/lib64/security/pam_limits.so
vi/etc/security/limits.conf
*softnproc65535
*hardnproc65535
*softnofile65535
*hardnofile65535
重启服务器


4、安装编译工具和inotify-tools
[root@Monitornginx]#yuminstallmakegccgcc-c++
[root@Monitornginx]#wgethttp://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@Monitornginx]#tarxfinotify-tools-3.14.tar.gz
[root@Monitornginx]#cdinotify-tools-3.14
[root@Monitorinotify-tools-3.14]#./configure--prefix=/usr/local/inotify
[root@Monitorinotify-tools-3.14]#make
[root@Monitorinotify-tools-3.14]#make&&makeinstall


5、命令和手动测试
一共安装了2个工具(命令),即inotifywait和inotifywatch
inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。
inotifywatch:收集被监视的文件系统使用度统计数据,指定文件系统事件发生的次数统计。
1)inotify命令常用参数详解
[root@nfs-serverinotify-tools]#./bin/inotifywait--help

2)测试监控事件create:
[root@nfs-serverinotify-tools]#/usr/local/inotify-tools/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-ecreate/data##实行当前命令后,界面处于阻塞状态,只有在另外一个客户端测试时,才会显示监控状态
31/01/1610:23/data/ceshi.txt
31/01/1610:24/data/what
31/01/1610:27/data/a
31/01/1610:27/data/b
31/01/1610:27/data/c
31/01/1610:27/data/d
31/01/1610:27/data/e
31/01/1610:27/data/f
克隆一个NFS客户端切换到/data目录下,新建ceshi.txt、what文件,观察监控的变化
[root@nfs-serverdata]#touchceshi.txt
[root@nfs-serverdata]#mkdir/who
[root@nfs-serverdata]#touchwhat
[root@nfs-serverdata]#
[root@nfs-serverdata]#touch{a..f}

3)测试监控事件delete:
[root@nfs-serverinotify-tools]#/usr/local/inotify-tools/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-edelete/data##监控/data目录删除时间
监控如下:
31/01/1610:31/data/reew.txt
31/01/1610:31/data/test1.txt
[root@nfs-serverdata]#rm-freew.txttest1.txt##删除这两个文件
[root@nfs-serverdata]#

4)测试监控事件create、delete:
[root@nfs-serverinotify-tools]#/usr/local/inotify-tools/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-edelete,create/data
监控输出信息:
31/01/1610:35/data/hero.sh
31/01/1610:35/data/a
31/01/1610:35/data/f
31/01/1610:36/data/b
31/01/1610:36/data/c
31/01/1610:36/data/d
31/01/1610:36/data/e
[root@nfs-serverdata]#touchhero.sh
[root@nfs-serverdata]#ll
[root@nfs-serverdata]#rm-f[a..f]
[root@nfs-serverdata]#rm-f{a..f}
[root@nfs-serverdata]#
一般工作中使用到:
[root@nfs-serverinotify-tools]#/usr/local/inotify-tools/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-edelete,create,close_write/data


6、工作环境中通过脚本实时同步
#!/bin/bash
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify-mrq--timefmt'%d/%m/%y%H:%M'--format'%T%w%f'-edelete,create,close_write/data|whilereadfile
do
cd/&&
rsync-az/data--deleteroot@192.168.1.189::test--password-file=/etc/rsync.password
done
chmod+xinotify.sh
sh-xinotify.sh


7、同步文件测试


8、后台运行脚本或者设置定时任务
相关文章
最新文章
热点推荐