rsync+inotify-tools实时同步

Posted

tags:

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

rsync概述:

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

Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制,Rsync可以使用SSH安全隧道进行加密数据传输。Rsync服务器端定义源数据,Rsync客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync使用TCP 873端口。


实验描述:

192.168.1.155  ###目标主机(主)

192.168.1.156  ###源主机(客户端)

通过rsync将源主机上的test1文件夹中的文件复制到目标主机test文件夹中。

然后使用cron定时任务定时执行

关闭两台服务器的防火墙( systemctl stop firewalld、setenforce 0)


rsync安装配置:

在源主机配置:

[[email protected] ~]# yum -y install rsync

[[email protected] ~]# mkdir /root/test1

[[email protected] ~]# vim /etc/rsync_exclude.lst   ###指定要排除复制的文件或目录

123 123.txt  ####指定排除123、123.txt文件或目录

在test1文件夹中创建一个test.123文件,便于同步时,看是否成功


在目标主机配置:

[[email protected] /]# mkdir /root/test

[[email protected] /]# yum -y install rsync

[[email protected] /]# vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes

max connections = 4

pid file = /var/run/rsyncd.pid

exclude = lost+found/

transfer logging = yes

timeout = 900

ignore nonreadable = yes

dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

path = /root/test

hosts allow = 192.168.1.156

hosts deny = *

[[email protected] /]# systemctl start rsyncd

[[email protected] /]# systemctl enable rsyncd


配置完成后,在源主机上执行rsync,并设置cron定时任务

[[email protected] ~]# rsync -avz --delete /root/test1/ 192.168.1.155:/test    ###az参数是增量备份   aP是完整备份

[[email protected] ~]# rsync -avz --delete /root/test1/ 192.168.1.155:/test

The authenticity of host ‘192.168.1.155 (192.168.1.155)‘ can‘t be established.

ECDSA key fingerprint is df:21:e3:6c:36:9a:9d:b5:7e:28:ec:ba:a2:a9:f8:fb.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.1.155‘ (ECDSA) to the list of known hosts.

[email protected]‘s password:

sending incremental file list

./

test.123

sent 90 bytes  received 34 bytes  22.55 bytes/sec

total size is 0  speedup is 0.00

[[email protected] ~]#

[[email protected] ~]# crontab -l

* 02 * * * rsync -avz --delete /root/test1/ 192.168.1.155:/test

rsync中的参数:

-r 是递归   -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;   -z 传输时压缩;   -P 传输进度;   -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;   -e ssh的参数建立起加密的连接。   -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时   --progress是指显示出详细的进度情况   --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致   --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

 --bwlimit   rsync限速参数(限制速度很简单,添加个参数即可bwlimit,后面的值是多少k Bytes/s,有些机房会限制机器的流量,为了不触及底线,在使用scp和rsync的时候都要注意。

为了避免你的scp或者rsync因为无良&懒惰的OPS设置防火墙的偷懒而造成的断流现象,我们必须对自己的数据传输进行一定的限流措施,慢一点总比被断了的好)


Rsync+Inotify-tools实现数据实时同步

上面已经说过,使用rsync进行同步,就算是定时任务,也不是实时的,这时我们要用到一个软件进行辅助  inotify-tools

inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数

下载地址:https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

由于rsync同步时,要输入对方的账号密码,每次同步时都要输入,这时可以用ssh免秘钥登陆,前面章节已经讲过,这里不做叙述。

1.inotify安装步骤:

wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

tar zvxf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13/

./configure && make && make install

2.编写脚本

vim /auto_inotify.sh (这里是从rsync服务器同步到客户端,推流)

#!/bin/sh

src=/root/test/

des=/root/test1/

ip=192.168.1.156

inotifywait -mrq --timefmt ‘%d/%m/%y-%H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib ${src} | while read file

do

for i in $ip

do

/bin/rsync -a --delete $src [email protected]$ip:$des

done

done

解释:

#!/bin/sh

src=/root/test/  ###inotify监控的目录 (服务端目录)

des=/root/test1/###客户端目录

ip=192.168.1.156###客户端IP

inotifywait -mrq --timefmt ‘%d/%m/%y-%H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib ${src} ###检查服务器哪个文件在实时变化 | while read file  ###读取文件

do

for i in $ip   ###通过循环进行同步

do

/bin/rsync -a --delete $src [email protected]$ip:$des

done

done

3.运行脚本并在后台执行

[[email protected] test]# 【nohup】sh /auto_inotify.sh &(最好加上nohup 如果只加上&那么关闭终端,运行程序也随之关闭加上nohup终端关闭后台也会运行)

[1] 8856

nohup sh /auto_inotify.sh &

[email protected] test]# ps -ef | grep auto_inotify.sh

root     16486     1  0 11:32 ?        00:00:00 sh /auto_inotify.sh

root     16488 16486  0 11:32 ?        00:00:00 sh /auto_inotify.sh

root     16573 16493  0 11:33 pts/1    00:00:00 grep --color=auto auto_inotify.sh

[[email protected] test]# ps -ef | grep inotifywait

root     16487 16486  0 11:32 ?        00:00:00 inotifywait -mrq --timefmt %d/%m/%y-%H:%M --format %T %w%f -e modify,delete,create,attrib /root/test/

root     17545 16493  0 11:37 pts/1    00:00:00 grep --color=auto inotifywait

扩展:nohup

原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。(也就是原本输出在屏幕上的,现在输到一个文件中,相当于一个日志)


本文出自 “帅小欣” 博客,请务必保留此出处http://jiaxinwang.blog.51cto.com/12273793/1967114

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

rsync+inotify-tools实时同步

centos 6.9使用Rsync+Inotify-tools实现数据实时同步

关于rsync+inotify-tools实时同步模式

文件触发式实时同步 Rsync+Sersync Rsync+Inotify-tools

rsync+inotify-tools实时同步 步骤

Rsync+Sersync实时数据同步