Rsync数据复制软件应用实践
一、Rsync服务概念特性介绍
1. Rsync介绍
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制或远程守护进程方式复制。它提供了大量参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。
2. Rsync服务命令在应用时,属于一个非常强大的命令,可以通过rsync一个命令替换下面4个命令的操作:
1)实现本地数据同步复制(等价命令cp)
2)实现远程数据同步复制(等价命令scp)
3)实现数据信息删除功能(等价命令rm)
4)实现数据信息查看功能(等价命令ls)
3. rsync服务命令简单应用(1v4的应用效果)
1) rsync == cp
2) rsync == scp
说明:同步数据时,/tmp/目录后有/信息,表示将目录下面的数据内容进行备份同步
同步数据时,/tmp目录后没有/信息,表示将目录及目录下面的数据内容进行备份同步
3) rsync == rm
说明:rsync实现删除目录中数据内容过程,就将一个空目录和一个有数据的目录进行同步,最终会将有数据的目录中的文件进行清空
4)rsync == ls
4. Rsync备份软件7大特性总结:
1).支持拷贝普通文件与特殊文件如链接文件,设备等
2).支持排除指定文件或目录同步的功能,类似tar命令排除功能
3).支持保持原文件或目录的所有属性信息不变
4).支持增量同步,既只同步变化数据,提升数据传输效率
5).支持使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件
6).支持使用通过socket(守护进程方式)传输文件或目录数据信息
7).支持用户认证方式传输数据,提升数据同步安全性
5. Rsync软件复制原理
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统cp,scp拷贝工具的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。
二、数据传输rsync命令参数说明
三、Rsync服务工作方式介绍
Rsync有3种传输数据模式:
1. 本地数据传输模式
类似于cp本地复制命令,可以实现文件、目录的移动备份等功能,所不同的是Rsync有增量复制功能
本地模式命令语法格式说明:
rsync [OPTION...] SRC... [DEST]
rsync --- 数据备份传输命令
option --- 可以输入一下和rsync传输数据有关的参数
src --- 要进行备份的数据(文件/目录)
dest --- 将数据信息备份到什么位置(相应路径中)
注:复制目录需要添加-r参数
2. 远程shell数据传输模式
一般是借助通道(如SSH)在两台服务器之间进行复制数据,这两台服务器之间是对等的,没有客户端和服务端之分,整个过程类似于scp复制命令,所不同的是Rsync有增量复制功能,但缺少scp的加密复制功能。
远程shell数据传输模式分为拉取和推送两种模式,拉取是指从远端服务器把数据拉取到本地服务器;推送是指把数据从本地服务器推送到远端服务器。
拉取(pull)
rsync option [USER@]HOST:SRC DEST
推送(push)
rsync option SRC [USER@]HOST:DEST
如:近端服务器ip:172.16.1.200,远端服务器ip:172.16.1.41
3. 守护进程传输模式
守护进程传输模式是在客户端与服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制。
1) 守护进程传输模式语法:
拉取语法格式:
rsync [option] [USER@]HOST::SRC DEST
[USER@]HOST:: ------指定远程连接的认证用户
SRC ------- 指定相应的模块信息
[DEST] ----- 将远程数据保存到本地的路径信息
推送语法格式:
rsync [option] SRC [USER@]HOST::DEST
SRC ------ 指定本地要进行推送的数据信息
[USER@]HOST:: ------ 指定远程连接的认证用户
[DEST] ----- 远程进行保存数据的模块信息
2)Rsync守护进程模式部署
采用守护进程传输模式进行实际复制传输数据,必须额外部署Rsync Daemon 服务。
(1)Rsync服务端部署流程
第一步:确认软件是否安装,若未安装进行软件安装
第二步:进行软件服务配置文件编写
vim /etc/rsyncd.conf
第三步:创建备份目录管理用户
第四步:创建备份目录,并进行授权
第五步:创建认证用户授权密码文件,并对密码文件进行授权
第六步:启动程序服务
(2)Rsync服务配置文件参数详细说明
(3)Rsync客户端部署流程
第一步:确认软件是否安装,若未安装进行软件安装
第二步:创建认证用户授权密码文件,并对密码文件进行授权
第三步:进行数据备份传输测试
四、Rsync服务常见错误分析
排错必备思想:查看日志文件 more /var/log/rsyncd.log
1. Rsync服务端排错思路:
1)查看rsync服务配置文件路径是否正确 /etc/rsyncd.conf
2)查看配置文件例的host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段
3)查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UUID参数对应的属主和组)
4)查看rsync服务是否启动,端口是否存在 ps -ef netstat -lntup
5)查看iptables防火墙和SELinux是否开启允许rsync服务通过,也可以关闭
6)查看服务端rsync配置文件里的密码权限是否为600 密码文件格式是否正确,正确格式(用户名:密码)文件路径和配置文件里的secrect files 参数对应
7)如果是推送数据,要查看,配置rsyncd.conf 文件中用户是否对模块下目录有可读的权限
2. Rsync客户端排错思路:
1)查看客户端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务端的密码一致
2)用telnet链接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻挡telnet172.16.1.41 873)
3)客户端执行命令时,语法格式书写不正确。若客户端执行命令是 rsync -avzP rsync_backup@172.16.1.41::backup/test/test/ --password-file=/etc/rsync.password 此命令要记清楚尤其172.16.1.41::backup/test/处的双引号及随后的backup为模块名称。
3. 常见报错:
1)客户端报错:No route to host
错误代码:
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
解决办法:
原因:可能被防火墙阻挡了
解决:关闭rsync服务端的防火墙服务
2)rsync客户端执行rsync命令错误
错误代码:
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
解决办法:
原因:rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
解决:执行正确的rsync命令:rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
3)rsync服务认证用户失败
错误代码:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
排查思路:
a. 密码真的输入错误,用户名真的错误
b. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
c. /etc/rsync.password文件权限不是600
d. rsync_backup:123456密码配置文件后面注意不要有空格
e. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
4)rsync服务位置模块错误
错误代码:
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
排查解决思路:
检查/etc/rsyncd.conf配置文件模块名称书写是否错误
5)rsync服务权限阻止问题
错误代码:
rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)
sent 196 bytes received 27 bytes 63.71 bytes/sec
total size is 349 speedup is 1.57
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
排查解决办法:
a.备份目录的属主和属组不正确,不是rsync
b.备份目录的权限不正确,不是755
c. CentOS 7服务端配置文件按CentOS 6的配置文件配置报错。(解决办法:CentOS7服务端/etc/rsyncd.conf中添加fake super = yes参数,CentOS 6不用)
6)rsync服务备份目录异常
错误代码:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
定位原因:
a. 备份存储目录没有建立
b. 建立的备份存储目录和配置文件定义不一致
解决办法:
创建备份存储目录,并对其进行授权即可
7)rsync服务无效用户信息
错误代码:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
定位原因:
rsync服务对应rsync虚拟用户不存在了
8)客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
错误代码:
password file must not be other-accessible
continuing without password file
Password:
定位原因:
rsync客户端的秘钥文件也必须是600权限
9)rsync客户端连接慢问题
错误日志:
2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.41: Name or service not known
2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.41)
2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.41)
2017/03/08 20:14:43 [3422] receiving file list
2017/03/08 20:14:43 [3422] sent 76 bytes received 83 bytes total size 349
定位思路:
查看日志进行分析,编写rsync服务端hosts解析文件
10)rsync服务没有正确启动
错误代码:
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
定位解决办法:
查看rsync服务是否开启
五、Rsync服务扩展应用实践
1. 守护进程多模块功能配置
第一步:修改rsyncd.conf配置实现多模块配置
第二步:建立目录并授权
第三步:重启rsync服务(只要修改配置文件,就必须重新加载服务)
第四步:客户端访问测试
第五步:服务端查看
2. 守护进程的排除功能实践
第一步、准备工作(在服务端上操作)
第二步、方法一:在客户端加命令行实现(同步数据,排除a、c目录(包括内部文件)及b目录下的2文件,其他同步)
方法二:使用--exclude-from=file实现
方法三:在服务端配置rsyncd.conf参数实现(注:排除的文件、目录之间用空格隔开,所有的目录及文件为相对于模块目录,不推荐使用)
第三步、在客户端查看同步的数据
3. 守护进程来创建备份目录
4. 守护进程的访问控制配置
三种情况:
1). 只有白名单,白名单网段或主机信息允许。其余阻止
2). 只有黑名单,黑名单网段或主机信息阻止,其余允许
3). 有黑名单也要白名单,白名单网段或主机信息允许,黑名单网段或主机信息阻止,其余允许
建议只选择前两种方式配置,即仅采用一种安全策略进行配置,不要白名单和黑名单两个参数同时设置。
5. 守护进程无差异同步配置
要实现这种同步方式就要使用Rsync的--delete参数。所谓无差异复制,就是不管是拉取还是推送,都要保持两边的数据完全一致。
这个命令非常危险,使用不当就会造成本地目录及文件,甚至是根目录数据丢失。
说明:一定要谨慎使用,否则可能会清空备份目录
6. 守护进程的列表功能配置
list = false
说明:表示是否列表显示rsync服务端所有模块信息
在/etc/rsyncd.conf配置文件中,将list = false修改为list = true后,重启rsync服务,在客户端即可查看到服务端的模块列表
六、Rsync备份服务知识点总结
七、Rsync企业级全网备份项目案例实践
1、项目需求说明
有一台NFS服务器,里面的数据很重要,要求把这些数据进行备份。每天晚上00点整在web服务器A上打包备份系统配置文件、网站程序目录及访问日志,并通过Rsync命令推送到服务器B上备份保留。
具体备份要求:
1)所有服务器的备份目录必须都为/backup;
2)NFS服务器站点目录假定为(/var/www/html);
3)NFS服务器脚本目录假定为(/server/scripts);
4)NFS服务器站点日志目录假定为(/app/logs);
5)NFS服务器个人配置文件目录路径(/etc/rc.d/rc.local);
6)NFS服务器定时任务文件路径为(/var/spool/cron/root);
7)将以上文件或目录打包(2-6条所示)推送到备份服务器backup ;
8)NFS服务器本地仅保留7天内的备份;
9)备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱;
10)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。
2、项目实战部署
1)服务器创建
初始化2台服务器并将其作为全网备份方案测试服务器,2台服务器基本规划信息如下:
2)服务器部署
a. 搭建备份服务器
rsync服务器搭建部署
开发脚本实现校验、删除、报警
配置实时任务每天6点实时执行
b. NFS服务器搭建部署
验证Rsync服务能否推送成功
开发脚本实现打包备份、推送、校验、删除
配置定时任务每天0点定时推送
3) 实践步骤
第一步:在BACKUP上部署Rsync服务,并在nfs01客户端上测试推送成功。
第二步:客户端本地开发脚本
NFS 服务器本地打包备份脚本实现
待备份的信息:/var/www/html,/app/logs
/server/scripts,/etc/rc.d/rc.local,/var/spool/cron/root
编写脚本前,需要进行NFS目录与日志目录的创建,以及创建模拟数据
测试备份脚本是否能正常运行
在服务端是否有数据备份
第三步:配置定时任务
a. 在客户端编辑定时任务,实现每天00:00定时备份本地数据,并推送到备份服务器上
b. 备份服务器上,也保留最近7天的所有备份数据,保留180天内每周六的所有数据副本。
c. 在服务端配置定时任务,实现服务端数据的删除
第四步:数据传输完整性验证与监控警告
确保备份数据尽量完整准确,在备份服务器上对备份数据进行检查,把备份成功及失败的结果信息发送给系统管理员邮箱中。
服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程的完成性验证
编写脚本完成
注:
- md5校验
-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致,则返回OK,否则返回错误信息。
运行脚本:bash /server/scripts/send_mail.sh
配置定时任务,每天检查备份结果,并将此结果发送至管理员邮箱
第五步:配置mail使用外部SMTP发邮件
修改配置文件/etc/mail.rc,在最后一行添加如下内容(如163的邮箱)
set from=test@163.com smtp=smtp.163.com smtp-auth-user=test smtp-auth-password=xxxxxx smtp-auth=login
各个参数的含义说明:
from:服务器外发邮件的邮件地址,通过注册163邮箱获得
smtp:发生的外部SMTP服务器的地址,需要使用相应的SMTP地址
smtp-auth-user:外部SMTP服务器认证的用户名,注册时的用户名
smtp-auth-password:外部SMTP服务器认证的用户密码(注意是授权码)
smtp-auth:邮件认证的方式
例如:配置信息如下
表明邮件发送成功!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