rsync+inotify实时同步

Posted

tags:

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

Rsync+Inotify实时同步


Rsync:

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


Inotify:

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


rsync+inotify:

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


实验环境:Centos7

源服务器-IP:10.0.0.132 (rsync+inotify)

目标服务器-IP:10.0.0.133 (rsync)


实验拓扑:

技术分享图片



配置前提:(两台都执行)

1.关闭selinux

[[email protected] ~]# vim /etc/selinux/config 
SELINUX=disabled


2.关闭防火墙

[[email protected] ~]# systemctl stop firewalld


3.时间同步

[[email protected] ~]# ntpdate cn.pool.ntp.org


操着过程:

配置目标服务器:

1.安装rsync

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


2.修改配置文件,添加以下

[[email protected] ~]# vim /etc/rsyncd.conf 
#工作中指定用户(需要指定用户)
uid = root
gid = root
####相当于黑洞.出错定位
use chroot = no
#####有多少个客户端同时传文件
max connections = 200
#####超时时间
timeout = 300
#####进程号文件
pid file = /var/run/rsyncd.pid
#####日志文件
lock file = /var/run/rsync.lock
#####日志文件
log file = /var/log/rsyncd.log
#####模块开始
[backup]
####需要同步的目录
path = /test/
####表示出现错误忽略错误
ignore errors
#####表示网络权限可写(本地控制真正可写)
read only = false
#####这里设置IP或让不让同步
list = false
#####指定允许的网段
hosts allow = 10.0.0.0/24
#####拒绝链接的地址,以下表示没有拒绝的链接。
hosts deny = 0.0.0.0/32
#####不要动的东西(默认情况)
#####虚拟用户
auth users = rsync_backup
#####虚拟用户的密码文件
secrets file = /etc/rsync.password


3.创建密码文件,并赋予权限

[[email protected] ~]# cat /etc/rsync.password 
rsync_backup:123456 (用户为配置文件里的虚拟用户,密码自定义)
[[email protected] ~]# chmod 600 /etc/rsync.password


4.创建同步的目录

[[email protected] ~]# mkdir /test


5.启动rsync

[[email protected] ~]# rsync --daemon
[[email protected] ~]# ps -ef |grep rsync
root       2832      1  0 20:06 ?        00:00:00 rsync --daemon
root       2834   2774  0 20:07 pts/1    00:00:00 grep --color=auto rsync


配置源服务器:

1.安装rsync

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


2.创建同步出去的目录和密码文件,并赋予密码文件权限

[[email protected] ~]# cat /etc/rsync.password 
123456
[[email protected] ~]# chmod 600 /etc/rsync.password


3.测试推送

[[email protected] ~]# cd /test/
[[email protected] test]# touch {1..3}.txt
[[email protected] test]# ls
1.txt  2.txt  3.txt
[[email protected] test]# rsync -vzrtopg --progress /test/ [email protected]::backup  --password-file=/etc/rsync.password 
sending incremental file list
./
1.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/4)
2.txt
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1/4)
3.txt
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=0/4)
sent 167 bytes  received 68 bytes  470.00 bytes/sec
total size is 0  speedup is 0.00


4.查看目标服务器是否有文件

[[email protected] ~]# cd /test/
[[email protected] test]# ls
1.txt  2.txt  3.txt


5.安装inotify

[[email protected] src]#  wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[[email protected] src]# tar -zxvf inotify-tools-3.14.tar.gz 
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[[email protected] inotify-tools-3.14]# make && make install


6.编写监控脚本,并给脚本权限

[[email protected] src]# cat inotify.sh 
#!/bin/bash
host01=10.0.0.133  #inotify-slave的ip地址
src=/test        #本地监控的目录
dst=backup         #inotify-slave的rsync服务的模块名
user=rsync_backup      #inotify-slave的rsync服务的虚拟用户
rsync_passfile=/etc/rsync.password   #本地调用rsync服务的密码文件
inotify_home=/usr/local/inotify   #inotify的安装目录
#judge
if [ ! -e "$src" ] || [ ! -e "${rsync_passfile}" ] || [ ! -e "${inotify_home}/bin/inotifywait" ] || [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src | while read file
do
#rsync -vzrtopg  --progress --delete /jhonse/back/ [email protected]::backup  --password-file=/etc/rsync.password
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src [email protected]$host01::$dst >/dev/null 2>&1
cd $src && rsync -vzrtopg --progress  --delete ./  --timeout=100 [email protected]$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
[[email protected] src]# chmod +x inotify.sh


7.创建计划任务,实时同步

[[email protected] test]# crontab -l
* * * * * /usr/local/src/inotify.sh
[[email protected] test]# systemctl restart crond


8.测试,看能否实时同步

源服务器

[[email protected] test]# rm -rf *
[[email protected] test]# touch {4..6}.txt
[[email protected] test]# ls
4.txt  5.txt  6.txt

目标服务器

[[email protected] test]# ls
4.txt  5.txt  6.txt


实验成功。。。


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

Rsync下行同步+inotify实时同步介绍和部署

inotify+rsync实现实时同步

rsync+inotify实时同步

rsync下行同步rsync+inotify实时同步(同步如饮水一样简单)

rsync+inotify实时同步

实时同步rsync+inotify