1服务器文件同步机制
数据填报项目有文件上传以及文档转化的功能,且用户上传文档存储于服务器本地,当分布式部署以后,需要将存储于一台服务器上的文件同步到其他所有的服务器上面,本方案使用inotify-tools + rsync来实现。
实现机制如下:
在rsync client服务器上通过inotify-tools工具检测文件变动,当检测到文件有变动时,通过rsync协议,将变动的文件传输到rsync server端,实现服务器之间的文件同步。
1.1安装inotify-tools
Inotify是文件系统事件监控工具,在Linux内核2.6.13开始引入,可以用来监控文件开发,关闭,移动/重命名,删除,创建或者改版属性。
通过yum安装:
yuminstall inotify-tools
1.2启动rsync服务
Rsync是一个远程数据同步工具,可以快速同步多台主机间的文件。Rsync在CentOS 6上默认是安装的,如果没有可以使用yum install rsync –y
因为多台服务文件同步,所以每台服务器上既要开rsync服务,又要开客户端。
启动rsync服务之前需要配置两个文件/etc/rsyncd.conf和/etc/rsyncd.secrets
然后启动rsync服务:rsync --daemon --config=/etc/rsyncd.conf
/etc/rsyncd.conf内容如下:
uid = root
gid = root
use chroot = no
max connections = 2
timeout = 600
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[file_sync]
path = /opt/media/file/
comment = rsync data sync logs
auth users = data
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
list = no
hosts
allow=100.24.26.48
hosts deny=0.0.0.0/32
/etc/rsyncd.secrets内容如下:文件权限需要修改成600
data:aaa@2016
1.3在rsync客户端启动文件同步脚本
需要准备两个文件:rsync.sh和rsync_client.pwd
rsync.sh即是主要的运行脚本,rsync_client.pwd是密码文件,对应rsync服务端的文件/etc/rsyncd.secrets,文件权限也是600
rsync.sh文件内容:
#!/bin/sh
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/opt/media/file/
log_file=/var/log/rsync_client.log
rsync_server=10.45.231.79
rsync_user=data
rsync_pwd=/opt/media/rsync_client.pwd
rsync_module=file_sync
if [ ! -e ${rsync_pwd} ];then
echo -e "rsync client passwod file ${rsync_pwd} does notexist!"
exit 0
fi
inotify_fun(){
/usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w%f' \
-e modify,delete,create,move,attrib ${source_path} \
| while read file
do
/usr/bin/rsync -auvrtzopgP --progress --password-file=${rsync_pwd}${source_path} ${rsync_user}@${rsync_server}::${rsync_module}
done
}
#inotify log
inotify_fun >> ${log_file}2>&1 &
rsync_client.pwd文件内容:
aaa@2016