一、rsync简介

rsync是linux/unix系统下的文件同步和传输工具,采用rsync算法是一个客户机和远程文件服务器的文件同步;rsync可以再中断后恢复传输,只传输源文件和目标文件之间不一致的部分。

rsync的安装:

# tar xf rsync-3.0.9.tar.gz # cd rsync-3.0.9
#  ./configure 
# make && make install


二、rsync的应用模式
1、第一种shell应用模式,也成为本地模式
本地shell模式主要用户复制目录到另一个目录:

# rsync -av nagios /tmp 
# rsync -av nagios/ /tmp


-a:表示使用归档模式,并且保持文件属性
-v:表示输出详细信息

注意这里nagios后面的"/",如果加/的话表示不会复制目录本身,只复制目录中的内容

2、远程shell模式,它利用SSH执行底层连接和加密传输

# rsync -a nagios 192.168.163.143:/tmp root@192.168.163.143's password:


输入密码后就会复制过去了

3、查询模式,于ls命令实现的功能类似

# rsync -a 192.168.163.143:/tmp    //查看远程服务器的/tmp目录下的内容 # rsync -a /tmp //当然也可以查询本地的目录
# rsync --list-only root@192.168.56.101::    //列出定义的模块
www            	web bakup


4、服务器模式

服务器模式下,rsync在后台启用了一个守护进程,这个守护进程在rsync服务器端永久运行,用户接受文件传输请求。

客户端:192.168.164.144
备份服务器:192.168.163.143

安装就不说了,直接配置

(1)、配置192.168.163.144

建立配置文件,默认没有 
# vim  /etc/rsyncd.conf 
uid = nobody    //守护进程的
uid gid = nobody    //守护进程的
gid use chroot = no        // 
max connections = 10  //指定模块的最大并发连接数,默认是0 ,即没有限制 
strict modes = yes    //指定使用检查口令文件的权限,如果为yes,密码文件权限必须为root 
pid file = /var/run/rsyncd.pid    //pid文件路径 
lock file = /var/run/rsyncd.lock    //lock锁文件路径 
log file = /var/log/rsyncd.log    //日志文件路径 
 
[redhat]    //定义一个模块的模块名称 
path = /data    //指定需要备份的文件或目录 
comment = peace file    // 
ignore errors    //可以忽略一些无关的I/O错误 
read only = no    //表示客户端可以上传文件,yes表示为只读 
write only = no    //表示客户端可以下载文件,no表示不能下载 
hosts allow = 192.168.163.143    //设置可以连接的服务器的主机 
hosts deny = *    //设置禁止连接的服务器的主机,*表示所有 
list = false    //表示的当用户请求可以使用的模块列表是,是否列出,false表示隐藏 
uid = root 
gid = root 
auth users = backup    //定义连接模块的用户 
secrets file = /etc/server.pass    //指定连接的用户名密码文件


建立密码文件,默认没有

# cat /etc/server.pass backup:redhat123  
# chmod 600 /etc/server.pass


启动进程,ps查看

# rsync --daemon 
# ps -ef | grep rsync 
root      7976     1  0 18:35 ?        00:00:00 rsync --daemon


看下/data下的文件

# ls /data/ 
a.access.a  access  access.a  a.debug  a.test  debug.a  test.a


(2)配置192.168.163.143

# chmod 600 /etc/server.pass 
 
开始同步指令如下: 
# rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" backup@192.168.163.144::redhat /data --password-file=/etc/server.pass 
receiving file list ... 
4 files to consider 
created directory /data 
./                  
a.debug 
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/4) 
a.test 
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1/4) 
test.a 
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=0/4) 
 
sent 163 bytes  received 283 bytes  892.00 bytes/sec 
total size is 0  speedup is 0.00 
 
可以看到已经同步过来的3个文件 
 
-v:详细输出 
-z:传输时进行压缩 
-r:对子目录递归处理 
-t:保存文件时间信息 
-o:保存文件的属主 
-g:保持文件的属组 
-p:保持文件权限 
--delete:保持目录的一致性 
--progress:显示同步过程 
--exclude:排除不需要的文件 
backup@192.168.163.144::redhat:指定对144中的redhat模块以backup用户备份 
/data:备份到的目录 
--password-file:指定密码文件



5、以上就配置完毕了,可以加到计划任务中,但是没法实时的同步,所以就有了rsync+inotify的搭建了

服务器A:192.168.163.144(rsync)
服务器B:192.168.163.143(rsync+inotify)


rsync的安装就不介绍了,直接在143上面装inotify:

# tar xf inotify-tools-3.14.tar.gz 
# cd inotify-tools-3.14 
# ./configure && make && make install


之后143上写个脚本,如下:

# cat in.sh 
#!/bin/bash 
host1=192.168.163.144 
src=/data 
des1="redhat" 
user1="backup" 
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f'  -e modify,delete,create,attrib ${src} \ 
| while read  files 
do 
rsync -vzrtopg --delete --progress ${src}/ ${user1}@${host1}::${des1} --password-file=/etc/server.pass && 
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 
done 
 
# chmod 755 in.sh 
# /root/in.sh &


之后在/data下新建文件,144上就会同步过来,相比而言是实时的,不过当有大量文件的时候系统性能的问题可想而知了。