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

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、拓扑图:

clip_image001

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 [email protected]::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远程同步备份工具,来实现了多台服务器间数据实时同步的功能!

你可能感兴趣的:(服务器,解决方案,主机)