码迷,mamicode.com
首页 > 其他好文 > 详细

rsync+inotify实时同步

时间:2017-11-28 21:06:29      阅读:225      评论:0      收藏:0      [点我收藏+]

标签: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

[root@localhost ~]# vim /etc/selinux/config 
SELINUX=disabled


2.关闭防火墙

[root@localhost ~]# systemctl stop firewalld


3.时间同步

[root@localhost ~]# ntpdate cn.pool.ntp.org


操着过程:

配置目标服务器:

1.安装rsync

[root@dest ~]# yum install -y rsync


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

[root@dest ~]# 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.创建密码文件,并赋予权限

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


4.创建同步的目录

[root@dest ~]# mkdir /test


5.启动rsync

[root@dest ~]# rsync --daemon
[root@dest ~]# 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

[root@source ~]# yum install -y rsync


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

[root@source ~]# cat /etc/rsync.password 
123456
[root@source ~]# chmod 600 /etc/rsync.password


3.测试推送

[root@source ~]# cd /test/
[root@source test]# touch {1..3}.txt
[root@source test]# ls
1.txt  2.txt  3.txt
[root@source test]# rsync -vzrtopg --progress /test/ rsync_backup@10.0.0.133::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.查看目标服务器是否有文件

[root@dest ~]# cd /test/
[root@dest test]# ls
1.txt  2.txt  3.txt


5.安装inotify

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


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

[root@source 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/ rsync_backup@192.168.236.146::backup  --password-file=/etc/rsync.password
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
cd $src && rsync -vzrtopg --progress  --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
[root@source src]# chmod +x inotify.sh


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

[root@source test]# crontab -l
* * * * * /usr/local/src/inotify.sh
[root@source test]# systemctl restart crond


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

源服务器

[root@source test]# rm -rf *
[root@source test]# touch {4..6}.txt
[root@source test]# ls
4.txt  5.txt  6.txt

目标服务器

[root@dest test]# ls
4.txt  5.txt  6.txt


实验成功。。。


rsync+inotify实时同步

标签:rsync+inotify实时同步

原文地址:http://blog.51cto.com/1767340368/2045430

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!