RSYNC---Remote Synchronization(远程同步)
开源、高速的数据同步工具。
基本语法格式:rsync [选项] 源文件 目标文件 (更新的是后面的目标文件)
常用选项:
-a 包含-rtplgoD
-r 递归recursive,类似cp时的-r选项
-d 不递归转移目录
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除目标多出的文件或文本内容(必须和-r或-d结合使用),同时会增加目标缺少的部分(使两者保持一致)
--exclude 过滤指定文件,如--exclude=logs 会把文件夹logs的文件或者目录过滤掉,不同步
--exclude-from 根据文件内容过滤,如想过滤两个文件可以写成 --exclude=a --exclude=b,也可以
将a和b写入文件1.txt中,--exclude-from=1.txt
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
-e 指定传输通道(协议)
-q quiet,无提示拷贝
--partial 断点续传
--partial-dir=路径 指定一个目录保存断点续传的文件,文件整体传输结束后会将其删除(总体上速度更快)
--bwlimit=KMPS 指定最大传输速率为每秒多少KB,以免同步服务占用全部带宽,使用户无法正常访问服务器
注意:对于rsync命令,data 代表该目录和目录下内容,data/ 只是目录下的内容,不包含自身。
rsync服务的默认端口号是873.
rsync的功能特性
支持拷贝普通文件与特殊文件,如链接文件,设备文件等
支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变
可实现增量复制(删除),即只复制(删除)发生变化的数据,因此数据传输效率很高。
可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件( rsync本身不对数据加密)
可以通过 socket(进程方式)传输文件和数据(服务端和客户端)*。
支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像。
注:增量复制即将源和目标做对比,只复制多出来的或发生变化的文件。(可以用参数控制)
三种工作模式
1.本地拷贝
①把数据复制到指定位置,类似于cp
②使用参数实现删除的功能,类似于rm
③查看属性信息功能,类似于ls
例:
2.异地拷贝
将一台机器的数据复制到另一台机器。
远程shll模式
借助类似ssh隧道传输数据,适合不同的机器之间复制。
pull:拉,从远端拉取到本地。
rsync [OPTION] [USER]@HOST:SRC [DEST]
选项 认证用户@主机地址:源路径 本地路径
push:推,从本地推到远端。
rsync [OPTION] SRC [USER]@HOST:[DEST]
选项 本地路径 认证用户@主机地址:目标路径
注:第一次传输时会提示输入yes即可。要求输入对方的密码。
默认使用的是ssh 22端口,如果ssh服务端口号更改为8888,应这样写:
rsync -avz /etc/hosts -e "ssh -p 8888" root@nfs01:/opt/
3.rsync守护进程模式(重点)
首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据。
是企业运维的重要模式。
实践:
一、以下在服务端配置
1.安装rsync命令:yum install rsync
2.设置rsync配置文件
注:客户端执行命令时用的是模块名(不用加中括号),对应的就是path的路径
创建用户和目录并赋予权限
3.启动和检查
查看服务状态:systemctl status rsyncd
设置开机启动:systemctl enable rsyncd
4.配置密码文件
注意:这里的密码文件路径、用户名必须和第2步里的配置文件一致。
二、以下在客户端配置(以nfs01为例)
1.打开nfs01服务器
2.配置(两种方法)
第1种方法:配置密码文件
注:这里只需将密码写入即可。
第2种方法:配置环境变量
三、守护进程模式,客户端rsync命令语法
原则:服务器端运行守护进程,客户端执行同步命令。
注:和异地拷贝的推拉有一些不同
pull:拉,从远端拉取到本地。
语法1:
rsync [OPTION] [USER]@HOST::SRC [DEST]
选项 虚拟用户@主机地址::模块名 本地路径
语法2:
rsync [OPTION] rsync://[USER]@HOST//SRC [DEST]
选项 rsync://虚拟用户@主机地址//模块名 本地路径
push:推,从本地推到远端。
方法1:
rsync [OPTION] SRC [USER]@HOST::[DEST]
选项 本地路径 虚拟用户@主机地址::模块名
方法2:
rsync [OPTION] SRC rsync://[USER]@HOST//[DEST]
选项 本地路径 rsync://虚拟用户@主机地址//模块名
测试:
原因是服务器端用户rsync没有权限存储文件的完整属性,可以将配置文件/etc/rsyncd.conf中的uid和gid都改为root,或者加一行:fake super = yes 代表不用root用户也有权限存储文件的完整属性。
man rsyncd.conf 对fake super的解释:This allows the full attributes of a file to be stored without having to have the daemon actually running as root.
更改完成后,测试:
注:如果客户端环境变量RSYNC_PASSWORD配置好了,那么--password-file=/etc/rsync.password可以不用写。
四、多目录共享
可以在/etc/rsyncd.conf中设置多个模块名,使客户端可以向多个目录共享文件。
注:要一一对应,一个模块一个path,顺序不要乱。也可以将虚拟用户名、密码文件等放在模块后面,使其私有化,即只服务这个模块。意思就是[backup]和[test]中间的内容只服务于模块backup,以此类推。
服务器端创建目录并设置权限
客户端进行传输
检查服务器端是否收到文件