您的位置:首页 > 运维架构 > Linux

Linux rsync+inotify实现实时同步

2016-07-05 11:34 603 查看
假设现在有两台服务器,一台式线上服务器,一台是本地服务器,用来同步备份线上的数据:

我用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                  <
4000
/span>//密码和用户名对比表,密码文件自己生成
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上

到此收工!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: