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开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

三、实验配置:

1、服务端安装并配置rsync

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

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

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

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

port = 873                           #监听端口

address = 192.168.192.130            #rsyncd服务监听端口

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

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

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

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

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

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

max connections = 5                  #最大连接数

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

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

log format = %t %a %m %f %b          #日志格式

syslog facility = local3             #日志级别{系统日志}

timeout = 300                        #设置超时时间

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

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

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

ignore errors                        #忽略错误

#auth users = backuser               #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开(如果是匿名备份,可注释)

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

comment = this is pgsql  xlog arive  #模块名称信息

#exclude = arch                       #同步时所保留archive_status目录或文件

dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    #指定类型的文件不在压缩传输

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

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

backuser:redhat                   #格式:  用户名:密码

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

[[email protected] ~]# vi /etc/rsyncd.motd

------------welcome use rsyncd backup data----------

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

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

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

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

2、客户端配置

[[email protected] ~]# yum -y install rsync            #安装rsync软件包。提供rsync客户端相关命令

[[email protected] test]# touch {1..9}                #在测试目录创建测试文件/data/test

[[email protected] test]# ls

1  2  3  4  5  6  7  8  9

[[email protected] test]# rsync -azv /data/test/ 192.168.192.130::postgres     #使用rsync客户端命令执行手动同步

------------welcome use rsyncd backup data----------       #服务端设置的欢迎语

sending incremental file list

./

1

2

3

4

5

6

7

8

9

sent 407 bytes  received 182 bytes  1178.00 bytes/sec

total size is 0  speedup is 0.00

命令选项注释:

-a #归档模式备份,相当于-rlptgoD的组合

-v #在终端显示同步过程的详细信息

-z #压缩传输

/data/test #本地文件位置

192.168.192.130::postgres   #rsync命令格式。服务器::模块名称

更多注释:

-r #递归模式,包含目录及子目录的所有文件

-l #对于符号链接文件仍复制为符号链接文件

-p #保留文件的权限标记

-t #保留文件的时间标记

-H #保留硬链接文件

-A #保留ACL属性信息

-D #保留设备文件及其他特殊文件

--delete #使备份服务器文件与本地文件保持一直

--checksum #根据校验和(而不是文件大小、修改时间)来决定是否跳过该文件

3、客户端配置inotify实时同步

[[email protected] ~]# yum -y install inotify-tools    #安装inotify-tools,提供inotify相关命令 inotifywait、inotifywatch

编写inotify脚本:

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

#!/bin/bash

/usr/bin/inotifywait  -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -e create /var/lib/pgsql/bac kups/  | while read file

do

DATE=`date +%Y%m%d%H%M%S`

event=$(echo $file | awk ‘{print $3}‘)

echo "------------$DATE-------------"

if [[ $event =~ ‘CREATE‘ ]] ; then

/usr/bin/rsync -avzP --progress /var/lib/pgsql/backups/  192.168.192.134::postgres &>> /var/log/r sync/rsync-$DATE.log

fi

done

[[email protected] ~]# chmod +x inotify.sh     #添加脚本的执行权限

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

[1] 2631

[[email protected] ~]# echo "/root/inotify.sh" >> /etc/rc.local    #将脚本添加到开机执行的文件中

4、创建文件进行测试

[[email protected] test]# touch test{1..5}    #创建测试文件

------------welcome use rsyncd backup data----------    #脚本自动在此终端输出内容

sending incremental file list

./

test1

test2

test3

test4

test5

sent 228 bytes  received 8 bytes  472.00 bytes/sec

total size is 1088  speedup is 4.61

5、防止inotify异常运行,编写检测脚本

[[email protected] ~]# vi inotify_status.sh

#!/bin/bash

ps -ef | grep -w inotify.sh | grep -v $$

if [ $? -eq 0 ]

then

echo "inotify service is running"

else

/root/inotify.sh &

echo "inotify service is activing"

fi

[[email protected] ~]# crontab -e           #编写计划任务,每分钟检测一遍服务的运行情况

*/1 * * * * /root/inotify_status.sh

四、附加选项

参数说明

