Linux rsync+inotify实现实时同步

假设现在有两台服务器,一台式线上服务器,一台是本地服务器,用来同步备份线上的数据:

我用docker进行模拟,配置两个docker容器,运行centos7,这里关于docker不多说,假设容器已经运行


其中服务端的ip地址为:172.17.0.2


源目录:/rsynctestdir/2

本地服务器的ip地址为:172.17.0.3


备份目录:/rsynctestdir/3

一、本地服务器配置rsync服务

1、如果没有rsync,使用yum安装

yum search rsync

yum install rsync.x86_64

2、配置rsync服务

vi /etc/rsyncd.conf

uid = root                             //运行RSYNC守护进程的用户

gid = root                             //运行RSYNC守护进程的组

use chroot = no                  //不使用chroot

max connections=0          // 最大连接数无限制

log file=/var/log/rsyncd.log               //日志记录文件的存放位置

pid file=/var/run/rsyncd.pid              //锁文件的存放位置

lock file=/var/run/rsyncd.lock           //pid文件的存放位置

 

[2dir]                                  //这里是认证的模块名,在client端需要指定

path = /rsynctest/3/  //需要做镜像的目录,不可缺少

comment = rsync from 172.17.0.2

read only = no                              // 非只读

list = on                                         //不允许列文件

auth users = rsyncuser             //认证的用户名,如果没有这行则表明是匿名,此用户与系统无关

secrets file = /etc/rsync.pas                  //密码和用户名对比表,密码文件自己生成

3、设置密码文件

vi /etc/rsync.pas

rsyncuser:123456 //用户名:密码

设置600权限

chmod 600 /etc/rsync.pas

4、启动rsync服务

rsync --port=873 --address=172.17.0.3 --daemon

二、在线上服务器172.17.0.2使用rsync测试

1、同样添加密码文件

vi /etc/rsync.pas

123456 //对应刚才client端的密码

设置权限 

chmod 600 /etc/rsync.pas

2、rsync -avH --delete --progress --password-file=/etc/rsync.pas /etc/rsynctest/2 rsyncuser@172.17.0.3::2dir

三、在线上服务器172.17.0.2上使用inotify

1、安装notify

wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar xzvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.13
# ./configure  --prefix=/usr/local/inotify
# make
# make install

2、创建 inotify_rsync.sh脚本

vi inotify_rsync.sh

#!/bin/sh
#data:2016-7-4
#function:rsync 172.17.0.2 to 172.17.0.3
log=/usr/local/inotify/logs/rsync.log
src="/rsynctestdir/3/"
host="172.17.0.3"
module="3dir"
/usr/local/inotify/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib $src |  while read DATE TIME DIR FILE; do
       FILECHANGE=${DIR}${FILE}
       /usr/bin/rsync -avH --delete  --progress --password-file=/etc/rsync.pas $src rsyncuser@$host::$module &
       echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> $log
done

3、运行

sh notify_rsync.sh


4、在服务器172.17.0.2上测试

cd /rsynctestdir/2 && touch 1.txt


成功备份到172.17.0.3上


到此收工!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值