rsync结合inotify实现数据自动同步

rsync+inotify

rsync介绍

rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件。它使用所谓的“rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。

运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据;也可以多个rsync server备份一个client的数据。rsync可以搭配ssh甚至使用daemon模式。rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

inotify介绍

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

服务器端(数据接收方)的配置


[[email protected] ~]# vim /etc/sysconfig/selinux  #配置selinux

SELINUX=disabled

[[email protected] ~]#reboot  #重启

[[email protected] ~]# yum -y install rsync #安装rsync,默认情况下已经安装

[[email protected] ~]# vim /etc/rsyncd.conf #编辑rsync配置文件

log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建

pid file = /var/run/rsyncd.pid  #pid文件的存放位置

lock file = /var/run/rsync.lock  #支持max connections参数的锁文件

secrets file = /etc/rsync.password  #用户认证配置文件,里面保存用户名称和密码

motd file = /etc/rsyncd.motd  #rsync启动时欢迎信息页面文件位置(文件内容自定义)

[web_log] #定义模板,自定义名称

path = /rsydata/ #rsync服务端数据目录路径,自定义

comment = web_log #模块名称与[web_log]自定义名称相同

uid = root #设置rsync运行权限为root

gid = root #设置rsync运行权限为root

port=873  #默认端口

use chroot = false #默认为true,修改为false,增加对目录文件软连接的备份

read only = false  #设置rsync服务端文件为只读权限

list = false #不显示rsync服务端资源列表

max connections = 200 #最大连接数

timeout = 600  #设置超时时间

auth users = backuser #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开

hosts allow = ip地址  #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开

hosts deny = IP地址 #禁止数据同步的客户端IP地址,可以设置多个

[[email protected] ~]# mkdir /rsydata   #创建备份目录

[[email protected] ~]# vim /etc/rsync.password  #编辑用户认证配置文件

backuser:redhat

[email protected] ~]# chmod 600 /etc/rsync.password #一定要把用户认证配置文件的权限改成600

[[email protected] ~]# /usr/bin/rsync --daemon & #后台运行rsync服务

[1] 3392

[[email protected] ~]# systemctl enable rsyncd.service #设置rsync服务开机自启

[[email protected] ~]# firewall-cmd --permanent --add-port=873/tcp #配置防火墙

[[email protected] ~]# firewall-cmd --reload

客户端(数据发送方)的配置


[[email protected] ~]# yum -y install rsync #安装rsync,默认情况下已经安装

[[email protected] ~]# vim /etc/rsync.password#编辑认证文件,只保存密码

redhat

[[email protected] ~]# chmod 600 /etc/rsync.password#一定要把认证文件权限修改成600

[[email protected]~]#wget

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz#下载inotify源码包

[[email protected] ~]# tar -xzvf inotify-tools-3.14.tar.gz -C /usr/local/#解压到/usr/logcal目录

[[email protected] ~]# mkdir /usr/local/inotify#创建安装目录

[[email protected] ~]# cd /usr/local/inotify-tools-3.14/

