rsync + inotify

http://www.osyunwei.com/archives/7447.html

源服务器      10.45.12.190   owl7

目标服务器 10.251.209.211 owl-test
目的 owl7上的/i/dir1目录实时同步到owl-test上的/i2/dir1

一 配置目标服务器 owl-test 上安装rsync服务端

yum -y install xinetd rsync

1、关闭SELINUX

vi /etc/selinux/config
SELINUX=disabled #增加

setenforce 0 #立即生效


2、开启防火墙tcp 873端口

owl7上安装rsync
yum -y install xinetd rsync

配置验证
/etc/rsync.pass
a

3. 配置目标服务器 owl-test
vi /etc/xinetd.d/rsync
disable = no #修改为no

4.创建rsyncd.conf配置文件
# Globel setting
uid = root
gid = root
use chroot =no
max connectiongs = 0
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
hosts allow = 10.45.12.190        #设置多个,用逗号隔开
# Folder Setting,Permit add more folder
[images]
path = /i2
comment = images   # 与上边方括号中一样
uid = root
gid = root
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

5. 创建用认证文件  格式 用户名:密码
cat /etc/rsync.pass
rsyncuser:a

chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.pass


二. 配置源服务器 owl7

1、关闭SELINUX
2、开启防火墙tcp 873端口
3. 安装Rsync客户端

yum -y install xinetd rsync

4. 创建用认证文件  格式 用户名:密码
cat /etc/rsync.pass
rsyncuser:a

chmod 600 /etc/rsync.pass

5. 测试同步 

使用配置文件验证,需要输入密码
rsync -avH --port=873 --progress --delete  /i/dir1  [email protected]::images --password-file=/etc/rsync.pass

使用ssh验证
rsync -avH --port=873 --progress --delete -e 'ssh -p 22' /i/dir1  [email protected]:/i2

--exclude '' 排除目录  可多次使用
rsync -avH --port=873 --progress --delete --exclude 'test' --exclude 'formal' -e 'ssh -p 22' /i  [email protected]:/


实时同步配置
三. 源服务器安装inotify-tools  http://www.osyunwei.com/archives/7435.html

方法一
yum -y install inotify-tools

方法二
wget --no-check-certificate https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/opt/inotify
make && make install


创建脚本,实时触发rsync进行同步
========================================================================================
#!/bin/sh

srcdir=/i/dir1
dstdir=/i2
excludedir=/opt/inotify/exclude.list
rsyncuser=rsyncuser
rsyncpassdir=/etc/rsync.pass
dstip="10.251.209.211"

for ip in $dstip
do
rsync -avH --port=873  --bwlimit 10240 --delete -e 'ssh -p 22' $srcdir  root@$ip:$dstdir
done
/opt/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |  while read file
do
for ip in $dstip
do
rsync -avH --port=873  --bwlimit 10240 --progress --delete -e 'ssh -p 22' $srcdir  root@$ip:/i2
echo "  ${file} was rsynced" >> /tmp/rsync.log 2>&1
done
done
========================================================================================

扩展阅读:

inotify参数

-m 是保持一直监听

-r 是递归查看目录

-q 是打印出事件

-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件

========================================================================================
rsync参数 http://www.jb51.net/article/74589.htm
-a 就相当于使用了-rlptgoD  -a选项的学名应该叫做archive option,中文叫做归档选项
-H 同步硬连接
-v --verbose 输出更多信息  增加越多的v,就可以获得越多的日志信息
-q --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
–delete:如果源端没有此文件,那么目的端也别想拥有,删除之
-P --progress rsync 会显示出传输进度信息 给无聊的用户看的东西
-z 压缩选项
-r 同步文件夹 即recursive(递归的、循环的
-l rsync会完全保持软链接文件类型,原原本本的将软链接文件复制到目的端,而不会“follow link”到指向的实体文件。
-p 这个选项的全名是“perserve permissions”,顾名思义,就是保持权限。
-g 选项和 -o 选项 这两个选项是一对,用来保持文件的属组(group)和属主(owner),作用应该很清晰明了。不过要注意的一点是,改变属主和属组,往往只有管理员权限才可以
-D 原文解释是“preserve devices(root only)”,从字面意思看,就是保持设备文件的原始信息
[--exclude选项和--exclude-from选项]
如果你不希望同步一些东西到目的端的话,可以使用–exclude选项来隐藏,rsync还是很重视大家隐私的,你可以多次使用–exclude选项来设置很多的“隐私”。
如果你要隐藏的隐私太多的话,在命令行选项中设置会比较麻烦,rsync还是很体贴,它提供了–exclude-from选项,让你可以把隐私一一列在一个文件里,然后让rsync直接读取这个文件就好了
--partial 断点续传
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 
--backup-dir 将备份文件(如~filename)存放在在目录下。 
-suffix=SUFFIX 定义备份文件前缀




http://www.68idc.cn/help/server/20150315274360.html

要排除 "public_html" 文件夹下的 "database.txt" 文件:
--exclude 'public_html/database.txt' 


使用 '--exclude-from' 排除多个文件夹和文件 

建立文件: 
/home/backup/exclude.txt 

在里面定义要排除的文件夹和文件 
sources 
public_html/database.* 
downloads/test/* 

经过测试一般 
文件夹 
uploads 
download/softs/ 

使用指令: 
--exclude-from '/home/backup/exclude.txt' 

最后的命令如下: 
rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude-from '/home/backup/exclude.txt' [email protected]:/home/demo /backup/

rsync如何实现同步目标路径下的目录,不同步路径下的文件 ,只想同步目录

复制代码 代码如下:


rsync -av --delete -f '+ */' -f '- *' SRC/ DEST/


你可能感兴趣的:(rsync + inotify)