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

时间:2021-05-08 19:59:27 

服务器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
投稿

猜你喜欢

  • linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务)

    2022-06-19 17:18:38
  • 使用vs2019进行Linux远程开发的方法步骤

    2023-10-08 21:20:26
  • IIS信息服务器排错指导

    2010-05-04 18:33:00
  • 谷歌推出搜索定制功能 或是众多网站失职

    2008-12-19 13:32:00
  • Linux下截屏并编辑的最佳工具

    2023-11-02 17:31:58
  • Linux学习之CentOS(二十九)--Linux网卡高级命令、IP别名及多网卡绑定的方法

    2023-01-09 16:43:19
  • DNS MX记录一定要放在A记录之前

    2007-12-04 10:07:00
  • 技巧:DDoS防御的八大方法详解

    2009-09-17 14:55:00
  • 纳思达携手IBF,提升中国通用耗材品牌的影响力

    2009-10-22 14:53:00
  • Vmvare扩展虚拟机磁盘大小的方法

    2022-11-09 01:17:54
  • 彭宇诚:博客推广方法详解

    2010-03-04 10:13:00
  • 详解如何使用Spark和Scala分析Apache访问日志

    2023-08-04 23:24:07
  • 将域名从Godaddy转移到Namecheap详细图文教程

    2012-03-12 20:28:17
  • 谈谈眼动研究的一些作用

    2009-11-28 16:19:00
  • 分享十个便宜VPS主机-VPS服务器建站和搭建应用服务体验

    2023-11-18 10:20:59
  • 数据安全谈:看 NFS网络文件系统的安全

    2009-03-09 12:47:00
  • WIN2003组策略详解

    2008-12-29 13:22:00
  • Win2003下IIS6服务器设置排错解答

    2010-05-10 18:12:00
  • Apache控制是否显示站点目录(推荐)

    2021-06-05 01:25:09
  • V5MALL进入最后封装阶段,预计12月初免费对外发行

    2009-11-26 18:45:00
  • asp之家 网站运营 m.aspxhome.com