一、简介

rsyncRemote Synchronize)是Unix/linux系统下一个快速、非常灵活的的文件同步和复制工具,支持本地复制和远程复制与同步,rsync使用著名的三角传输(delta-transfer)算法,只同步源文件和目标中现有文件之间有差异的部分,并且可以保持原文件的权限、时间、软硬链接等属性,rsync工具广泛用于备份和镜像,且作为一种改进的复制命令。

Rsync默认情况下,需要使用“quick check”算法,仅同步对于大小或最后一次修改时间已更改的文件,其他的文件属性保存,在目标文件的属性没有任何更改前,通过“quick check”,表明该文件的数据并不需要更新。

Notersync描述参考与官方站点http://rsync.samba.org/ftp/rsync/rsync.html

11 rsync特性

a)可以镜像保存整个目录树和文件系统;

b)文件同步复制时,可以保持文件原有的属性;

c)并不需要超级用户的权限

d)快速:第一次同步时会复制全部内容,下一次同步时只传输文件属性被修改过的文件;

e)安全:可以使用scpssh等方式来传输文件,当然也可以通过直接的socket连接;

f)支持匿名传输,以方便进行网站镜像;

二、rsync服务的工作原理示意图

快速、灵活的文件同步/复制工具---rsync(基础篇)_第1张图片

Note

1、开发人员上传论坛、网站更新代码至测试服务器,并以邮件通知相关的负责人;

2、相关负责人员收到邮件后,共同测试更新代码是否正常;

3、测试结果若正常,则运维人员执行svn更新,否则返回(反馈测试结果);

4rsync通过‘quick check’算法检查到源文件与目标文件之间的属性差异,完成同步;

备注:此篇文档暂时利用crontab计划任务同步文件,后期会说到inotify+rsync

四、rsync服务的安装与配置

41 rsync文件同步架构明细

wKiom1NmXrfTKF-zAADdC72nUZY180.jpg


42 安装

# CentOS系统

[root@Rsync_Server ~]#rpm -qa | grep rsync                                    #查询rsync是否安装

rsync-3.0.6-9.el6.x86_64

[root@Rsync_Server ~]#yum install rsync                                           #安装rsync

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

c6-media| 4.0 kB00:00 ...

Setting up Install Process

Package rsync-3.0.6-9.el6.x86_64 already installed andlatest version

# Ubuntu系统

root@exiuxiu-web2:~# dpkg -l | grep rsync                                            #查询rsync是否安装

iirsync3.0.9-1ubuntu1fast,versatile, remote (and local) file-copying tool

root@exiuxiu-web2:~# apt-get install rsync

Reading package lists... Done

Building dependency tree

Reading state information... Done

rsync is already the newest version.

0 upgraded, 0 newly installed, 0 to remove and 116 notupgraded.    #安装rsync

43 实例演示

[root@Rsync_Server ~]#rsync -avzP files.bz2 /tmp/                                #本地复制

sending incremental file list

files.bz2

