Rsync+Inotify实时同步服务器

Categories:

Rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多


文章目录[隐藏]

Rsync

下载

官网:https://download.samba.org/pub/rsync/

本地下载:rsync-3.1.3.tar.gz

安装

注:需要gcc环境,开启873端口

yum -y install gcc

解压压缩包,进入rsync文件夹,执行

./configure

make && make install

查看安装路径

whereis rsync

创建conf文件

vi /etc/rsyncd.conf (删掉注释)

uid=root
gid=root
uid = root
max connections = 200
timeout = 300
pid file = /etc/rsyncd.pid
log file = /etc/rsyncd.log

[www]
path = /usr/local/tmp/
read only = false
ignore errors
hosts allow = 192.168.0.0 //允许同步的ip
auth users = root //开启验证,同步时需要密码
secrets file = /etc/rsyncd.secrets //验证文件,内容格式 root:123456

创建secrets文件

vi /etc/rsyncd.secrets

root:123456

创建pass文件

vi /etc/rsyncd.pass

123456

启动rsync

/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf

关闭rsync

pkill rsync

推送

rsync -auv --progress /usr/local/tmp/ root@192.168.0.1::www

//普通同步,如被同步端开启验证则需要输入密码,且@前用户名需要与被同步端一致

rsync -auv --progress /usr/local/tmp/ root@192.168.0.1::www --password-file=/etc/rsyncd.pass

//文件验证同步,使用pwd文件进行验证,无需输入密码,但rsyncd.pass只包含一个密码,所以@前用户名和密码与被同步端一致

关于conf、secrets、pass文件说明,A服务器将文件推送到B服务器,B服务器需要有conf、secrets文件并且开启rsync,A服务器需要有pass文件无需开启rsync,然后A服务器执行同步命令即可推送

如果两台服务器需要双向同步,则都拥有三个文件,并开启rsync,再使用inotify监控文件

常见错误:链接

Inotify

下载

inotify-tools主要作用是监控文件变化,并在文件变化时调用rsync同步文件

git下载地址:https://github.com/rvoicilas/inotify-tools/wiki#getting

本地下载:inotify-tools-3.14.tar.gz

安装

解压压缩包,进入inotify文件夹,执行

./configure

make && make install

创建脚本inotify.sh

vim inotify.sh

#!/bin/bash
src=/usr/local/tmp/
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src |  while read file
do
      
      rsync -auv --progress /usr/local/tmp/ root@192.168.0.1::www --password-file=/etc/rsyncd.pass

      echo "  ${file} was rsynced" >>/etc/rsyncd.log 2>&1
done

启动脚本

nohup ./inotify.sh &
关闭
查看inotifywait线程,kill关闭
 
注意:退出shell时不能点击关闭按钮,要使用exit命令先断开连接