斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn
分类: LINUX
2013-12-18 11:26:14
rsync+inotify实时同步配置
(整理时间:2011-8-2)
(环境:redhat as 5.5)
一、 安装配置rsync服务器
1、安装rsync软件
rpm -ihv /home/wayne/rsync-2.6.3-1.i386.rpm
2、配置rsync服务端
a. 创建/etc/rsyncd.conf配置文件,内容如下:
uid = www //指定文件传输过程中的用户身份
gid = www //指定文件传输过程中的组身份
use chroot = no //是否启动目录chroot限制
max connections = 5 //指定允许的最大并发客户端连接数
port = 873 //指定服务监听的端口,若使用默认的873端口,此行可省略
address = 192.168.2.7 //指定服务监听的ip地址,默认为0.0.0.0。使用xinetd方式启动服务时此行被忽略
log file = /jongo/logs/rsyncd.log //指定使用独立的日志文件的位置
pid file = /jongo/logs/syncd.pid //保存pid到指定文件,以便于使用脚本终止进程
hosts allow = 192.168.2.0/24 //此行可用于设置允许的客户端范围
[17buy_application] //设置一个名为17buy_applicatio的备份目录区段(模块),名称可自定义
path = /jongo/17buy //指定需要被用于远程备份的目录
comment = Whole 17buy application //注释信息
read only = yes //该目录设置为只读,即至允许客户端下行同步,不允许上传。若需要进行上行还原数据,可以改为no
dont compress = *.gz *.tgz *.zip *.z *.bz2 *.tbz //对指定格式的文件不再进行压缩
auth users = 17buybackup //指定允许远程同步此目录的用户名。若使用匿名方式,此行和下行可以去掉
secrets file = /etc/rsyncd.users //指定用户名:密码数据库文件位置
b.创建/etc/rsyncd.users 文件
echo '17buybackup:17buy$%^' >>/etc/rsyncd.users
chmod 600 /etc/rsyncd.users
注意:
这个文件的权限需要600的,否则同步的时候会报错。
c. 创建或编辑/etc/xinetd.d/rsync文件
创建或编辑/etc/xinetd.d/rsync文件,确认为如下内容:
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
d. 重启xinetd服务
service xinetd restart
e. 防火墙设置
如果服务器启动了防火墙,则需要将对应的873端口的tcp协议和udp协议打
开
二、 安装inotify
# wget
# tar -zxvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make
# make install
如果上述操作没有发生错误,则inotify已经安装好了
三、 设置ssh无密码登陆
在源机器上按如下操作:
# ssh-keygen -b 1024 -t rsa 一路回车上去,否则生成的KEY还是要密码的
# scp /root/.ssh/id_rsa.pub root@destip:/root/.ssh/ authorized_keys 将生成的公钥拷贝到目标机器的/root/.ssh/下,并重命名为 authorized_key文件
在目标机器上 chmod 600 /root/.ssh/ authorized_keys 设置权限。权限设置好了以后,就可以从源机器上用ssh上登陆目标机器,以验证是否还需要登陆密码。
四、同步脚步本
在源机器上编写如下脚本:
# vi inotify.sh
#!/bin/sh
src=/jongo/17buy
des=/jongo/test
ip=122.224.72.126
/usr/local/bin/inotifywait -mrq --timefmt '%Y%m%d-%H:%M:%S' --format '%T %w %f %e' -e modify,delete,create,attrib ${src} --fromfile
=/root/shell/excludefile.lst | while read time filepath file eventname
do
for i in $ip
do
if [ "${eventname}" == "DELETE" ]
then
echo "`date +%Y%m%d-%T`:${eventname} has occured and sysn the ${filepath} directory -> $ip" >>/var/log/rsync.log
/usr/bin/rsync -aPHz --delete ${filepath} root@$ip:${filepath} >>/var/log/rsync.log
else
echo "`date +%Y%m%d-%T`:${eventname} has occured and sysn the ${filepath}${file} file -> $ip" >>/var/log/rsync.lo
g
/usr/bin/rsync -aPHz --delete ${filepath}${file} root@$ip:${filepath}${file} >>/var/log/rsync.log
fi
done
done
其中:
src是源路径 des是目标路径 ip是目标机器的IP地址 --fromfile指定一个文件,这文件里是包括不需要同步和检测的目录,每行一个文件或目录,以@打头表示不需要同步的目录我文件如这里的:
# vi /root/shell/excludefile.lst
@/jongo/17buy/UPLOAD_HOME/
表示源机器上的/jongo/17buy/UPLOAD_HOME目录不需要同步。
五、 执行同步脚本
/root/shell/ inotify.sh &将这个脚本放到后台,让其一直运行。然后就可以实时同步文件了。