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实时同步的主要内容,如果未能解决你的问题,请参考以下文章