Rsync是一款开源的、快速的、多功能的、可实现增量的本地或远程数据镜像同步备份优秀工具.rsync适用于unix/linux/windows等多种平台.
官方的英文简单描述:rsync-a fast,versatile,remote(and locale)file-copying tool
1.1.2rsync简介Rsync是一款优秀的、快速的、多功能的本地或远程数据镜像同步备份工具.适用于unix/linux/windows等多种平台.
从软件的名称rsync(remote rynchronization)可以看出来,rsync具有可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步镜像,远程备份等功能.
在同步备份时,默认情况下,rsync通过其独特的”quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要指定参数),甚至是只同步一个文件里有变化的内容部分,所以,可实现快速的同步 数据的功能.
提示:传统的cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整拷贝,还具备增量拷贝的功能,因此,从性能及效率上更胜一筹.
1.1.3rsync的特性Rsync的特性如下:
●支持拷贝特殊文件如链接,设备等
●可以有排除指定文件或目录同步的功能, 相当于打包命名tar
●可以做到保持原来文件或目录的权限、时间、软硬链接等所有属性均不改变.
●可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高.
●可以使用rcp,rsh,ssh等方式来配合传输文件,也可以通过直接的socket连接.
●支持匿名的或认证的进程模式传输,方便进行数据备份或镜像.
2.1rsync工作方式为了方便读者学习,根据使用的经验,从实际的使用功能上进行了一下划分,一般来说,rsync大致使用三种主要的方法来传输数据.分别是:1.本地数据传输;2.通过rcp,ssh等通道传输;3.以守护进程的方式传输数据.下面我们分别来加以说明.
2.1.1本地数据传输(local-only mode)Rsync本地传输的语法为:
Rsync[option…] src…[dest]
语法说明:
- rsync为同步命令2) [option…]为同步时的参数选项;3)src为源,即待拷的分区,文件或目录等;
4) [dest]为目的分区、文件或目录等;
Rsync –avz /opt/ /tmp 同步文件,chmod –R 700 wj 查看下同步过去文件属性是否改变
上例演示了将本地/opt目录下的文件(不包含opt本身)同步到/tmp下,其中-avz就是保持目录或文件的相关属性的参数.
特别提示,请注意以下两种命令的差别:
1)rsync –avz /opt/ /tmp/ 2)rsync -avz /opt /tmp/
1)中/opt/意思是,仅把/opt/目录里面的内容同步过来,opt目录本身并不同步;而后者2)中/opt表示把opt本身及其内部内容全都同步到/tmp下,仅一个/(斜线之差),意义就大不相同,请读者注意使用的差别.
2)在下面的通过远程 shell进行数据传输的内容也会有类似的问题.
当本地的不同目录之间需要数据传输,特别是经常需要增量传输时,这个命令可以替代cp等命令,为你提升拷贝的效率.
2.1.2通过远程shell进行数据传输(remote shell mode)通过远程shell(rcp、ssh等)传输可以分两种情况,其语法分别为
拉取pull:rsync[option][user@]HOST:SRC…[DEST]
推送push:rsync[option]SRC…[USER@]HOST:DEST
语法说明:
- Rsync为同步的命令;
- [OPTION]为同步时的参数选项;
- [USER@]HOST…为rsync同步的远程的连接用户和主机地址
- Src为源,即待拷的分区、文件或目录等,和host之间用一个冒号连接;
- [DEST]为目的分区、文件或目录等;
其中拉取(get),表示从远端主机把数据同步到执行命令的本地主机相应目录;推送(put)表示从本地主机执行命令把本地的数据同步到远端主机指定目录下.
拉取实例:
Rsync –vzrtopg –progress –e ‘ssh –p 22’ wj@10.0.0.1:/opt /tmp
关键语法说明:
1)-vzrtopg相当于上文的-avz,表示同步时文件和目录属性不变.参数细节见后文.
2)—progress显示同步的过程,可以用-P替换.
3)-e ‘ssh –p 22’,表示通过ssh的通道传输数据,-p 22可省略.
4) wj@10.0.0.1:/opt远程的主机用户,地址,路径.
5)/tmp本地的路径
推送实例:
Rsync –vzrtop –progress -e ‘ssh -p 22’ /etc wj@10.0.0.1:/tmp
通过root用户把本地的/tmp目录(不包括目录本身)推送到10.0.0.1的/opt目录
特殊说明:
- 上文的数据同步都是加密传输的,因为通过了ssh通道进行传输.
- 在传输前需要进行连接用户(一般为系统用户)密码验证,需要手工输入密码.这里我们借助前面章节的ssh key密钥免登陆验证的方式来实现,无交互式验证数据传输.
- Rsync软件必须安装在本地及远程所有机器上.
通过守护进程方式传输同样分为两种情况,每种情况又有两种语法写法,分别为:
拉取:①rsync[OPTION…] [USER@]HOST::SRC…[DEST]
②rsync[OPTION…] rsync://[USER@]HOST[:PORT]/SRC…[DEST]
推送:①rsync[OPTION…] SRC…[USER@]HOST:: [DEST]
②rsync[OPTION…] SRC… rsync://[USER@]HOST[:PORT]/ [DEST]
特别值得注意的是,与远程shell方式的命令不同的是,第①种语法格式,本节命令[USER@]HOST::SRC和[USER@]HOST::DEST结尾处,均为双冒号连接SRC或DEST,另外,这个SRC或DEST也不再是路径了,而是守护进程中配置的模块名称.下文会以例子详细说明.
第2种方法实例(rsync://):
拉取实践命令:
rsync -avzrtopg --progress rsync://rsync_backup@10.0.0.141:/wj/ /test/ --password-file=/etc/rsync.password
推送实践命令:
Rsync -avzrtopg --progress /test/ rsync://rsync_backup@10.0.0.141:/wj/ --password-file=/etc/rsync.password
特别说明:以上用法是个不错的方法,他在拉取和推送时的写法极其类似,尤其是后面讲守护进程服务时,第一种方法通过双冒号加模块名的方法不利于记忆,所以对于初学者,建议大家也可以记忆这种语法格式.
3.1通过rsync在本地传输数据实践 3.1.1rsync命令同步参数选项Rsync[OPTION]SRC…[DEST]
常用参数选项说明:
-v, --verbose 详细模式输出,传输时的进度等信息
-z,--compress传输时进行压缩以提高传输效率,-compress-level=NUM可按级别压缩
-r,--recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t,--times保持文件时间信息
-o,--owner保持文件属主信息
-p,--perms保持文件权限
-g,--group保持文件属组信息
-P,--progress显示同步的过程及传输时的进度等信息
-a,--archive归档模式,表示以递归方式传输方式,并保持所有文件属性,等于-rtopgDl
-e,--rsh=COMMAND使用的信道协议,指定代替rsh的shell程序.例如:ssh
--exclude=PATTERN指定排除不需要传输的文件模式
-D,--devices保持设备文件信息
-l,--links保留软连接
保持同步目录及文件属性
这里的-avz –progress相当于-vzrtopDl –progress(还多打了个Dl功能),生产环境常用的参数选项为-avz --progress或-vzrtopg –progress 如果时放入脚本中,也可以把-v和—progress去掉.这里的—progress可以用-P代替.
特别说明:刚开始学抓重点,相关参数还有非常多,需要时可以自行man rsync或者查看参考资料地址. https://www.samba.org/ftp/rsync/rsync.html OPTIONS SUMMARY节
3.1.2使用rsync在本地备份传输数据实例一:将/etc下全部内容(包括etc目录本身)备份到/tmp下面
rsync –avz /etc /tmp/
第一次运行命令会由于需要扫描并同步所有文件及目录,因此时间会长一些.如果再次备份就会进行快速对比,忽略通过的文件,速度更快,如下文:
rsync –avz /etc /tmp/
我们可以看到立刻就同步完成,要传输的数据也很少了.因为rsync会比对所有文件和目录,仅同步有变化(内容,修改时间等各种属性)的文件或目录.如果换做cp命令,那么还会重新拷贝完整拷贝.浪费系统时间和时间.
当然本地备份同步不仅仅备份目录,还可以同步单个文件,设备等.
特别提示:在传输数据时,rsync命令也需要有对同步的目录拥有权限可以实现正常传输数据.
4.1借助ssh通道在不同主机之间传输数据 4.1.1借助ssh通道在不同主机之间传输数据实例1:将10.0.0.141主机的/etc下全部内容备份到10.0.0.142主机的/tmp下面
4.1.1.1借助ssh通道从远端主机拉取数据例子实践:
拉取:rsync –avz –P –e ‘ssh –p22’ root@10.0.0.142:/etc /tmp
推送:rsync –avz –P /tmp –e ‘ssh –p22’ root@10.0.0.142:/etc
4.1.2借助ssh key密钥实现数据免登陆验证加密传输说明,如果事先设置了ssh key密钥免登陆验证,即可用rsync通过ssh方式免登陆验证同步传输数据,这是生产场景常用的方法之一.
4.1.2.1配置ssh key密钥实现数据免登陆验证
此部分在ssh key密钥实现数据免登陆验证章节
4.1.2.2实践ssh key密钥实现数据免登陆验证传输数据
Sh –x fenfa.sh会显示执行脚本的过程
说明:我们假设已经建立好了从10.0.0.141到10.0.0.142的kkk用户的免密码验证登陆配置.
Mkdir wj cd wj/ touch test1 test2
Rsync –avz –P –e ‘ssh –p 22’ ~/wj kkk@10.0.0.142:~/表示把当前用户/wj的数据传输到10.0.0.142的kkk用户家目录中
特别提示:本文免验证连接分发文件是基于普通用户wj的,如果要实现hosts文件的推送工作,是需要root权限的,我们该怎么办呢?
方法大概有三:
法一:此时可以把wj用户配置成sudo权限用户,然后就可以实现通过sudo功能来实现普通用户推送只有root才能处理的问题了.推荐此方法
1.执行visudo开启Defaults requiretty参数
2.使用ssh的如下命令”ssh –t hostname sudo”
more /etc/sudoers查看如下内容可知:
# Disable "ssh hostname sudo ", because it will show the password in clear.
# You have to run "ssh -t hostname sudo ".
#
Defaults requiretty
报错: sudo: sorry, you must have a tty to run sudo
https://blog.csdn.net/breezehappy/article/details/38895375
法二:setuid权限位,可以把所有客户端如echo、cp、scp命令,修改为setuid位,这样在推送文件时就可以使用以上命令,来搞定了.不推荐这个方法,提出来是开拓大家的发散思维.
法三:可以配置root用户的免登陆认证,但这又会带来一定的安全问题(虽然可以防火墙封堵ssh端口),法三比使用sudo方法稍逊一筹.
更详细的说明可见ssh key的相关章节 六 分发数据免密码登陆的几点须知!
不管用什么方法,我们一定要管理好中心分发服务器A,因为它的权限很大,很重要.
如:取消中心分发服务器的外网ip,开启防火墙禁止ssh对外用户登录,并仅给某一台后端无外网机器访问.然后这台后端的服务器依然没外网ip,并且仅能通过vpn连接,这样中心分发服务器就相对安全了.发现,其中数百台服务器大并发流量的公司,还在用上面提到办法.
4.1.2.3生产环境ssh key密钥组合rsync实现数据分发的方案
5.1以守护进程的方式传输数据(重点) 5.1.1部署前的准备工作:5.1.1.1部署环境
用vmvare虚拟机环境下linux主机进行试验.
操作系统Cat /etc/redhat-release uname –mi
内核版本:uname –r
主机名
网卡eth0
默认网关
用途
A-server
10.0.0.141
10.0.0.254
数据备份服务器
B-server
10.0.0.142
10.0.0.254
节点服务器
C-server
10.0.0.143
10.0.0.254
节点服务器
提示:如无特殊说明,子网掩码均为255.255.255.0
5.1.1.2具体需求
要求在A-server上以rsync守护进程的方式部署rsync服务,使得所有客户端主机,可以把本地数据通过rsync的方式到数据备份服务器A-server上.本例的客户端仅以B-server、C-Server为例.
5.1.1.3备份拓扑
(rsync守护进程方式备份数据解决方案图)
5.1.2开始部署rsync服务-rsync服务器端操作过程:
5.1.2.1配置rsyncd.conf
1)配置rsyncd.conf
cat > /etc/rsyncd.conf
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?