RSYNC+inotify实时同步文件

Inotify简介
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
Inotify,它是在内核 2.6.13 版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
在inotify 的前身是 dnotify。由于 dnotify 的局限性太大,加之用户始终都希望用到更好的产品。因此,inotify 顺理成章的取代了 dnotify。
Rsync安装完毕后,需要安装inotify文件检查软件。同时为了同步的时候不需要输入密码,这样可以使用ssh免密钥方式进行同步。

Rsync认证方式
两种方式
rsync-daemon
ssh
注意:在使用rsync时,同步端和被同步端都必须安装rsync程序。

1)rsync-daemon认证
在rsync-daemon认证方式下,默认监听tcp的873端口
在rsync-daemon认证下,rsync可以把密码写入到一个文件中。
注意:被同步端的rsync必须启动,配置文件。同步端可以不起动服务,但必须有这个应用。

2)ssh认证
通过ssh隧道进行传输,类似于scp工具,同步操作不在局限于rsync中定义的同步文件夹,并且双方只要安装rsync,也不要双方启动rsync。
Rsync安装配置参考我另一篇文章:https://blog.csdn.net/tangbin0505/article/details/101451856
这里采用Rsync基于SSH认证方式+inotify实时同步

服务端IP:192.168.42.8

客户端IP:192.168.42.9

inotify安装配置

1)下载配置环境,下载inotify-tools安装包

[root@rsync-servser ~]# yum install wget -y

[root@rsync-servser ~]# yum install gcc

[root@rsync-servser ~]# wget -c http://mirrors.yangxingzhen.com/inotify-tools/inotify-tools-3.14.tar.gz

2)解压,安装

[root@rsync-servser ~]# tar -zxf inotify-tools-3.14.tar.gz 
[root@rsync-servser ~]# cd inotify-tools-3.14

[root@rsync-servser inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify

RSYNC+inotify实时同步文件_第1张图片

[root@rsync-servser inotify-tools-3.14]# make && make install
RSYNC+inotify实时同步文件_第2张图片

3)配置免密钥认证,这里不再介绍,SSH免密钥认证可以参考我另一篇文章:SSH免密钥认证

4)编写脚本

[root@rsync-servser ~]# vim rsync_inotify.sh

#!/bin/sh
#add for chkconfig
#chkconfig: 2345 70 30
#description: the description of the shell   #关于脚本的简短描述
#processname: rsync_inotify_gitlab_backup    #第一个进程名,后边设置自启动的时候会用到
#2019-09-27
#本地需要同步的目录
SRC=/test/
##远程目录
DATA=/test/
##远程同步IP
IP=192.168.42.9
inotifywait -mrq --timefmt '%Y-%m-%d-%H:%M' --format '%T %w %f' -e modify,delete,create,attrib,move $SRC | while read file
do
rsync -aP --delete $SRC root@$IP:$DATA
#若ssh端口非默认22端口,用以下命令
# rsync -aP "-e ssh -p 23" --delete $SRC root@$IP:$DATA
done

:wq保存退出。

5)在服务端启动该脚本,创建测试文件

[root@rsync-servser ~]# ln -s /usr/local/inotify/bin/* /usr/sbin
[root@rsync-servser ~]# mkdir /test
[root@rsync-servser ~]# sh -x rsync_inotify.sh 

用Xshell 再打开一个服务器连接(本机为192.168.42.8)

[root@rsync-servser test]# touch test2.txt

RSYNC+inotify实时同步文件_第3张图片

观看

RSYNC+inotify实时同步文件_第4张图片


6)在客户端查看是否同步,如有数据代表同步

RSYNC+inotify实时同步文件_第5张图片
#实时同步成功~~~

PS:创建文件、删除文件、移动文件(重命名)、访问文件、修改文件都会被记录

7)后台运行此脚本

[root@localhost ~]# nohup sh rsync_inotify.sh &

注:日志会记录到nohup.out文件

8)开机自启动

cp rsync_inotify_gitlab_backup.sh /etc/rc.d/init.d

chmod +x rsync_inotify_gitlab_backup.sh

chkconfig --add rsync_inotify_gitlab_backup.sh

chkconfig rsync_inotify_gitlab_backup on

sh rsync_inotify_gitlab_backup.sh &

 

开始之前需要检测系统内核是否支持inotify:

使用uname -r命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。
inotify相关参数

inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小:

1) /proc/sys/fs/inotify/max_queued_evnets表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

2)/proc/sys/fs/inotify/max_user_instances表示每一个real user id可创建的inotify instatnces的数量上限。

3)/proc/sys/fs/inotify/max_user_watches表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

inotifywait命令参数

-m是要持续监视变化。

-r使用递归形式监视目录。

-q减少冗余信息,只打印出需要的信息。

-e指定要监视的事件列表。

--timefmt是指定时间的输出格式。

--format指定文件变化的详细信息。

可监听的事件
access    访问,读取文件。
modify    修改,文件内容被修改。
attirb    属性,文件元数据被修改。
move    移动,对文件进行移动操作。
create    创建,生成新文件
open    打开,对文件进行打开操作。
close    关闭,对文件进行关闭操作。
delete    删除,文件被删除。

你可能感兴趣的:(同步软件)