Rsync 用来实现触发式的文件同步。
Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各类变化状况,如文件存取、删除、移动等。利用这一机制,能够很是方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时做出响应;
因此使用inotify监控文件系统有任何变更时,而后就触发rsync同步,达到了单向实时同步数据的功能。web
Rsyncshell
默认安装 或者 源码下载 安装;
yum install rsync -y
同步的备机须要启动服务 开启 873 端口;
示例启动 /usr/bin/rsync --daemon 能够添加到 /etc/rc.load 启动项中;
示例:bash
A: web-server 192.168.2.5 B: web-bak 192.168.2.6
1、web-bak 配置:服务器
在 bak 服务上 安装 Rsync dom
默认端口是873,默认安装时候没有这个文件 须要手动建立配置文件 rsyncd.confssh
对于非匿名访问的 rsync 服务器还要建立认证口令文;ui
一、建立配置文件:spa
# vi /etc/rsyncd.confcode
[root@web-bak ]# cat /etc/rsyncd.conf
uid = root gid = root use chroot = no max connections = 100 timeout = 30 strict modes = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [server1] path = /backup/ comment = backup file ignore errors read only = no write only = no hosts allow = 192.16.2.5
# 指定能进行同步的机器。 多个 IP 或者网段 用空格隔开; # hosts deny = * list = false uid = root gid = root auth users = bakup
# 验证用户 secrets file = /etc/rsync.pass
# 添加验证密码文件
二、建立 rsync.pass 文件 (须要设置为当前用户下的只读权限)orm
chmod 600 /etc/rsync.pass
[root@web-bak ]# cat /etc/rsync.pass
bakup:server1
三、默认启动
默认启动
/usr/bin/rsync --daemon
同步 :
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/user.passwd user@172.16.3.18::server /opt/bak/
#
# user.passwd 密码路径
# rsync dome 服务所在的服务器
# user@172.16.3.18::server 须要同步备份的服务目录,指定 user 帐户
# /opt/bak 本地机器路径
# 若是 /opt/bak 在 user@172.16.3.18::server 前,就是本地同步到server服务器上
# 若是 /ope/bak 在后 就是,server 同步备份到本地。
2、web-server 配置:
一、建立 rsync.pass 文件
[root@web-server1 ]# cat /etc/rsync.pass
server1
二、安装 inotify-tools
默认yum install 也能够源码进行。
三、建立 检测同步脚本
( inotifywait 循环检测文件 Rsync 从而达到实时同步 )
[root@web-server1 ]# cat rsync-inotify.sh
#!/bin/bash bak=192.168.2.6 # 备份服务器
src=/bakup/
# 备份目录 dst=server1 # 备份模块
user=bakup 启动帐户 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass $src $user@$bak::$dst echo "${files} was rsynced ok ! " >>/tmp/rsync.log 2>&1
done
四、Rsync 同步参数参考:
-v, --verbose 详细模式输出,详细显示数据传输备份状况 -z, --compress 传输时进行压缩以提升传输效率,--compress-level=NUM可按级别压缩。局域网能够不用压缩 -a, --archive 归档模式,表示以递归方式传输文件,并保持全部文件属性,等价于-rtopgDl -r, --recursive(属于-a参数) 对子目录以递归模式,即目录下的全部目录都一样传输 -t, --times(属于-a参数) 保持文件时间属性信息 -o, --owner(属于-a参数) 保持文件属主信息 -p, --perms(属于-a参数) 保持文件权限 -g, --group(属于-a参数) 保持文件属组信息 -D, --devices (属于-a参数) 保持设备文件信息 -l, --links(属于-a参数) 保留软连接(小写字母l) -P, --progress 显示同步的过程及传输时的进度等信息 -e, --rsh=COMMAND 使用的信道协议(remote shell),指定替代rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不须要传输的文件信息 --exclude-from=file 文件名所在的目录文件,便可以实现排除多个文件 --bwlimit=RATE 实现数据传输过程限速传输,限制速率单位为kbytes
3、后台启动运行同步脚本
nohup & 启动后台运行
# nohup sh rsync-inotify.sh &
4、 Rsync 是单向同步的;客户端只保持与服务器端的镜像同步;客户端删除并不会影响服务端数据。
unison 能够达到双向镜像同步。