导航菜单

rsync 原理、安装部署

陆兴东 2026-04-14 259 浏览 其他

一、什么是Rsync

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配 置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。

 

Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。

Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

 

二、Rsync同步算法

Rsync之所以同步文件的速度相当快,是因为“Rsync同步算法”能在很短的时间内计算出需要备份的数据,关于Rsync的同步算法描述如下:

假定在1号和2号两台计算机之间同步相似的文件A与B,其中1号对文件A拥有访问权,2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:

1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S 小。

2、2号对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验

3、2号将这些校验结果发给1号。

4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

5、1号发给2号一串指令来生成文件A在2号上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。

 

三、Rsync安装

Rsync既然是一个远程数据同步工具,那么就需要两个计算机来完成这些工作:一台计算机上存储着需要同步的数据,另一台计算机上接收数据。这里我们将这两台计算机命名:一个为服务器,一个为客户端。我们就需要在服务器和客户端上分别安装Rsync。

CentOS 7 Rsync服务端:192.168.204.130
CentOS 7 Rsync客户端:192.168.204.168

 

Rsync官网下载地址:

http://rsync.samba.org/

 

四、 rsync同步方式

第一种方式:rsync通过ssh方式同步

1、Rsync服务端和客户端都需要安装rsync

[root@localhost ~]# yum -y install rsync

2、使用

前提:需知道远程服务器开启ssh端口和账号密码

A、推文件: 

[root@localhost tmp]# rsync -av /etc/passwd  192.168.204.168:/tmp/passwd.txt

image.png

B、拉文件

[root@localhost tmp]# rsync -av  192.168.204.168:/tmp/passwd.txt 
 /tmp/test.txt

image.png

#指定ssh端口 

[root@localhost tmp]# rsync -av -e "ssh -p 
22"192.168.204.168:/tmp/passwd.txt  /tmp/a.txt

image.png

第二种方式:rsync通过服务的方式同步

服务端配置:

1、编辑配置文件/etc/rsyncd.conf

motd file = /etc/rsyncd.motd 
transfer logging = yes 
log file = /var/log/rsyncd.log 
port = 873
address = 192.168.204.130
uid = nobody 
gid = nobody 
use chroot = no 
read only = no 
max connections = 10
[common] 
comment = rsync 
info path = /tmp 
ignore errors 
auth users = admin 
secrets file = /etc/rsyncd.secrets 
hosts allow = 192.168.204.0/255.255.255.0
hosts deny = *
list = false

 

2、创建用户密码文件

echo "admin:123456" > /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets

3、创建提示信息文件:

 echo  "rsync  info"  >  /etc/rsyncd.motd

4、启动服务:

rsync  --daemon echo  "rsync  --daemon"  >>  /etc/rc.local

客户端配置:

创建密码文件(免密码输入):

echo  "123456"  >  /root/passwd chmod  600  /root/passwd

拉取:

rsync -avz --password-file=/root/passwd  admin@192.168.204.130::common /tmp 

image.png

推送:

rsync -avz --password-file=/root/passwd /tmp/ admin@192.168.204.130::common

image.png

定时任务:

1、新建一个rsync.sh文件,在文件中写入执行同步的命令:

rsync -avz --password-file=/root/passwd  admin@192.168.204.130::common /tmp  >/dev/null2>&1chmod 755  rsync.sh

2、执行命令:crontab -e

  在定时文件中写入定时执行任务,实例如下:        
* * * * * /home/rsync.sh                 每分钟执行一次同步脚本;         
0 * * * * /home/rsync.sh                 每小时执行一次同步脚本;         
0 0 * * * /home/rsync.sh                 每天零点执行一次同步脚本;          
0 9,18 * * * /home/rsync.sh            每天的9AM和6PM执行一次同步脚本; 

 

TIPS:匿名访问测试

列举整个同步目录或指定目录: 
rsync 10.0.0.12 :: 
rsync 10.0.0.12 :: www /
下载文件或目录到本地: 
rsync – avz 10.0.0.12 :: WWW/  /var/tmp 
rsync – avz 10.0.0.12 :: www/  /var/tmp  
上传本地文件到服务端: 
rsync -avz webshell 10.0.0.12 :: WWW /