您的位置:首页 > 其它

多个目录同步不行,即脚本这样写不得行!

2015-07-27 16:06 363 查看

采用rsync+inotify,实现多台web数据动态同步

背景:由于无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致。

解决办法:采用rsync+inotify,实现多台web数据动态同步

解决思路:比如有a、b、c、d四台web,为解决哪台服务器为源数据服务器,我们在a服务器上安装rsync+inotify,然后将一个二级域名指向a服务器,这样以后网站编辑、开发人员之间访问二级域名进行日常网站更新,a服务器在检测到本地有数据更新时,便动态(触发式)向其它服务器发送更新数据

选择rsync+inotify的几大理由:在常规的数据同步应用案例中,大多数人会选择使用rsync来完成数据同步,笔者选择rsync+inotify的理由如下

1、服务器性能:rsync只能实现定时更新,无论网站有无文件更新,rsync都会按着定时任务去检查文件是否有更新,当数据文件较大时会使服务器性能下降;而rsync+inotify为触发式更新,也就是说只有当某个文件发生改动时才会更新,这样一来对服务器性能影响较小

2、数据实时性:如果选择rsync,每隔多长时间同步一次数据是个问题,时间越短,对性能影响就越大。时间太长,用户/编辑无法接受。采用rsync+inotify可实现实时更新,当a服务器文件有更新时,其它服务器立即更新

关于inotify介绍

Inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的

、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。必须内核支持,触发更新,对系统影响很小。

利用这种机制自己可以简单写一个,web杀毒,写文件的时候查看文件内容,根据关键词或者加密,判断文件。性能有所影响。

inotify 可以监视的文件系统事件包括:

IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走,如 mv

IN_MOVED_TO,文件被移来,如 mv、cp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

IN_UNMOUNT,宿主文件系统被 umount

IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

注:上面所说的文件也包括目录。

步骤:

环境拓扑

a:192.168.1.101

b:192.168.1.102

c:192.168.1.103

d:192.168.1.104

注:数据源服务器为a,目标服务器为b、c、d

一、目标服务器安装rsync (在b、c、d服务器上操作,安装配置均一样)

安装rsync

#tar zxvf rsync-3.0.8.tar.gz

#cd rsync-3.0.8

#./configure && make && make install

配置rsync

#vi /etc/rsync.conf 加入如下内容

uid = root

gid = root

use chroot = no

max connections = 20

strict modes = yes

log file = /var/log/rsyncd.log #指定日志文件,默认交给syslog。不想要的话,就关闭它,日志也很多。syslog里面

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log format = %t %a %m %f %b

[web]

path = /usr/local/nginx/html/

auth users = rsync

read only = no

hosts allow = 192.168.1.0/24

list = no

uid = root

gid = root

secrets file = /etc/rsync.passwd

ignore errors = yes

创建认证

#vi /etc/rsync.passwd

rsync:rsync

#chmod 600 /etc/rsync.passwd

启动rsync,启动后使用netstat查看,会发现系统已启动873端口

# rsync --daemon --config=/etc/rsync.conf

加入开机启动

# echo "rsync --daemon --config=/etc/rsync.conf" >>/etc/rc.local

二、源服务器安装rsync+inotify (在a服务器上操作)

安装rsync(仅安装即可,不需配置)

#tar zxvf rsync-3.0.8.tar.gz

#cd rsync-3.0.8

#./configure && make && make install

#echo "rsync" > /etc/rsync-client.passwd

#chmod 600 /etc/rsync-client.passwd

安装inotify

#tar zxvf inotify-tools-3.13.tar.gz

#cd inotify-tools-3.13

#./configure && make && make install

#vi /etc/rsync-web.sh 加入如下内容

#!/bin/sh

SRC=/usr/local/nginx/html/

DES=web

WEB2=192.168.1.102

WEB3=192.168.1.103

WEB4=192.168.1.104

USER=rsync

/usr/local/bin/inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F

do

rsync -ahqzt --password-file=/etc/rsync-client.passwd --delete $SRC $USER@$WEB2::web

rsync -ahqzt --password-file=/etc/rsync-client.passwd --delete $SRC $USER@$WEB3::web

rsync -ahqzt --password-file=/etc/rsync-client.passwd --delete $SRC $USER@$WEB4::web

done

#chmod +x /etc/rsync-web.sh

#nohup /etc/rsync-web.sh & //必须使用nohup放入后台执行,否则关闭终端后此脚本进程会自动结束

三、测试

在a服务器/usr/local/nginx/html目录下进行增、添、改、删文件,看b、c、d服务器是否能得到同步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: