网站运营
位置:首页>> 网站运营>> inotify-tools+rsync实时同步文件的配置方法

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
投稿

猜你喜欢

  • POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到互联网上的邮件服务器和下载电子邮
  • 一、域名过期后第一阶段域名过期后1~45天内,将处于注册商保留状态whois英文状态:REGISTRAR-HOLD二、域名过期后第二阶段 注
  • 本文主要对Linux下的多线程进行一个入门的介绍,虽然是入门,但是十分详细,希望大家通过本文所述,对Linux多线程编程的概念有一定的了解。
  • 内容摘要:随着ASP 技术的发展,网络上基于ASP技术开发的网站越来越多,对ASP技术的支持可以说已经是Windows系统IIS服
  • 近日南方都市报的一则题为《网店变形记:握手线下士多》的关于广州“聚宝盆”B2M运营模式的报道,引起电
  • 第一:你的英文站必须有准确的制作策略。英文站的设计和制作,必须符合外国人的风格、文化习惯和使用互联网搜索信息的方式,遵照他们的心理去制作,他
  • 常用字符集编码的概要特性(一)搞清常用编码特性是解决字符集编码问题的基础。字符集编码的识别与转换、分析各种乱码产生的原因、编程操作各种编码字
  • 前置条件容器化spring boot应用所需环境:jdk 1.8 +maven 3.0 +我们的需求是:使用maven打包,将spring
  • 什么是SPF就是Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你
  • IIS6.0由于运行机制的不同,出现了应用程序池的概念。一般建议10个左右的站点共用一个应用程序池,应用程序池对于一般站点可以采用默认设置,
  • 1、什么是SQL注入      随着B/S模式应用开发的发展,使得使用这种模式编写应用程序的程序员也
  • 经常在一此站长论坛里看到一些站长朋友提问:“为什么我的网站收录这么少?为什么我的收录慢慢减少“等等问题。今天就对这个问题说说自己的看法 其实
  • 今天我们继续介绍有关Godaddy主机的知识,现在要介绍的是有关Godaddy域名解析服务器地址的。假如在我们这里注册域名,我们就把你的域名
  • 方法一 将新模板覆盖templets下的文件最简单的更换模板的方法是直接覆盖templets目录下的所有文件但是这样会导致原先的模板被覆盖。
  • 网站的定位跟网站的目标用户群,市场的潜力和竞争对手都相关,所以,它也不简单。做网站时,首先要解决两个问题:一是网站有没有定位,二是网站定位是
  • 在Windows IIS 6.0下配置PHP,通常有CGI、ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运
  • 打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control,将 Wait
  • 上译言网站的网友都应该看到那份通告了。这种类似的现象让人想起了饭否之类的微博关站,它会导致微博总体市场出现“此消彼长”的现象,例如新浪微博在
  • 一、数据去重日常工作中,使用Hive或者Impala查询导出来可能会存在数据重复的现象,但又不想重新执行一遍查询(查询时间稍长,导出文件内容
  • 将当前位置的“主页”字样,改为“你自己的网站名称”。这虽然是很小的事情,但首先它增强了网站的内链接,而且在文本链接中出现“网站名称”主关键字
手机版 网站运营 asp之家 www.aspxhome.com