-
什么是Rsync
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于Unix/Linux/Windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。
Rsync被广泛使用在备份和镜像,以及作为一种改进后的复制命令用于日常应用。
提示信息:
官方链接资料:http://www.samba.org/ftp/rsync/rsync.html
官方手册资料:man rsync/man rsync.conf
-
Rsync的作用
Rsync英文全称为Remote Synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似SSH的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而raync可以增量拷贝。
Rsync命令除了作为本地和远程复制命令使用以外,还可以作为删除和查看命令被应用,在某种情况下类似于传统的rm和ls命令。
-
通过上面文字的介绍,可以总结一下rsync命令的主要作用分为以下4种:
-
实现本地数据同步复制(等价cp命令)
cp -a /etc/hosts /temp/hosts_cp # 使用rsync实现cp功能 rsync -a /etc/hosts /temp/hosts_rsync # 注意:当使用rsync同步目录时如果目录后面带/,则同步的是目录中内容 rsync -a /etc/ /temp/ # 同步的是/etc/下的所有文件到/temp/中 rsync -a /etc /temp/ # 这才是将/etc文件夹备份到/temp/中
-
实现远程数据同步复制(等价scp命令)
scp -rp /etc/hosts 192.168.1.100:/temp/hosts_scp # 使用rsync实现scp功能 rsync -rp /etc/hosts 192.168.1.100:/temp/hosts_rsync
-
实现数据信息删除功能(等价rm命令)
rm -rf /temp/* # 使用rsync实现rm功能 # 先创建一个空目录 mkdir null # 在将空目录同步到要删除的目录 rsync -a --delete /null/ /temp/
-
实现数据信息查看功能(等价ls命令)
ls /etc # 使用rsync实现ls功能 rsync /etc
-
-
Rsync的特性
-
Rsync的特性如下(7个特性信息说明):
支持拷贝普通文件与特殊文件,如链接文件,设备等;
-
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
# 在打包/opt/data时排除 temp 命名的目录和文件 tar zcvf data_backup.tar.gz /opt/data
可以做到保持原文件或目录的权限、时间、软硬连接、属主、组等所有属性均不改变(-p)。
-
可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高(tar -N)。
# 备份 /home 目录自2008-01-01 以来修改过的文件 tar -N 2008-01-01 -zcvf /backup/inc-backup_$(date + %F).tar.gz /home # 备份 /home 目录昨天以来修改过的文件 tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date + %F).tar.gz /home # 将所有.gif的文件增加到all.tar的包中。-r表示增加文件的意思 tar -rf all.tar *.gif
可以使用rcp、rsh、ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密);
可以通过socket(进程方式)传输文件和数据(服务端和客户端);
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
-
-
Rsync的复制原理介绍
- 在同步备份数据时,默认情况下,Rsync通过其独特的“Quick Check”算法,它仅同步大小或者修改时间发生变化的文件或目录,当然,也可以根据权限、属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统的cp、scp拷贝命令的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。
-
Rsync的使用方法
-
一般来说,Rsync大致使用三种主要的传输数据方式。
-
本地数据传输模式:采用此种方式进行数据同步复制,类似于上文中所提到的cp本地复制命令功能。采用本地数据传输模式的语法格式信息为:
rsync [OPTION...] SRC... [DEST] # rsync ---数据备份命令 # [OPTION...] ---命令参数信息 # SRC... ---要进行同步备份的源文件或目录信息 # [DEST] ---将数据备份同步到本地系统中的目的路径
-
-
远程Shell数据传输模式
-
采用此种方式进行数据同步复制,类似于上文中所提到的scp远程复制命令功能。采用远程数据传输模式语法格式信息为:
# Pull(拉) rsync [OPTION...] [USER@]HOST:SRC... [DEST] # rsync ---数据备份命令 # [OPTION...] ---命令参数信息 # [USER@] ---以什么用户身份将数据拉取 # HOST:SRC ---从哪个远程主机上,将指定的数据进行备份 # [DEST] ---将远程主机拉取过来的数据保存到本机的什么路径 # Push(推) rsync [OPTION...] SRC... [USER@]HOST:DEST # rsync ---数据备份命令 # [OPTION...] ---命令参数信息 # [USER@] ---以什么用户身份将数据推送 # SRC ---指定本地要推送给备份的数据信息 # HOST:DEST ---将数据信息推送到指定主机相应的目录中
-
守护进程传输模式
-
-
Rsync守护进程服务部署
-
服务端部署
-
第一步:确认软件服务是否安装(客户端也要安装)
# 检查rsync是否安装 rpm -qa rsync # 安装rsync yum install -y rsync
-
第二步:编写备份文件配置服务
# 默认没有配置文件,需手动编写 vi /etc/rsyncd.conf # 以下是rsyncd.conf中编写的内容 #rsync_config #created by HuangChao at 2020 ##rsyncd.conf start## # -------------------------全局配置(影响所有模块)------------------------- # #指定rsync服务运行的时候,向磁盘进行读写操作的用户 uid = rsync #指定用户组 gid = rsync #安全相关参数 use chroot = no #最大连接数 max connections = 200 #超时时间 timeout = 300 #进程对应的进程号文件,用于存放服务运行时进程的ID号(PID) pid file = /var/run/rsyncd.pid #进程的锁文件 lock file = /var/run/rsync.lock #程序运行的日志文件 log file = /var/log/rsyncd.log # -------------------------局部配置(影响本模块)------------------------- # [backup] #模块名称 #注释信息 comment = "Backup Dir By HuangChao" #模块对应的位置(路径) path = /backup #忽略错误程序 ignore errors #是否只读 read only = false #是否可以列表 list = false #允许访问rsync服务器的IP地址(白名单) hosts allow = 192.168.1.0/24 #禁止访问rsync服务器的IP地址(黑名单) hosts deny = 0.0.0.0/32 #认证用户,这些用户操作系统中不存在,仅用于认证 auth users = rsync_backup,rsync_user #设置进行连接认证的密钥文件,不存在的用户进行认证时的密钥文件 secrets file = /etc/rsync.password
-
第三步:创建一个备份目录的管理用户(虚拟用户)
# 创建一个备份目录的管理用户 useradd -M -s /sbin/nologin rsync # 查看是否创建成功 id rsync
-
第四步:创建备份目录
# 在/目录下创建名为backup的备份目录,-p代表命令可以重复执行 mkdir -p /backup # 将备份目录的属主和属组改成rsync用户 chown -R rsync.rsync /backup
-
第五步:创建认证用户密码文件
# 将 sync_backup:123456 追加到 /etc/rsync.password 文件的末尾 echo "sync_bckup:123456" >> /etc/rsync.password # 更改文件权限 chmod 600 /etc/rsync.password
-
第六步:启动rsync备份服务守护进程
# 启动rsync守护进程 rsync --daemon # 检查rsync是否启动 ps -ef|grep rsync # 查看服务端口,rsync服务端口默认为873 netstat -lntup|grep rsync
-
-
客户端部署
-
Pull(拉):从备份服务器上将数据拉取到本地,主要用于数据恢复
rsync [OPTION...] [USER@]HOST::SRC... [DEST] # rsync ---数据备份命令 # [OPTION...] ---命令参数信息 # [USER@] ---指定进行数据传输的认证用户 # HOST:: ---指定备份服务器的IP地址或主机名称 # SRC... ---指定备份服务器上模块名称 # [DEST] ---将数据同步到本地主机的指定路径
-
Push(推):从本机将数据推送到备份服务器,主要用于数据备份
rsync [OPTION...] SRC... [USER@]HOST::DEST # rsync ---数据备份命令 # [OPTION...] ---命令参数信息 # SRC... ---指定本地主机上需要备份的数据 # [USER@] ---指定进行数据传输的认证用户 # HOST:: ---指定备份服务器的IP地址或主机名称 # DEST ---指定备份服务器上模块名称 # 示例 # 在本机创建用户认证的密码文件 echo "123456" >> /etc/rsync.password # 修改文件权限,必须修改,如果权限不是600,rsync服务则不读密码文件 chmod 600 /etc/rsync.password # 将/etc/中的hosts文件备份到192.168.1.100服务器的默认备份目录下 rsync -avzP /etc/hosts rsync_backup@192.168.1.100::backup --password-file=/etc/rsync.password # --password-file=/etc/rsync.password ---自动传输密码,用于定时任务的免交互
-
-
-
Rsync命令参数
- Rsync常用的同步命令参数如下:
命令参数 | 参数说明 |
---|---|
-v(verbose) | 详细模式,输出进度等信息 |
-z(compress) | 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。局域网中一般不压缩。 |
-a(archive) | 归档模式,表示以递归方式传输文件,并保持所有文件属性 |
-r(recursive)(归类于-a) | 子目录递归传输模式 |
-t(times)(归类于-a) | 保持文件时间(文件修改时间)信息 |
-o(owner)(归类于-a) | 保持文件属主信息 |
-p(perms)(归类于-a) | 保持文件权限 |
-g(group)(归类于-a) | 保持文件属组信息 |
-l(links)(归类于-a) | 保留软连接 |
-D(devices)(归类于-a) | 保持设备文件信息 |
-P(progress) | 显示同步的过程及传输时的进度等信息 |
-e(rsh=COMMOND) | 指定使用哪种信道协议,例如:SSH |
--exclude=PATTERN | 指定排除不需要传输的文件信息 |
--exclude-from=file | 文件名所在的目录文件,既可以排除多个文件 |
--bwlimit=RATE | 传输数据时进行限速 |
--delete | 使目标目录和源目录数据一致,即无差异同步数据 |
-
Rsync守护进程模式的应用场景
-
采用定时任务方式+Rsync服务进行数据备份
应用场景:主要用于企业内部人员产生的数据备份
-
采用实时同步方式+Rsync服务进行数据备份(推荐)
应用场景:主要应用于用户产生的数据备份
-
-
Rsync守护进程企业中的实际应用
-
守护进程多模块功能配置
-
第一步:编写配置文件,添加多模块配置信息
# 默认没有配置文件,需手动编写 vi /etc/rsyncd.conf # 以下是rsyncd.conf中编写的内容 #rsync_config #created by HuangChao at 2020 ##rsyncd.conf start## uid = rsync gid = rsync use chroot = no max connections = 200 timeout = 300 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 = 192.168.1.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup,rsync_user secrets file = /etc/rsync.password [nfs_backup] #模块 comment = "Backup Dir By NFS" path = /backup/nfs_backup [mysql_backup] #添加的模块 comment = "Backup Dir By MySQL" path = /backup/mysql_backup
-
第二步:创建备份目录
mkdir -p /backup/mysql_backup chown -R rsync.rsync /backup/mysql_backup
-
第三步:重启服务
# 停止服务 kill 'cat /var/run/rsyncd.pid' # 启动服务 rsync --daemon
-
-
-
Rsync守护进程排除功能实践
-
排除指定文件
# 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b目录不需要同步,d目录中的2.txt不需要同步 rsync -avzP /data_dir/ --exclude=a --exclude=b --exclude=d/2.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password # 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b,c目录不需要同步,d目录中的1.txt不需要同步 rsync -avzP /data_dir/ --exclude={a..c} --exclude=d/2.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
-
把多个排除的信息放在一个文件中
# 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b,c目录不需要同步,d目录中的1.txt不需要同步 cd /data_dir/ # 编写排除文件信息 vi exclude.txt a b c d/1.txt exclude.txt rsync -avzP /data_dir/ --exclude-from=/data_dir/exclude.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
-
-
Rsync守护进程创建备份目录
-
备份文件时可以创建相应的文件夹以分类
# 将data_dir文件夹中的文件备份到192.168.1.100服务器中nsf_backup/20190620_backup文件夹中,注意:不能一次性创建多级目录! rsync -avzP /data_dir/ rsync_backup@192.168.1.100::nfs_backup/20190620_backup --password-file=/etc/rsync.password
-
-
Rsync守护进程的访问控制
-
Rsync配置文件中的访问控制分为三种情况:
只有白名单(hosts allow)时,白名单流量允许通过,其余流量的默认规则是阻止;
只有黑名单(hosts deny)时,黑名单流量阻止通过,其余流量的默认规则是允许;
-
既有白名单,又有黑名单时,白名单流量允许通过,黑名单流量阻止通过,其余流量的默认规则时允许。
注意:白名单优先级高于黑名单
-
需求示例:
内网网段用户(172.16.1.0/24)可以传输数据到backup目录中
-
外网网段用户(10.0.0.0/24)不可以传输数据到backup目录中
# 默认没有配置文件,需手动编写 vi /etc/rsyncd.conf # 以下是rsyncd.conf中编写的内容 #rsync_config #created by HuangChao at 2019 #email:huangchao@outlook.com ##rsyncd.conf start## uid = rsync gid = rsync use chroot = no max connections = 200 timeout = 300 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 = 172.16.1.0/24 hosts deny = 10.0.0.0/24 #--------------------------------------------------------------- # auth users = rsync_backup,rsync_user secrets file = /etc/rsync.password [nfs_backup] comment = "Backup Dir By NFS" path = /backup/nfs_backup [mysql_backup] comment = "Backup Dir By MySQL" path = /backup/mysql_backup
-
-
Rsync守护进程的无差异同步(在企业中慎用!)
-
实现本地服务器和备份服务器上的数据信息高度一致,说白了,就是我有你也有,我没有你也不能有。除了实现文件夹内容无差异同步,还能实现文件内容的无差异同步
rsync -avzP --delete /data_dir/ rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
-
-
Rsync守护进程的列表功能
-
syncd.conf配置文件中的 list = true 的作用是让客户端可以通过命令获悉服务端的全部模块信息。(建议将list = false)
rsync rsync_backup@192.168.1.100::
-
- Rsync软件的深入学习方法
官方链接资料:http://www.samba.org/ftp/rsync/rsync.html
官方手册资料:man rsync/man rsync.conf