rsync+inotify实现文件实时同步-步骤详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify实现文件实时同步-步骤详解相关的知识,希望对你有一定的参考价值。

实验拓扑(centos7下):192.168.80.181 服务器端(主机名www.aa.com)
192.168.80.182 客户端(主机名www.ab.com)
1、使用SSH源:安装rsync,服务端和客户端同时安装,只使用客户端命令就OK了。
systemctl stop firewalld
setenforce 0
yum install -y rsync
---以上三句在服务器端和客户端都要执行---------
rsync -avz [email protected]:/tmp/ /opt/ //在客户端执行,把服务器端tmp目录的内容同步到客户端opt目录下
技术分享图片
rsync -rlvz /opt/ [email protected]:/tmp/ //在客户端执行,把客户端本机的opt目录同步给181主机的tmp目录
技术分享图片
同步前181主机:
技术分享图片
同步后181主机:
技术分享图片
//如果避免交互的话需要配置公钥验证。以下两句实现在182主机上产生公钥与私钥,把本机公钥传给181主机,这样下次在182主机上使用同步命令时不需要输入181主机密码,即避免交互。
//如果要实现在181主机上使用同步命令时不需要输入182主机密码,只需把IP地址修改为182
[[email protected] ~]# ssh-keygen -t rsa //跳出语句一直enter就行
[[email protected] ~]# ssh-copy-id [email protected]
技术分享图片
-----------------------------在客户端验证同步测试-------------------------
181 /var/www/html 下有A开头文件,客户机/tmp下有B开头文件,执行下面命令后客户机上B开头文件应该被删除:
[[email protected] ~]# rsync -avz --delete [email protected]:/var/www/html/ /tmp/ //--delete的作用
技术分享图片
技术分享图片

2.使用RSYNC作为源:需要配置RSYNC服务端程序
-------新建并配置rsync源服务器使其可以被同步(读取或写入)------
vi /etc/rsyncd.conf
uid = nobody //运行用户
gid = nobody //运行用户组
use chroot = yes //禁锢在源目录
address = 192.168.80.181 //监听地址
port 873 //监听端口
log file = /var/log/rsyncd.log //日志文件位置
pid file = /var/run/rsyncd.pid //存放进程ID的文件位置
hosts allow = 192.168.80.0/24 //允许访问的客户端地址
[wwwroot] //共享模块名称
path = /var/www/html //源目录实际路径
comment = Document Root of www.benet.com //说明
read only = yes //是否为只读
dont compress = .gz .bz2 .tgz .zip .rar .z //同步时不再压缩的文件类型
auth users = backuper //授权账户
secrets file = /etc/rsyncd_users.db //存放账户信息的数据文件
:wq
----建立虚拟用户配置文件并设置恰当的权限-----
[[email protected] ~]# vi /etc/rsyncd_users.db
backuper:123123 //无需建立同名系统账户,这里是虚拟用户
:wq
[[email protected] ~]# chmod 600 /etc/rsyncd_users.db //由于账号明文存放,因此要调整文件权限,避免账号信息泄露
//备份用户backuper需要对源目录/var/www/html/有相应读取权限,实际上,只要other组有读取权限,授权用户backuper和运行用户nobody也就有读取权限了。
技术分享图片
//如果目录不存在就新建一个
----启动、关闭rsync程序---
[[email protected] ~]# rsync --daemon
[[email protected] ~]# netstat -anpt | grep rsync
技术分享图片
关闭rsync程序:
[[email protected] ~]# killall -3 rsync //没有killall命令就执行yum install psmisc -y安装
技术分享图片
再次启动:
技术分享图片
如果出现上述错误,只需rm -rf /var/run/rsyncd.pid,之后再去启动就可以了。
------------在客户端测试同步情况------
[[email protected] ~]# rsync -avz [email protected]::wwwroot/ /tmp/ //把服务器上源目录的文件下载到本地tmp目录下
技术分享图片
技术分享图片
技术分享图片

[[email protected] ~]# rsync -avz /bin/b* [email protected]::wwwroot //把本地的文件上传到服务器(注意服务器端目录本身以及程序的权限)
技术分享图片
出现上述错误,是因为服务器端rsync的配置文件中read only是只读,没有写入权限,且目录本身没有赋予other写入的权限
[[email protected] ~]# chown nobody /var/www/html/
[[email protected] ~]# vi /etc/rsyncd.conf //修改read only的值为no
技术分享图片
此时无需重启服务,再次执行同步命令:
技术分享图片
技术分享图片
----使客户端使用rsync备份时不需要密码交互----
[[email protected] ~]# export RSYNC_PASSWORD=123123 //临时生效,关机后失效
//以下配置永久生效
[[email protected] ~]# vi /etc/profile
export RSYNC_PASSWORD=123123 添加到最后一行下
[[email protected] ~]# source /etc/profile
3.配置rsync+inotify实时同步
----编译安装inotify(被备份主机上做)----
[[email protected] ~]# tar xf inotify-tools-3.14.tar.gz -C /opt
[[email protected] ~]# cd /opt/inotify-tools-3.14/
[[email protected] ~]# ./configure
[[email protected] ~]# make && make install
-------配合inotify触发备份、调整内核参数(在被备份主机181上改)----
[[email protected] ~]# vi /etc/sysctl.d/te.conf
fs.inotify.max_queued_events = 16384 //监控队列大小
fs.inotify.max_user_instances = 1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数
:wq
[[email protected] ~]# sysctl -p //初始化
-----测试监控效果------
[[email protected] ~]# inotifywait -mrq -e modify,create,move,delete /opt/test/ //m(持续监控)r(递规整个目录)q(简化输入信息) -e指定监控的事件:向被监控的目录写入或者其它操作时会有输出。
技术分享图片
---通过脚本完成触发备份任务,这里只要/opt//test/目录下有新建修改移除删除等动作时,会完全备份到/var/www/html/目录下-----
[[email protected] ~]# vi /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"
RSYNC_CMD="rsync -azH --delete /opt/test/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 5 ] ; then
$RSYNC_CMD
fi
done
:wq
技术分享图片
[[email protected] ~]# sh /opt/inotify_rsync.sh &
-----测试查看------
[[email protected] ~]# rm -rf /opt/test/t2
技术分享图片

以上是关于rsync+inotify实现文件实时同步-步骤详解的主要内容,如果未能解决你的问题,请参考以下文章

rsync+inotify-tools实时同步 步骤

rsync 实现本地时时文件同步

inotify+rsync实现实时同步

基于rsync+inotify实现文件实时同步

rsync+inotify实现数据实时同步备份

Rsync+inotify 实现实时同步数据文件