785100%0.00kB/s0:00:00 (xfer#1, to-check=0/1)

sent 863 bytesreceived 31 bytes1788.00bytes/sec

total size is 785speedup is 0.88

[root@Rsync_Server ~]# rsync -avzP files.bz2 [email protected]:/tmp    #远程复制

[email protected]'s password:

sending incremental file list

files.bz2

785100%0.00kB/s0:00:00 (xfer#1, to-check=0/1)

sent 863 bytesreceived 31 bytes198.67bytes/sec

total size is 785speedup is 0.8

44 配置

Note:安装Rsync软件之后,系统并不会自动生成服务的配置文件,需手动创建,步骤如下所示:

441 创建配置文件rsyncd.conf

[root@Rsync_Server ~]# vim /etc/rsyncd.conf

uid = root

gid = root

use = chroot no

max connections = 3000

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

[site]

path = /rsync/data

read only = false

ignore errors

list = true

hosts allow = 192.168.8.0/24

hosts deny = 0.0.0.0/24

auth users = rsync_nobody

secrets file = /etc/rsyncd.passwd


442 创建path指定的模块目录与验证文件

[root@Rsync_Server ~]# mkdir /rsync/data/-pv                                            #递归创建

[root@Rsync_Server ~]# touch/rsync/data/index.html

[root@Rsync_Server ~]# vim /etc/rsyncd.passwd

rsync_nobody:admin

##提示:

客户端同步时,需要提供的验证文件,命名规则【用户:密码】。

[root@Rsync_Server ~]# chmod 600 /etc/rsyncd.passwd

443 启动rsync服务进程

[root@Rsync_Server ~]# rsync –daemon                                                        #以守护进程的方式运行

[root@Rsync_Server ~]# netstat -lntp | grep rsync

tcp00 0.0.0.0:8730.0.0.0:*LISTEN43081/rsync

tcp00 :::873:::*LISTEN43081/rsync

5、客户端配置

[root@web1 ~]# vim /etc/rsyncd.passwd

admin

~

[root@web2 ~]# vim /etc/rsyncd.passwd

admin

~

6、验证

61拉取,即同步复制rsync server的文件至web1,web2

#客户端web1

[root@web1 ~]# rsync -avzP --delete --progress [email protected]::site/--password-file=/etc/rsyncd.passwd /rsync/data/                                                         #拉取

receiving incremental file list

./

index.html

45100%4.88kB/s 0:00:00 (xfer#1, to-check=0/2)

sent 78 bytesreceived 199 bytes554.00bytes/sec

total size is 45speedup is 0.16

[root@web1 ~]# tree /rsync/data/

/rsync/data/

¤¤ index.html

0 directories, 1 file


#客户端web2

[root@web2 ~]# rsync -avzP --delete --progress [email protected]::site/--password-file=/etc/rsyncd.passwd /rsync/data/                                                     #拉取

receiving incremental file list

./

index.html

45100%21.97kB/s0:00:00 (xfer#1, to-check=0/2)

sent 78 bytesreceived 199 bytes554.00bytes/sec

total size is 45speedup is 0.16

[root@web2 ~]# tree /rsync/data/

/rsync/data/

¤¤ index.html

0 directories, 1 file

62 推送,即同步复制web1web2的文件至rsync server

#客户端web1

[root@web1 data]#rsync -avzP --progress --password-file=/etc/rsyncd.passwd/rsync/data/ [email protected]::site/

sendingincremental file list

./

a

0 100%0.00kB/s0:00:00 (xfer#1, to-check=5/7)

b

0 100%0.00kB/s0:00:00 (xfer#2, to-check=4/7)

c

0 100%0.00kB/s0:00:00 (xfer#3, to-check=3/7)

d

0 100%0.00kB/s0:00:00 (xfer#4, to-check=2/7)

e

0 100%0.00kB/s0:00:00 (xfer#5, to-check=1/7)

f

0 100%0.00kB/s0:00:00 (xfer#6, to-check=0/7)

sent 299bytesreceived 125 bytes848.00 bytes/sec

total size is0speedup is 0.00


#客户端web2

[root@web2 ~]#rsync -avzP --progress --password-file=/etc/rsyncd.passwd/rsync/data/ [email protected]::site/

sending incrementalfile list

./

a

0 100%0.00kB/s0:00:00 (xfer#1, to-check=5/7)

b

0 100%0.00kB/s0:00:00 (xfer#2, to-check=4/7)

c

0 100%0.00kB/s0:00:00 (xfer#3, to-check=3/7)

d

0 100%0.00kB/s0:00:00 (xfer#4, to-check=2/7)

e

0 100%0.00kB/s0:00:00 (xfer#5, to-check=1/7)

f

0 100%0.00kB/s0:00:00 (xfer#6, to-check=0/7)

sent 281bytesreceived 125 bytes812.00 bytes/sec

total size is0speedup is 0.00

##提示:

rsync server端,配置文件rsyncd.conf中,uidgid指定的site模块传输文件时所用的用户身份,那么需要为用户授权,超级管理员除外。

7、通过crontab计划任务同步复制

#客户端web1

[root@web1 data]#crontab -e

# auto sync sitefile

* * * * * /usr/bin/rsync-avzP --delete --progress --password-file=/etc/[email protected]::site /rsync/data/ > /dev/null 2>&1

#客户端web2

[root@web2 ~]#crontab -e

#auto sync sitefile

* * * * * /usr/bin/rsync-avzP --delete --progress --password-file=/etc/[email protected]::site /rsync/data/ > /dev/null 2>&1


8、检测crontab计划任务是否成功执行

#客户端web1

快速、灵活的文件同步/复制工具---rsync(基础篇)_第2张图片

#客户端web2

快速、灵活的文件同步/复制工具---rsync(基础篇)_第3张图片

#备注:

通过crontabl计划任务同步文件,两端的数据有一分钟的时间差距,数据肯定不能完全一致,你自己可以编写脚本让程序一直运行,也可以通过inotify+rsync的方式实时同步文件,此篇文档若有不足之处,请大家评论出来,感谢。