利用rsync和inotify-tools工具实现分布式服务器之间的文件同步

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

你可能感兴趣的:(利用rsync和inotify-tools工具实现分布式服务器之间的文件同步)