rsync和inotify安装部署及文件实时同步实战

2799阅读 0评论2012-10-10 fengzhanhai
分类:LINUX

rsync是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能

一、服务端

1.获取相关rpm

yum install --downloadonly --downloaddir=/rsync rsync   #远程镜像rpm

yum install --downloadonly --downloaddir=/rsync xinetd  #守护进程

2.验证是否安装了rysnc程序包 rpm –qa|grep rsync

3.删除并安装最新rysnc程序包 rpm –e  `rpm –qa|grep rsync`  rpm –ivh 安装包

4.创建公钥并远程拷贝到相应的主机上

ssh-keygen -t rsa

scp /root/.ssh/id_rsa.pub  #拷贝公钥到相应目标主机之上

5.验证目标主机是否可以正常登陆ssh ip (一般情况下是正常的)

6.获取wget inotify介质

7.在服务端安装inotify rpm –ivh inotify-tools-3.14-1.el5.i386.rpm介质

8.测试镜像工具的可用性功能rsync  -aSvH /home/

# a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
#S
有效的处理零散文件
#v verbose
模式
#H
保持hard links

9.配置安装xinetdrsync的启动管理进程

10.分别在每个服务器上的xinetd配置项中允许xinetd(超级守护进程)管理rsync服务

cd /etc/xinetd.d

vi rsync修改内容如下所示:

service rsync
{
disable = yes
修改为disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID

……………………………………….

}

11.服务端的详细设置

a)编写服务器端脚本

#add by fengzhanhai

#it used by startup rsync

nohup /root/mon/rsync.sh &

[root@mysql1 mon]# cat rsync.sh

#create by fengzh

#it used by monitor file

#create by fengzh

#!/bin/bash

src=/webapp/tomcat6/webapps/MMS/uploadFile/

des=/webapp/tomcat6/webapps/sdmp/uploadFile/

#des=uploadFile

host="10.0.211.2 10.0.211.3"

#host="ip1 ip2 ip3"

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \

-e modify,delete,create,attrib $src | while read file;

do

for ip in $host

do

rsync -vzrtopg --delete --progress $src root@$ip:$des 2>&1>/dev/null

#rsync -aSvH --delete $src root@$ip:$des

done

echo "${file} was rsynced on `date`">>/etc/mon/mon.log

done

b)启动脚本

#add by fengzhanhai

#it used by startup rsync

nohup /root/mon/rsync.sh &

二、客户端参数设置

12.客户端参数设置

a)touch 一个rsyncd.conf文件 etc目录下

b)添加如下内容:

uid=root

gid=root

use chroot=no

max connections=5

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsync.lock

log file=/var/log/rsyncd.log

[sdtv]

path=/mnt/sdtv/

comment=update

ignore errors

read only=no

list=no

hosts allow=192.168.202.0/255.255.255.0

auth users=root

uid=root

gid=root

13.开机自启动

#echo "rsync --daemon" >> /etc/rc.local #开机自启动

#chkconfig rsync on

14.启动远程镜像 参见13步骤。

三、视野拓展

生产SSH KEY(目的是为了自动实时同步时候不需要输入密码): ssh-keygen -t rsa 这个命令生成一个密钥对:id_rsa(私钥文件)和id_rsa.pub(公钥文件)。默认被保存在/root/.ssh/目录下。注:在生成密钥对会提示输入密码,若什么都不输入直接回车,则表示没有密码,所以我们这里直接回车。

# scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/

# cat /root/.ssh/id_rsa.pub >> authorized_keys

#/etc/init.d/sshd restart 编写脚本 vim /usr/local/inotify/rsync.sh #!/bin/sh   srcdir="/home"

# scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/ # cat /root/.ssh/id_rsa.pub >> authorized_keys

#/etc/init.d/sshd restart

编写脚本 vim /usr/local/inotify/rsync.sh

 #!/bin/sh  

srcdir="/home"

ip="192.168.1.128 10.10.50.141"  #多台服务器可以自己添加IP  

dstdir="/home"  /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${srcdir} \   |

while read file

do

for i in $ip               

do                      

rsync -aqztH --delete --progress ${srcdir} root@${i}:${dstdir}                  

echo "${src} was rsynced"        

#echo "-----------------------------------------------------"    

done  

done

要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径.

脚本相关注解:
m 是保持一直监听
r 是递归查看目录
q 是打印出事件~
e create,move,delete,modify
监听 创建 移动 删除 写入 事件
rsync -aHqzt $SRC $DST
-a
存档模式
-H
保存硬连接
-q
制止非错误信息
-z
压缩文件数据在传输
-t
维护修改时间
-delete
删除于多余文件

.

上一篇:如何对大于2T空间的磁盘进行分区
下一篇:nginx+keepalived