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上
到此收工!
我用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上
到此收工!
相关文章推荐
- APUE linux下 sys/ioctl.h 作用
- Linux-VMware安装使用
- CentOS7配置samba4.2到Win8
- linux find 命令详解
- linux java 线上问题排查
- linux 重命名 rename
- ARM Linux 3.x 的设备树(Device Tree)之DTB、DTS
- linux系统数据盘挂载教程
- Linux中的wget网络下载命令使用全解
- linux串口termios(转载)
- Linux系统及应用问题分析排查工具
- Consul 多数据中心配置 MULTIPLE DATACENTERS
- linux命令 more
- Linux下远程桌面Windows
- Linux下面exec函数
- 愚人的linux内核2440移植札记(超曲折版)
- Windows磁盘或目录设置共享,Linux识别并挂载
- 服务器基础配置(Redhat/CentOS)
- Linux sar命令
- CentOS7通过omnibus安装包搭建GitLab环境