语法: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   指定时间格式,如(“%”后面的大小写代表不同的格式,如%y表示2位的年)

%Y-%M-%D 日期:2012-10-13

%H:%M:%S 时间:15:45:05

是否显示该参数指定的时间,取决于–format选项中是否指定了“%T”。

–format   指定输出格式。

%w 表示发生事件的目录

%f 表示发生事件的文件

%e 表示发生的事件

%Xe 事件以“X”分

%T 显示由–timefmt定义的时间格式

参数说明

语法: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-10-01 17:22:41

rsync+inotify实时同步的相关文章

rsync+inotify实时同步环境部署记录

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

rsync+inotify实时同步方案

rsync+inotify实时同步,inotify可以实时监控本地文件或目录变化,当检测到本地文件变化,执行rsync同步命令,将变化的文件同步到其他服务器节点. 1.配置环境 3.在服务节点1.服务节点2.内容发布节点,都安装rsync软件:在内容发布节点再安装inotify实时监控软件.安装步骤建上篇. 4.编辑同步脚本 #!/bin/bash/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y' --format '%T %

rsync+inotify实时同步案例

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

rsync远程同步及rsync+inotify实时同步

rsync远程同步及rsync+inotify实时同步 思维代入 正确.有效的备份方案是保障系统及数据安全的重要手段.在服务器中,通常会结合计划性任务.shell脚本来执行本地备份.但有时候为了提高备份的可靠性,异地备份也是非常有必要的.那下面就给大家介绍一种异地远程备份的方法:rsync远程备份. rsync简介 rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份.保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份.镜像服务等应用

配置rsync+inotify实时同步

配置rsync+inotify实时同步Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等.利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出响应. 将inotify机制与rsync工具结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待状态,避免了按固定周期备份是存在的延迟性,周期过密等问题. 正因为inotify通知机制有Linux内

rsync+inotify实时同步环境部署

rsync 作用: 实现文件的备份 备份位置可以是当前主机,也可以是远程主机 备份过程可以是完全备份,也可以是增量备份 功能: 1.类似于cp的复制功能 将本地主机的一个文件复制到另一个位置下. 2.将本地主机的文件推送到远程主机,也可以从远程主机拉取文件到本地. 3.显示文件列表 使用模式 shell模式 本地复制功能 远程shell模式 可以利用ssh来实现数据的加密到远程主机 守护进程(服务器模式) rsync工作在守护进程模式下 列表模式 ls 仅仅显示内容,不做操作 确保各个主机的时间

inotify介绍及rsync + inotify 实时同步备份

1.前言 rsync (remote sync)是一款非常好的数据同步工具,能够通过对比同步双方的数据变动,实现增量同步,还可以通过LAN/WAN实现远程多台主机间文件的同步,还能结合crond任务计划来执行自动备份,又可以结合ssh实现远程数据备份的安全,种种特性使他看起来相当优秀.但如果需备份数据十分庞大时,它的不足之处就显现出来了,比如每次执行同步操作时,rsync都会扫描全部数据进而计算出增量部分,而后再同步增量数据,这将会十分耗时,使其变得低效:并且受限于crond计划任务最小时间间隔

rsync + inotify 实时同步数据

简介 Rsync (remote sync)是一款开源.快速,多功能.可实现增量的本地或远程数据镜像同步备份优秀工具.它可通过 LAN/WAN 快速同步多台主机间的文件.rsync 当前由 rsync.samba.org 维护.rsync 使用所谓的"rsync演算法"来使本地和远程主机之间的文件达到同步,该算法只传送两个文件中的不同部分,而不是每次都整份传送,因此速度相当快. 特点:   1.可以镜像保存整个目录树或文件系统:   2.可实现增量同步,既只同步发生变化的数据,因此数据

centos 6.5 rsync+inotify 实时同步

主机名.ip: server 172.31.82.184 client  172.31.82.185 需求: 1.server端 "/data/server" 做为client端 "/data/client" 的备份目录: 2.实现功能是client端对该目录做增删权限变化操作,server端能保持实时同步: 3.关闭防火墙和selinux service iptables stop setenforce 0 一.配置server端 1.安装rsync软件 yum