一、rsync基本配置及介绍

1.什么是rsync?
      rsync(rsync  —  a  fast,  versatile(通用的), remote (and local) file-copying tool 
)一款开源的,快速的,多功能可实现全量及增量的本地或者远程数据同步备份的优秀工具可适用于多个操作系统之上。rsync具有可以使本地和远程两台主机之间的数据快速的同步和备份的用能。
2.rsync的特性  
1)支持拷贝特殊文件如连接文件设备等  
2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能 --exclude
3)可以实现增量同步,即只同步发生变化的数据,因此效率很高

3.rsync1.基本的命令行与常用选项

1)本地拷贝,命令行:    rsync [OPTION]... src [src]... dest

比如,把/etc/hosts/文件拷贝到/tmp目录下,其功能相当于cp 。
rsync命令是客户端命令    
rsync -avz(保持属性)   /etc/hosts   /tmp

2)本地删除,相当于rm命令,把/tmp目录里面的内容置换成空。

rsync -avz --delete /null/  /tmp  

3)远程拷贝rsync支持"本地->远程","远程->本地"双方拷贝,不支持"远程->远程"拷.rsync的网络功能通过两种方式:ssh服务和rsync --daemon服务.

push:把本地的/tmp拷贝到远端的:10.0.0.131:/tmp/

rsync -avzP -e 'ssh -p 22'  /tmp/  10.0.0.131:/tmp/
pull:把远端的10.0.0.131:/tmp拷贝到本地的/tmp/

rsync -avzP -e 'ssh -p 22' 10.0.0.131:/data/  /tmp


4.rsync服务端配置.

     rsync是一个C/S杂交体,它就一个程序即可以当客户端也可以当服务端用.--daemon一秒钟变身服务端. /etc/services文件里记录了rsync默认使用873号端口.当然像别的服务一样,rsync同样是需要配置文件的.rsync默认是找 /etc/rsyncd.conf.但是此目录是事先不存在的。 具体的格式大家可以man一下rysncd.conf,里面有详细的介绍.其实就跟samba这种比较类似,下面是一个简单的rsyncd.conf:

#指定访问用户

uid = rsync

#指定访问组

gid = rsync

#禁止chroot(不可连接后切换用户) 

use chroot = no  

#允许访问目录列表

list = false

#最大的连接数

max connections = 2000      

#超时时间

timeout=600

#存放进程号文件的路径

pid file = /var/run/rsyncd.pid 

#存放日志文件的路径

log file = /var/log/rsyncd.log 

#允许访问rsync 服务的地址范围

hosts allow = 10.0.0.0/24

#拒绝访问的rsync服务的地址范围

hosts deny = 0.0.0.0/32

#标识为不可读

read only = false

#虚拟用户文件

auth users=rsync_backup

#密码文件

secrets file=/etc/rsync.password

##########################

#此为开放的tag:

[data]

#备份路径

path = /data

#注释信息

comment =write by chen

[backup]

#备份路径

path = /backup


######################################

#Rsync server
#created by chen 2016.4.22 20:31
##rsyncd.conf start##
uid=rsync
gid=rsync
use chroot=no
max connections=2000
timeout=600
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
ignore errors
read only=false
list=false
hosts allow=10.0.0.0/24
hosts deny=0.0.0.0/32
auth users=rsync_backup
secrets file=/etc/rsync.password
########################################
[backup]
comment=backup server by chen 20:36 2016.04.22
path=/backup [备份路径]
###########end##########################

完成上面配置后即可启动rsync服务:rsync --daemon

5.查看服务是否启动命令

[root@backup ~]# ps -ef|grep rsync
root      2833     1  0 20:53 ?        00:00:00 rsync --daemon
root      2835  2642  0 20:53 pts/0    00:00:00 grep --color=auto rsync
[root@backup ~]# netstat -tunpl |grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2833/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      2833/rsync          
[root@backup ~]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   2833 root    3u  IPv4  16376      0t0  TCP *:rsync (LISTEN)
rsync   2833 root    5u  IPv6  16377      0t0  TCP *:rsync (LISTEN)
[root@backup ~]#


6.创建用户、备份目录和授权以及配置密码

useradd rysnc -s /sbin/nologin/ -M

id rysnc

mkdir /backup

chown  -R rsync.rsync /backup/

echo "rsync_backup:chen">/etc/rsync.password

chmod 600 /etc/rsync.password


7.客服端配置

echo "chen">/etc/rsync.password

chmod 600 /etc/rsync.password

完成上面所有步骤后即可实现本地和远端及其远端到本地的文件及目录数据备份

无差异同步:
rsync -avz --delete rsync_backup@10.0.0.139::backup /tmp/ --password-file=/etc/rsync.password  ----操作此命令时需要备份本地数据  

rsync排除某个文件:
排除单个文件
rsync -avz --exclude=/tmp/a /tmp/ rsync_backup@10.0.0.139::backup --password-file=/etc/rsync.password
排除多个文件
rsync -avz --exclude={2,4,5,6}}a /tmp/ rsync_backup@10.0.0.139::backup --password-file=/etc/rsync.password


rsync的优点:
1.增量备份同步,支持socket(daemon),集中备份
rsync的缺点:
1.大量小文件同步时,时间比较长。
2.同步文件比较大,10G这样的大文件有时候会出现问题,中断。未完成同步前,是影藏文件,传输完成则正常显示

rsync缺点:
1.大量小文件同步的时候,对比时间较长,有的时候,rsync进程停止。解决:a.将小文件打包后同步 b.drbd(文件系统同步)
2.同步大文件,10G这样的大文件有时候也会有问题,中断。未完整同步前,是影藏文件,同步完成改为正常文件。


二、rsync服务常见问题总结


问题一:

@ERROR: chroot failed

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

问题二:

@ERROR: auth failed on module tee

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。

问题三:

@ERROR: Unknown module ‘tee_nonexists’

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题四:

password file must not be other-accessible

continuing without password file

Password:

原因:

这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五:

rsync: failed to connect to 218.107.243.2: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]

原因:

对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。

问题六:

rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]

原因:

/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七:

rsync: chown "" failed: Invalid argument (22)

原因:

权限无法复制。去掉同步权限的参数即可。