您的位置:首页 > 其它

Rsync与Inotify-Tools实时文件同步解决方案

2014-08-24 22:08 866 查看
Rsync与Inotify-Tools 架构可以解决企业多台服务器间文件的同步问题,下面我们了解一下Rsync和Inotify-Tools 。
一、简单介绍Rsync和Inotify-Tools 工具
1、 Rsync简介:
Rsync (remote sync)是一款开源、快速,多功能、可实现增量的本地或远程数据镜像同步备份优秀工具。它可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 使用“Rsync演算法”使本地和远程主机之间的文件达到同步,该算法只传送两个文件中的不同部分,而不是每次都整份传送,因此速度相当快。支持平台:类 Unix 系统
RSYNC的特性:
1、可以镜像保存整个目录树或文件系统;
2、较高的数据传输效率,基于rsync算法,差异传送;
3、可以借助于ssh实现安全socket连接,数据传输;
4、支持匿名传输;
RSYNC工作模式:
第一种模式:shell模式,也称作本地模式,和cp相似;
第二种模式:远程shell模式,可以利用ssh协议承载其远程传输过程,和rcp相似;
第三种模式:列表模式,仅列出源中的内容,参数-nv,和ls -l相似
第四种模式:服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求,适合创建中心备份服务器或项目存储库;
2、Inotify-Tools简介
inotify监控文件系统机制,通过inotify-tools来实现实时同步了
inotify-tools 是linux下inotify文件监控工具,微系统提供一套c开发接口库函数,同时还提供了一系列的命令行工具。这些工具可以用来监控文件系统的事件。
两种工具:1、inotifywait,用来监控文件或目录的变化,2、inotifywatch,用来统计文件系统访问的次数。
下面我们一起来部署一下 rsync+inotify-tools 架构
二: rsync+inotify-tools架构实施:
1、拓扑图:



2、服务配置详解:
rsync服务器配置
主配置文件:
[root@rsync-server-1 ~]# vim /etc/rsyncd.conf
## Global Settings##
uid = root # rsync对后面模块中的path路径拥有什么权限
gid = root # rsync对后面模块中的path路径拥有什么权限
use chroot = no # 安全操作
max connections = 2000 # 定义连接数2000
timeout = 600 # 600秒超时
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors # 忽略错误
read only = false # false才能上传文件,true不能上传文件
list = false # 文件列表
hosts allow = 172.16.0.0/16
hosts deny = *
auth users = anna # 虚拟用户,同步时需要用这个用户
secrets file = /etc/rsync.password # 密码文件
#####################################
[test] # 模块名称
comment = redhat.sx site files by sunsky 00:17 2013-06-28 # 注释
path = /data/web/redhat.sx # 模块的路径
####################################
注:如果需要可以多创建几个模块
生成密码文件:
[root@rsync-server1 /]# echo 'anna:123456' > /etc/rsync.passwd
[root@rsync-server1 /]# chmod 600 /etc/rsync.passwd
[root@rsync-server-1 /]# cat /etc/rsync.passwd
anna:123456
[root@rsync-server-1 /]# ll /etc/rsync.passwd
-rw-------. 1 root root 20 Jun 4 04:27 /etc/rsync.passwd
查看rsync服务状态
[root@rsync-server-1 /]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 10309 root 4u IPv4 94045 0t0 TCP *:rsync (LISTEN)
rsync 10309 root 5u IPv6 94046 0t0 TCP *:rsync (LISTEN)
为rsync添加开机自启动
#cat /etc/xinetd.d/rsync
disable = no (只需要改这一项就可以了)
#chkconfig rsync on
rsync客户端与inotify-tool配置:
1、安装rsync和客户端密码文件配置
#yum -y install xinetd
#vim /etc/rsync.passwd
123456
2、下载inotify-tools-3.14.tar.gz包,解压安装
#tar xf inotify-tools-3.14.tar.gz
#cd inotify-tools-3.14
# ./configure --help
# ./configure --prefix=/usr/local/inotify
# make && make install
3、动态监控文件脚本:
vim autorsync.sh
#!/bin/bash
#
src1='/data/'
des1=test
host1=172.16.22.6
user=anna
allrsync='/usr/bin/rsync -rpgovz --delete --progress'
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %w%f %e' -e modify,delete,create,attrib $src1 | while read DATE TIME DIR FILE EVENT;
do
case $DIR in
${src1}*)
#rsync -a /etc/passwd anna@172.16.22.6::test --password-file=/etc/rsync.passwd
$allrsync -a $src1 $user@$host1::$des1 --password-file=/etc/rsync.passwd && echo "$DATE $TIME $FILE was rsynced" &>> /var/log/rsync-$des1-$host1.log
#$allrsync -a $src1 $user@$host2::$des1 --password-file=/etc/rsync.passwd && echo "$DATE $TIME $FILE was rsynced" &>> /var/log/rsync-$des1-$host2.log
;;
esac
done
3、测试:
# bash /usr/sbin/auto_rsync.sh &>> /var/log/auto_rsync.log &
# for i in {1..10};do dd if=/dev/zero of=/data/$i.txt bs=10M count=1 ;dd if=/dev/zero of=/data/$i.txt bs=10M count=1;done
# ll --full-time /data/
rsync服务器端查看:
# ll --full-time /data/
三、总结
我们用linux文件系统事件监控机制(即inotify),通过Inotify-tools工具,结合 rsync远程同步备份工具,来实现了多台服务器间数据实时同步的功能!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息