|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于开发环境的选择尽量要轻量级和高度可定制,航空母舰级别的工具往往会让你迷惑不解;
服务器A:
论坛的主服务器,运转DZX2论坛程序;服务器B:论坛从服务器,必要把X2的图片附件和MySQL数据及时从A主服务器及时同步到B服务器.MySQL同步设置会鄙人一编中说到.以下是用于及时同步两台服务器的图片。
由于一样平常的RSYNC必要CRON来按期运转SH剧本来完成同步,如许会带来一些成绩.好比用户从主服务器上传上一个图片,必要起码一分钟才干从从服务器显现出来.自从Linux2.6内核后,撑持了inotify机制,当某些文件或文件夹有改动时,收回响应的事务,如许,第三方程序只需定阅这些事务,就能够处置响应的操纵了.这时候,只需有文件被修正,就实行一次RSNYN,把修正的文件自动地上传到另外一台服务器上就能够了。
我利用的是google的inotify-tools,对照复杂.国际有功效很壮大的相似的程序,可是好庞大.别的必要注重的是:假如利用inotify-tools来完成及时同步,我们的主服务器--源文件服务器(也就是服务器A)完成是RSYNC的从服务器,我们的从服务器--方针同步的服务器(服务器B)才是RSYNC的主服务器.不要弄混了哦.
起首从主服务器A入手下手,必要断定你的体系是不是撑持inotify:
.代码以下:
ll/proc/sys/fs/inotify
total0
-rw-r--r--1rootroot0Jan417:56max_queued_events
-rw-r--r--1rootroot0Jan417:56max_user_instances
-rw-r--r--1rootroot0Jan417:56max_user_watches
能输入如许的了局暗示撑持。
下载并安装inotify-tools:
.代码以下:
wget--no-check-certificatehttp://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tarxzvfinotify-tools-3.14.tar.gz
cdinotify-tools-3.14
./configure--prefix=/usr
make
makeinstall
完成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
##---------------------
foritemin${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
--eventCLOSE_WRITE,create,move$dir|whilereaddatetimefileevent
do
#echo$event-$file
case$eventin
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/null2>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/null2>1&"
echo$cmd
$cmd
fi
esac
done&
done
chmod+x/root/inotify_monitor.sh
设置RSYNC主动登录考证暗码
vi/root/rsync.pwd
xxxxxx
保留,加入
设置只要ROOT才能够检察的权限.
chmod0600/root/rsync.pwd
以下是备从务器B的设置:
安装RSYNC
yumrsync-y
#----设置RSNYD服务
vi/etc/rsyncd.conf
内容以下,必要把Apache修正成你运转网站的用户名,我的是由于本来利用apache,固然如今用Nginx,也一向没改用户名:
.代码以下:
uid=apache
gid=apache
usechroot=no
maxconnections=4
pidfile=/var/run/rsyncd.pid
lockfile=/var/run/rsync.lock
logfile=/var/log/rsyncd.log
[bbsatt]
path=/从服务器B当地用于寄存备份的目次
ignoreerrors
readonly=no
list=false
hostsallow=主服务器A的IP
authusers=rsync
secretsfile=/etc/rsync.pas
vi/etc/rsync.pas
rsync:xxxxxx
chmod0600/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的同步目次下新建一个文件测试下吧。
使用gcc或g++进行编译,使用gdb进行调试; |
|