inotify-tools+rsync实时同步文件的配置方法

服务器A:
论坛的主服务器,运行DZ X2论坛程序;服务器B:论坛从服务器,需要把X2的图片附件和MySQL数据实时从A主服务器实时同步到B服务器.MySQL同步设置会在下一编中说到.以下是用于实时同步两台服务器的图片。

因为一般的RSYNC需要CRON来定期运行SH脚本来实现同步,这样会带来一些问题.比如用户从主服务器上传上一个图片,需要最少一分钟才能从从服务器显示出来.自从Linux 2.6内核后,支持了inotify机制,当某些文件或文件夹有改变时,发出相应的事件,这样,第三方程序只要订阅这些事件,就可以处理相应的操作了.这时,只要有文件被修改,就执行一次RSNYN,把修改的文件主动地上传到另一台服务器上就可以了。

我使用的是google的inotify-tools,比较简单.国内有功能很强大的类似的程序,但是好复杂.另外需要注意的是:如果使用inotify-tools来实现实时同步,我们的主服务器--源文件服务器(也就是服务器A)实现是RSYNC的从服务器,我们的从服务器--目标同步的服务器(服务器B)才是RSYNC的主服务器.不要搞混了哦.

首先从主服务器A开始,需要确定你的系统是否支持inotify:

代码如下:

ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_queued_events
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_instances
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_watches

能输出这样的结果表示支持。

下载并安装inotify-tools:


代码如下:

wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make
make install

完成inotify-tools的安装。

接下来需要写两个SH脚本,inotify_init.sh和inotify_monitor.sh:
inotify_init.sh 用于第一次初始化,也就是运行一次完整的RSYNC同步.

vi /root/inotify_init.sh


代码如下:

#!/bin/sh
SRC=/主服务器A需要同步的目录/ #记得在最后面加/不然RYNC会自动增加一层目录
DES=bbsatt
IP=从服务器B的IP
USER=rsync
#DST=/etc/rsyncd 远程rsync模块下的目录
INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
$RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES

保存退出.

设置可执行权限:
chmod +x /root/inotify_init.sh

接下是inotify_monitor.sh,用于订阅文件修改事件.注意,因为特别原因,我在这里做的是增量备份+实时同步,也就是说,当主服务器A上的图片被删除是,从服务器B是不会删除图片的.

vi /root/inotify_monitor.sh


代码如下:

#!/bin/bash
##---------------------
sync[0]='/主服务器需要同步的目录/,从服务器B的IP,bbsatt,rsync' # localdir,host,rsync_module,auth_user
INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
PASS=/root/rsync.pwd
##---------------------
for item in ${sync[@]}; do
dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
user=`echo $item | awk -F"," '{print $4}'`
$INWT -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move $dir | while read date time file event
do
#echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --exclude='*' --password-file=$PASS \
--include=$file $dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
fi

MOVED_FROM|MOVED_FROM,ISDIR|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --password-file=$PASS --exclude=$file \
$dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
fi

esac
done &
done

chmod +x /root/inotify_monitor.sh

设置RSYNC自动登录验证密码
vi /root/rsync.pwd
xxxxxx
保存,退出

设置只有ROOT才可以查看的权限.
chmod 0600 /root/rsync.pwd

以下是备从务器B的配置:
安装RSYNC
yum rsync -y

#----配置RSNYD服务

vi /etc/rsyncd.conf
内容如下,需要把Apache修改成你运行网站的用户名,我的是因为原来使用apache,虽然现在用Nginx,也一直没改用户名:

代码如下:

uid = apache
gid = apache
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[bbsatt]
path = /从服务器B本地用于存放备份的目录
ignore errors
read only = no
list = false
hosts allow = 主服务器A的IP
auth users = rsync
secrets file = /etc/rsync.pas

vi /etc/rsync.pas
rsync:xxxxxx

chmod 0600 /etc/rsync.pas

启动RSYNCD
rsync --daemon
添加开机自动启动服务:
vi /etc/rc.local
rsync --daemon
回到主服务器A,
vi /etc/rc.local
添加以下内容,实时开机自动同步:


代码如下:

/root/inotify_init.sh
/root/inotify_monitor.sh

保存退出

运行:


代码如下:

/root/inotify_init.sh
/root/inotify_monitor.sh

这样就能实现实时同步图片文件了,在主服务器A的同步目录下新建一个文件测试下吧。

(0)