[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify#指定安装目录为/usr/local/inotify

[[email protected] inotify-tools-3.14]# make &&make install#编译安装

[[email protected] ~]# systemctl restart rsyncd

[[email protected] ~]# systemctl enable rsyncd

测试验证

[[email protected] ~]# mkdir /tmp/test

[[email protected] ~]# cd /tmp/test

[[email protected] test]# touch a{1..9}

[[email protected] test]# ls

a1  a2  a3  a4  a5  a6  a7  a8  a9

[[email protected]~]#rsync -vzrtopg --progress /tmp/test/ [email protected]::web_log --password-file=/etc/rsync.password#把客户端/tmp/test目录下的文件同步到服务器端的/rsydata目录下

[[email protected] ~]# cd /rsydata/

[[email protected] rsydata]# ls

a1  a2  a3  a4  a5  a6  a7  a8  a9  #数据已经同步

写一个脚本实现当客户端/tmp/test/下的文件有变化时,把此目录下的数据自动同步到服务器端的/rsydata下

[[email protected] ~]# vim inotify.sh

#!/bin/bash

/usr/local/inotify/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib /tmp/test | while read file

do

/usr/bin/rsync -vzrtopg --delete /tmp/test/ [email protected]::web_log --password-file=/etc/rsync.password

echo "${files} was rsynced" >> /var/log/rsync.log 2>&1

done

[[email protected] ~]# chmod +x inotify.sh

[[email protected] ~]# sh inotify.sh &  #后台运行脚本

[1] 15435

[[email protected] ~]# jobs   #查看后台作业

[1]+  Running                 sh inotify.sh &

[[email protected] ~]# echo "/root/inotify.sh" >> /etc/rc.local  #把脚本写到开机自启动文件里面

为了防止inotify服务由于意外情况停止服务,编写监控inotify进程的脚本

[[email protected] ~]# vim /root/inotify_status.sh

#!/bin/bash

ps -elf | grep inotify &> /dev/null

if [ -z $? ]

then

echo "inotify service is running"

else

/root/inotify.sh &

echo "inotify service is activing"

fi

[[email protected] ~]# chmod +x /root/inotify_status.sh

[[email protected] ~]# crontab -e  #编写一个计划任务,每时每刻执行这个脚本

* * * * * /root/inotify_status.sh & > /dev/null

参数说明

语法:inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile 
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude 
正则匹配需要排除的文件,大小写敏感。
例:要排除/home/mjb目录下的test1,test2,cc目录,可这样写--exclude="/home/mjb/(test1/|test2/|cc/)"。多个目录或文件一定要用“|”分开,不能在命令行中用两个--exclude,否则最后的--exclude会覆盖其它的。系统只是在文件路径中查找是否有上面参数指定的字符,如果有就排除。因此在test1后面加了“/”。否则/home/mjb/test123也会被排除。
–excludei 
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout 
设置超时时间
-e , –event 
只监听指定的事件。
-a , –ascending 
以指定事件升序排列。
-d , –descending 
以指定事件降序排列。

可监听事件
access 文件读取 
modify 文件更改。 
attrib  文件属性更改,如权限,时间戳等。 
close_write 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。  
close_nowrite  以只读模式打开的文件被关闭。  
close  文件被关闭,不管它是如何打开的。 
open  文件打开。 
moved_to  一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。 
moved_from 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。  
move  包括moved_to和 moved_from  
move_self 文件或目录被移除,之后不再监听此文件或目录。  
create  文件或目录创建 
delete  文件或目录删除 
delete_self  文件或目录移除,之后不再监听此文件或目录 
unmount  文件系统取消挂载,之后不再监听此文件系统。

时间: 2024-08-25 12:34:46

rsync结合inotify实现数据自动同步的相关文章

rsync与inotify实现数据实时同步

Rsync与Inotify 单一的rsync只可以进行数据同步,单一的inotify只可以实时监控文件,两者结合使用刚好满足数据实时同步的需求,下面就用一个数据发布服务器和两个web服务器实例解析rsync+inotify实现实时同步. 数据发布服务器 192.168.1.5 (rsync+inotify) web服务器 192.168.1.6 192.168.1.7 (rsync) 首先在web服务器上部署rsync 192.168.1.6配置 [[email protected]~]# yu

rsync + inotify 实现数据时时同步,和跨系统实现数据同步。

一.rsync客户端与服务端结构图: 日常维护中,数据备份算是比较基本的一个了,rsync很好的解决了繁琐的数据时时同步,不需要手动指定变化的数据,而是由rsync自动检测,发现数据不一致时,就开始备份或者推送到其他rsync主机上.inotify是linux监控文件变化的监控工具,可以配合rsync更好的完成工作.很多公司操作系统可能都是不统一的,上面就又添加的一个windows的主机,已实现将在windows主机上将linux主机中的数据拉取到win主机上. 二.rsync简介. 1.)rs

利用Inotify和Rsync将web工程文件自动同步到多台应用服务器

背景:需要搭建一套跟线上一模一样的环境,用来预发布,这是其中的web分发的一个小模块的实现过程. 1 工具以及环境简介 1.1,Inotify工具 Inotify,它是一个内核用于通知用户空间程序文件系统变化的机制.众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如hotplug.udev 和 ino

rsync+inotify实现数据实时同步

inotify简介 inotify是一种强大的.细粒度的.异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开.关闭.移动/重命名.删除.创建或者改变属性. 配置inotify需要rsync服务能直接传输数据(免密码传输). rsync配置请参考我的另一篇利用rsync进行数据同步. 服务端已配置完毕,inotify配置在客户端. 1.[[email protected] ~]# wget http://

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

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

rsync+inotify实时数据的同步 一.rsync+inotify的组合为什么会出现?? rsync缺陷: 1.由于rsync在实施大量数据备份时,工作方式是扫描整个数据文 件,其实发生更改  的只是一小部分,导致过多的占用系统资源.                2.rsync不能实时的去监测.同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据  可能出现不一致,无法在应用故障时完全的恢复数据. inotify优点

利用rsync+inotify实现数据实时同步脚本文件

将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133.96.7.101 host3=133.96.7.102 src=/data/www/ dst1=web1 dst2=web2 dst3=web3 user1=web1 user2=web2 user3=web3 /usr/local/inotify/bin/inotifywait -mrq --ti

[转帖]sersync基于rsync+inotify实现数据实时同步

sersync基于rsync+inotify实现数据实时同步 https://www.jianshu.com/p/d532a34e5cc5 前言 提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输. 原文地址:https://www.cnblogs.com/nbxcnxvcnb/p/12393252.html

Windows下利用rsync实现邮件服务器数据的同步

Windows下利用rsync实现邮件服务器数据的同步 背景环境 对系统管理员来说,平时的工作重心应该集中在维护 系统正常运转,能够正常提供服务上,这里往往牵涉到 一个数据备份的问题,在我所了解的情况中,有80%的系统管理员不是太关心自己服务器的安全性,但往往对 备份镜像的技术相当感兴趣,但由于商业产品的软硬件价格都相当高昂,因此往往会选择自由软件.rsync就 是这样的软件,它可以满足绝大多数要求不是特 别高的备份需求.适用于数据不是很大,海量小的文件的存储备份,结合服务器本身的磁盘阵列技术,