【实时文件同步】rsync+inotify-tools的安装与配置

先来说一下本次采用rsync与inotify-tools进行实时文件同步的环境。

第一,我们有2台服务器,192.168.1.100、192.168.0.200。
第二,在100的服务器上部署了一个管理系统,系统中的图片上传都是上传到本机的/opt/filestore/upload/目录里。
第三,在200的服务器上我们部署了一个手机系统,用户上传的图片都是上传都本机的/opt/mobile/upload/目录里。
第四,我们图片在数据库存的都是/upload/图片名称.jpg,访问写的都是http://192.168.0.100/upload/图片名称.jpg

那么问题来了,用户上传到200的图片是无法访问的,所以我们需要把用户上传到200服务器上的照片,实时同步到100服务器去。

rsync介绍

rsync [remote synchronize] 是类unix系统下的数据镜像备份工具–remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。

rsync安装

因为是把200的文件同步到100,所以我们认定200为客户端,100为服务端,我们需要先安装服务端。
步骤1,安装
- 1、解压
tar -xzvf rsync-3.1.2.tar.gz
- 2、进入解压目录
cd rsync-3.1.2
- 3、设置安装目录
./configure –prefix=/opt/rsync
- 4、编译
make
- 5、安装
make install

步骤2,添加rsync账户
语法:用户名:密码

# vi /opt/rsync/rsyncd.scrt
请在文件里写入以下内容
# tongbu:123456
保存,退出
需要对密码文件进行权限设置
# chmod 600 /opt/rsync/rsyncd.scrt

步骤3,添加配置文件rsyncd.conf

port = 873
log file = /opt/rsync/logs/rsyncd.log
[filestore]
uid = root
gid = root
max connections = 5
path = /opt/filestore/upload
ignore errors
read only = no
write only = no
hosts allow = *
auth users = tongbu
secrets file = /opt/rsync/rsyncd.scrt

步骤4,启动服务

让服务在后台运行加上–daemon参数
# rsync –daemon –config=/opt/rsync/rsyncd.conf
查看运行状态
# netstat -anp|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 9506/rsync
unix 2 [ ] DGRAM 3347684 9506/rsync

截止目前rsync服务端安装完毕。

下面请自行安装客户端
说明:客户端安装至需要执行“步骤1”即可。

inotify-tools介绍

inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。

inotify-tools 命令:

命令 作用
inotifywait 用来监控文件或目录的变化
inotifywatch 用来统计文件系统访问的次数

inotify安装

步骤1,安装

1、解压
tar -xzvf inotify-tools-3.14.tar.gz
2、进入解压目录
cd inotify-tools-3.14
3、设置安装目录
./configure –prefix=/opt/inotify
4、编译
make
5、安装
make install

步骤2,添加密码文件
这里的密码文件只需要填写密码即可,面膜是在服务端里创建的。

# vi /opt/rsync/rsyncd.scrt
请添加以下内容
123456
保存,退出

步骤3,编写shell命令

# vi /opt/inotify/inotify_monitor.sh
#!/bin/sh
/opt/inotify/bin/inotifywait -mrq -e create /opt/mobile/upload/ | while read file ; do
/usr/bin/rsync -avH –password-file=/opt/rsync/rsyncd.scrt /opt/mobile/upload/ [email protected]::filestore
done

请注意,inotifywait后的命令 -mrq -e create,我这么写的意义是让客户端创建的文件同步到服务端,并且不允许删除服务端的文件。保证客户端的文件一定存在与服务端,服务端的文件不同步到客户端。

执行同步测试

# nohup /opt/inotify/inotify_monitor.sh &

备注:如果提示无执行权限,请进行提权。
chmod u+x /opt/inotify/inotify_monitor.sh

好了,大家可以在/opt/mobile/upload/目录下增加一个文件或文件夹,然后去服务端看看文件是否正确同步了吧。

扩展功能:
编写rsync自启动服务

# vi /opt/rsync/rsync.sh
#!/bin/sh
rsync –daemon –config=/opt/rsync/rsyncd.conf
done

将rsync服务设置为开机自启动
echo “/opt/rsync/rsync.sh” >> /etc/rc.local

将inotify服务设置为开机自启动
echo “/opt/inotify/inotify_monitor.sh” >> /etc/rc.local

查看sh进程号
ps -ef|grep rsync.sh
ps -ef|grep inotify_monitor.sh

inotifywait命令参考
语法
inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]
参数:
-h, -help 输出帮助信息
@ 排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
-fromfile 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor 接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon 跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile 输出事情到一个文件而不是标准输出。
-s, –syslog 输出错误信息到系统日志
-r, –recursive 监视一个目录下的所有子目录。
-q, –quiet 指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
-exclude 正则匹配需要排除的文件,大小写敏感。
-excludei 正则匹配需要排除的文件,忽略大小写。
-t , –timeout 设置超时时间,如果为0,则无限期地执行下去。
-e , –event 指定监视的事件。
-c, –csv 输出csv格式。
-timefmt 指定时间格式,用于-format选项中的%T格式。
-format 指定输出格式。

%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

本文仅抛砖引玉,请大家先测试,本人不对结果负责,祝各位同步成功!

猜你喜欢

转载自blog.csdn.net/yakson/article/details/52044403
今日推荐