相关推荐

  • RSync实现文件同步备份配置详解

    一.什么是rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 "rsync 算法"提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件. rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等:

  • 无需密码通过ssh执行rsync来同步文件的方法

    1.通过ssh执行rsync(需要密码) 通过ssh帐户(需要密码)执行rsync,将文件同步镜像到远程服务器. 下面这个例子将本地的/home/ramesh同步到远程目录/backup/ramesh(服务器地址192.168.200.10). 执行以下操作时,服务器将会提示需要用户使用密码登录. 复制代码 代码如下: rsync -avz -e ssh /home/ramesh/ ramesh@192.168.200.10:/backup/ramesh/ 2.使用ssh-keygen生成密匙

  • rsync 同步错误 cwrsync rsync error rsync error: some files/attrs were not transferred 解决方法

    本人发现这个问题两次了一直以为是服务器问题,因为就一台机器出现了这个问题,原来为了安全特取消了文件的写入与修改权限.通过mcafee的修改权限,问题解决,所以出现问题,先检查目录权限问题. rsync error: some files/attrs were not transferred (see previous errors) cwrsync rsync error failed: Invalid argument cwrsync 在windows 系统上作为服务端 rsync 在linu

  • rsync相对于其他同步工具的优缺点介绍

    rsync它原本是在Linux系统下面的一个文件同步协议,随着技术的发展,它也有其它版本的,如Windows和AIX.HPUX下面都有相应的版本可以支持的.Rsync这个同步工具的好处在于完全命令行下面的操作,有详细的日志文件,同时也能支持多种不同情况下的更新,例如备份式更新等,还有一个非常好的地方是,它和服务器之间可以互相同步,即可以从服务器上更新文件下来,也可以把本地的文件提交到服务器上面去.只要你配置的参数是正确的,就能完成这样的工作. 而且这个工具占用的系统资源也比较小.另外我们也试过,

  • windows下文件同步工具 CwRsync 4.0.2 安装配置方法(图文)

    CwRsync是基于cygwin平台的rsync软件包,支持windows对windows.windows对Linux.Linux对windows高效文件同步.由于CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包.Cwrsync还集成了OpenSSH for windows,可以实现Linux 下Rsync一模一样的操作.详细配置步骤如下: 一.服务器端安装配置 1.下载服务器端安装文件http://http://www.jb51.net/softs/55933.h

  • rsync 只同步目录结构不同步文件的方法

    If you are using an older rsync version, try: 复制代码 代码如下: rsync -av --include='*/' --exclude='*' /path/to/src /path/to/dest/ rsync -av --include='*/' --exclude='*' /path/to/apache/logs/ root@www433.nixcraft.net.in:/path/to/apache/logs/ # cd /var/log/a

  • 使用cwRsync实现windows下服务器文件定时同步备份(附错误处理方法)

    首先要下载cwRsync的服务端和客户端软件,下载地址如下: 服务端:cwRsync Server (多台服务器文件同步服务端) V4.1.0 免费版 客户端:cwRsync(多服务器文件同步客户端) V4.1.0 免费版 不过我们使用的一般不是最新版本,老版本可以到s.jb51.net的服务器文件同步专区下载 然后我在本地机器上安装了其中的服务器端(10.0.2.136),然后在同网段下的另一台机器(10.0.2.137)安装了客户端.为了测试,我专门在本地机器上的f盘上放置了我们的产品dnt

  • 在Windows中配置Rsync同步文件的方法

    Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次只传输修改过的文件部分.传输数据过程中可以实行压缩及解压缩操作,减少带宽流量.支持scp.ssh及直接socket方式连接,支持匿名传输.支持Linux,Window平台.写本文的时候,window版最新版为4.0.5版 官网:http://rsync.samba.org/ Linux版下载:http://rsync.samba.org/

  • Linux 用cp和rsync同步文件时跳过指定目录的方法

    需求是:某测试站点,在某个节点的时候需要同步到正式站点去,但是里面的config目录不能覆盖, 方法一:终端命令行下执行以下命令 cp -R `find /projectA -type d -path /projectA/common/config -prune -o -print | sed 1d ` /projectB/ 方法二: localhost # find projectB/ommon/config | xargs touch 修改目标目录的congfig目录文件的access ti

  • Rsync实现文件定时同步技巧

    使用背景: 2005年5月,商务网处于上线阶段.但,由于总总原因一直迟迟不能上线.系统基本功能都已经实现了,但是作为一个商务网整体来说,文件同步这块还没有完成.正好自己这段时间不是很忙.对这块也有些兴趣,所以决定摸摸看. 万事开头难,从没接触过什么同步之类的,怎么开始呢?幸好以前做邮件系统的时候,认识了Eyou的小熊,请教了他,于是推荐了Rsync这个好工具给我.在此,特别感谢小熊的帮助.        Rsync的优点是部署方便,使用方便,效率高,并且它是开源的.目前在某些Linux服务器版中

随机推荐