1.1 什么是rsync?
rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输。rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH伺服文件。SSH情况下,rsync客户端运行程序必须同时在本地和远程机器上安装。

2.1 rsync的安装
每个镜像服务器(需要同步的服务器)都需要安装rsync守护进程。

一般发行版都带有rsync,因此我这里直接使用yum安装。当然在很多发行版上默认已经安装了rsync。

# rpm -qa | grep rsync #确认是否已经安装rsync 

rsync-3.0.6-4.el5_7.1 

# rpm -ql rsync 

/etc/xinetd.d/rsync 

/usr/bin/rsync 

/usr/share/doc/rsync-3.0.6 

/usr/share/doc/rsync-3.0.6/COPYING 

/usr/share/doc/rsync-3.0.6/NEWS 

/usr/share/doc/rsync-3.0.6/OLDNEWS 

/usr/share/doc/rsync-3.0.6/README 

/usr/share/doc/rsync-3.0.6/support 

/usr/share/doc/rsync-3.0.6/support/Makefile 

/usr/share/doc/rsync-3.0.6/support/atomic-rsync 

/usr/share/doc/rsync-3.0.6/support/cvs2includes 

/usr/share/doc/rsync-3.0.6/support/deny-rsync 

/usr/share/doc/rsync-3.0.6/support/file-attr-restore 

/usr/share/doc/rsync-3.0.6/support/files-to-excludes 

/usr/share/doc/rsync-3.0.6/support/git-set-file-times 

/usr/share/doc/rsync-3.0.6/support/logfilter 

/usr/share/doc/rsync-3.0.6/support/lsh 

/usr/share/doc/rsync-3.0.6/support/mnt-excl 

/usr/share/doc/rsync-3.0.6/support/munge-symlinks 

/usr/share/doc/rsync-3.0.6/support/rrsync 

/usr/share/doc/rsync-3.0.6/support/rsyncstats 

/usr/share/doc/rsync-3.0.6/support/savetransfer.c 

/usr/share/doc/rsync-3.0.6/tech_report.tex 

/usr/share/man/man1/rsync.1.gz 

/usr/share/man/man5/rsyncd.conf.5.gz


# yum install rsync #如果你电脑没有安装,可以使用YUM直接安装。
rsync是由超级守护进程xinetd来启动的。因此需要启动xinetd服务。
2.2 配置rsync服务器
rsync服务器主要有三个配置文件:rsyncd.conf,rsyncd.secrets和rsyncd.motd,而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建:

# mkdir /etc/rsyncd #创建配置目录 

# touch /etc/rsyncd/rsyncd.conf #创建主配置文件 

# touch /etc/rsyncd/rsyncd.secrets #创建用户密码文件 

# chmod 600 /etc/rsyncd/rsyncd.secrets #修改用户密码文件权限 

# touch /etc/rsyncd/rsyncd.motd #创建定义服务信息的文件



编辑主配置文件:

# vim /etc/rsyncd/rsyncd.conf 

# Minimal configuration file for rsync daemon 

# See rsync(1) and rsyncd.conf(5) man pages for help 

# This line is required by the /etc/init.d/rsyncd script 

pid file = /var/run/rsyncd.pid 

port = 873 ##监听端口 

address = 192.168.1.1 ##监听地址 

#uid = nobody 

#gid = nobody 

uid = root 

gid = root 

use chroot = yes ##是否限制在指定目录,为了安装,一般需要启用 

read only = no 

#limit access to private LANs 

hosts allow=192.168.1.0/255.255.255.0 ##允许网段 

hosts deny=* 

max connections = 5 

motd file = /etc/rsyncd/rsyncd.motd 

#This will give you a separate log file 

#log file = /var/log/rsync.log 

#This will log every file transferred - up to 85,000+ per user, per sync 

#transfer logging = yes 

log format = %t %a %m %f %b 

syslog facility = local3 

timeout = 300 

##定义一个同步目录 

[webhome] 

path = /var/www/html 

list=yes 

ignore errors 

auth users = apache 

secrets file = /etc/rsyncd/rsyncd.secrets ##指定上述账号密码文件 

comment = web home 

exclude = data/ ##排除目录




编辑/etc/rsyncd/rsyncd.secrets文件:
#Account and password
apache:password123
注意:这里账号虽然用的是系统账号,但是密码是自定义的密码。

启动使rsync生效:
# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

设置为开机启动:
# echo "/usr/bin/rsync --deamon --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.d/rc.local

Tip:这里的启动方式比较特殊,如果你要重启,需要kill掉rsync的进程,再重新运行!
另外还有另外一种启动rsync的方式,CentOS 默认以 xinetd 方式运行 rsync 服务。rsync 的 xinetd 配置文件在 /etc/xinetd.d/rsync
要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:

# chkconfig rsync on 

# vim /etc/xinetd.d/rsync 

# default: off 

# description: The rsync server is a good addition to an ftp server, as it \ 

# allows crc checksumming etc. 

service rsync 

{ 

 disable = no 

 socket_type = stream 

 wait = no 

 user = root 

 server = /usr/bin/rsync 

 server_args = --daemon --config=/etc/rsyncd/rsyncd.conf #这里添加rsync的服务选项! 

 log_on_failure += USERID 

} 

# service xinetd restart



2.3 使用rsync客户端实现数据同步
客户端安装同上,额外只需配置一个密码文件,具体如下:


# mkdir /etc/rsyncd 

# echo "password123" > /etc/rsyncd/rsyncd.password #创建密码文件,密码为服务器端rsyncd.secrets文件中的密码。 

# chmod 600 /etc/rsyncd/rsyncd.password 

同步: 

# rsync -avzP --password-file=/etc/rsyncd/rsyncd.password apache@192.168.1.1::webhome /var/www/html/ 

#后面跟同步到本地的路径 


receiving incremental file list 

./ 

test 

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



sent 81 bytes received 147 bytes 456.00 bytes/sec 

total size is 0 speedup is 0.00




说明:
--delete:本地与服务器完全一样,如果本地存在不一样的,则删除,慎用

--password-file:指定密码文件,如果不指定,则需手动输入

-a :参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z :传输时压缩;
-P :传输进度;
-v :传输时的进度等信息

apache@IP ::webhome 用双冒号引用主配置文件中的定义资源,也可以使用单引号跟绝对路径

以后同步时,只会同步新增内容。

最后将上述命令加入计划任务定时同步即可。