有时我们会用crontab 来自动话管理系统资源的动向,但是如果当一个目录下文件发生改变,那么远程和这台机器是为用户提供web服务时,决不允许发生内容不一致问题,所以我采用了rsync+inotify的功能来帮我实现这个目的,当我一台服务器上web内容出现改变时,远程服务器上的web也要同时改变。
由于公司增加了一台web服务器,我采用前端nginx,后端apache的构架,当我用nginx去调去后端的是数据也时总有些内容不一致,我开始使用rewrite规则进行重定向,但是又增加了后端apache服务器的负担,因此我想能不能把后端服务器的内容同步到这太nginx的服务器上,减轻后端服务器的负载。
闲话不说,开始干活
服务端,192.168.10.2
客户端。192.168.10.3
环境:more /etc/redhat-release
CentOS release 5.4
uname -a
Linux kaixin 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
一:安装rsync 1.其实在你安装系统的时候,rsync已经安装上了 但是还需要添加一个rsyncd.conf文件(内容见后面)
下载包:
解包安装
./configure --prefix=/usr/local/rsync
make
make install
2.vi /etc/rsyncd.conf uid = root #用户
gid = root
max connections = 200 #最大连接数
timeout = 600 #多长时间连接
use chroot = yes #改变权限使用
read only = yes #在传输过程中的属性
pid file=/var/run/rsyncd.pid #进程pid
port = 873 #端口
lock file = /var/lock/subsys/rsync.lock
log file = /var/log/rsyncd.log #日志
#hosts allow=192.168.0.0/16 #允许使用rsync的主机
syslog facility = local7 #系统使用的进程吧(不是很清楚了)
[mnt_fdada] ##定义模块,
path = /mnt/ #路径,你服务器上的 ,也就是需要同步到这个目录
comment = BACKUP CLIENT IS SOLARIS 8 E250
ignore errors ###忽视传输过程中的错误
read only = no #属性
list = no #列表,很占资源的 我就把他禁掉了
auth users = root #使用的用户
secrets file=/etc/inburst.pas #认证文件
[put_tmp_fdajk]
path = /mnt/
comment = UPDATE
ignore errors
read only = no
list = no
auth users = root
#secrets file = /etc/inburst.pas
创建验证文件
vi /etc/inburst.pas
root:123456
修改成0600 的权限,否则你会验证不过去哦
启动rsync
/usr/local/rsync/bin/rsync --daemon
如果修改rsycnd。conf 时需要执行下列命令使其生效
killall -9 rsync
]# rm -rf /var/run/rsyncd.pid
]# /usr/local/rsync/bin/rsync --daemon
3.测试 到客户端192.168.10.3上执行
rsync -avz --progress --delete /opt/test/ root@192.168.10.2::mnt_fdada
然后会提示输入密码正确就ok了最好客户端也创建一个同样的文件,保证验证时减少错误几率。
(要和服务器上的文件里的模块一致,否则报错。)
下面这个是不用输入密码的脚本命令
rsync -avz --progress --delete --password-file=/etc/rsync.pas /opt/test/ root@192.168.10.2::mnt_fdada
一切ok进行下一步
二:客户端安装inotify 下载地址
tar -xzf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
编写测试脚本inotify。sh
1 #!/bin/sh
2 SRC=/opt/test
3 #DST=/dir 远鲁?sync模驴茅碌?驴录
4 INWT=/usr/local/bin/inotifywait
5 RSYNC=/usr/bin/rsync
6 $INWT -mrq -e create,move,delete,modify $SRC | while read D E F ; do
7 $RSYNC -avz --progress --delete --password-file=/etc/rsync.pas /opt/test/ root@192.168.10.2::mnt_fdada
8 done
修改权限,给可执行的哦
然后让其后台执行
就在你的/opt/test 下随便创建文件
./inotify.sh & ####
这个请注意,不要上来就直接后台运行,如果出错的话技术进程有点麻烦。 直接运行的话还可以curtl +c 下 直接停止 减少错误指令带来的损失。
building file list ... 4 files to consider deleting aaaaa ./ aaaa 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/4) sent 133 bytes received 44 bytes 354.00 bytes/sec total size is 0 speedup is 0.00 building file list ... 3 files to consider deleting aaa ./ 前提准备,关闭防火墙。要不你在防火墙将rsync的端口打开
否者也会报错哦
具体错误解析,请看我的工作错误记录哦。http://blog.chinaunix.net/u3/103362/showart_2314112.html
阅读(1483) | 评论(0) | 转发(0) |