1.rsync简介
rsync
英文称为remote synchronizetion
,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,**scp每次都是全量拷贝,而rsync可以增量拷贝。**当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
在同步数据的时候,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可是实现快速的同步备份数据。
rsync - 快速,通用,可实现全量和增量的远程(和本地)文件复制工具。
rsync监听端口:873
rsync运行模式:C/S
client/server :客户端/服务端
官方链接资料:https://www.samba.org/ftp/rsync/rsync.html
2. 有什么作用?
工作中需要定时/实时数据备份,本地服务器目录、不同机器、不同机房之间的数据备份。都可以用rsync完成
3.rsync优缺点
优点:
- 可以增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物);socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务。
- 可以限速进行数据的备份或恢复操作。
- 远程SHELL通道模式还可以加密(SSH)传输
- 支持匿名认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像]
- 保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p
- 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。(
--exclude
)
缺点:
-
大量小文件时进行同步备份,比对的时间较长,有时候会导致rsync进程停止运行或者进程挂起; 解决方法:
a. 打包后再同步;
b. drbd(文件系统同步复制block)。
-
同步大文件,比如:10G这样的,有时也会出现问题,导致rsync进程中断,未完整同步前,是隐藏文件,但是会占用磁盘空间(ls -al查看)。直到同步完成后,将隐藏文件改成正常文件。而且,每中断一次,生成一个隐藏文件。
4. rsync功能特性
支持拷贝普通文件与特殊文件,如链接文件,设备文件等;
支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
可以实现增量复制,既只复制发生变化的数据,因此数据传输效率很高;
可以使用rcp、rsh、ssh
等方式配合进行隧道和加密传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端客户端)
支持匿名或认证(无需系统用户)进程模式传输,安全地进行数据备份及镜像
5.增量复制原理介绍
默认情况下,在备份复制数据时Rsync通过其独特的“quick check”算法,它仅复制大小或者修改时间发生变化的文件或目录,当然也可根据权限、属主
等属性的变化复制,但需要指定相应的参数,甚至可以实现只复制一个文件里有变化的内容部分,所以可以实现快速的备份复制数据,即采用增量复制
方法对数据信息进行复制,与传统cp,scp拷贝工具的全量拷贝截然不同,增量复制数据
,在效率上远远高于全量复制;
-
在centos5系统上,rsync的版本是2.x:
- 同步增量复制的原理是把所有的文件比对一遍,然后进行数据同步
-
Centos6/7,rsync版本是3.x:
- 增量复制数据原理是,一边比对,一边复制。
-
Ubuntu,rsync版本是3.x
ubuntu 14.01之后 默认安装rsync,但是没有开启;我们把他打开即可
从增量复制上而言,rsync3.x比rsync2.x更有优势!
rsync --version
底层代码算法
使用quick check算法,只对增量的部分进行复制,根据大小属性的变化进行复制。
底层代码:https://coolshell.cn/articles/7425.html
6.rsync三种工作模式
6.1本地模式(local mode )
rsync | [option] | SRC | [DEST] |
---|---|---|---|
rsync命令 | 参数选项 | 【源目录或文件】 | 目的目录或文件 |
rsync /etc/hosts /opt
6.1.1 rsync复制 类似于cp
rsync [OPTION]... SRC...[DEST]
普通 复制 时间改变了
root@ip-172-31-17-90:~# rsync /etc/hosts /opt
root@ip-172-31-17-90:~# ls /opt
cni containerd gitlab hosts
root@ip-172-31-17-90:~# \cp /etc/hosts /opt
root@ip-172-31-17-90:~# ls -l /etc/hosts /opt/hosts
-rw-r--r-- 1 root root 221 May 14 2019 /etc/hosts
-rw-r--r-- 1 root root 221 Jan 8 13:54 /opt/hosts
使用参数,保持属性;
root@ip-172-31-17-90:~# rsync -zrtopg /etc/hosts /opt/
root@ip-172-31-17-90:~# ls -l /etc/hosts /opt/hosts
-rw-r--r-- 1 root root 221 May 14 2019 /etc/hosts
-rw-r--r-- 1 root root 221 May 14 2019 /opt/hosts
Ps:
-rw-r--r--.
.是表示selinux状态的;
如果没有点就没有开启selinux
#getenforce
6.1.2通过加参数可以实现删除,相当于rm命令
清空内容
#新建空文件
root@ip-172-31-17-90:~# touch /null.txt
root@ip-172-31-17-90:~# cat /opt/hosts
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
#使用空文件进行删除
root@ip-172-31-17-90:~# rsync -r --delete /null.txt /opt/hosts
root@ip-172-31-17-90:~# cat /opt/hosts
root@ip-172-31-17-90:~#
删除文件
让后面的n和前面的/null保持一致
root@ip-172-31-17-90:~# mkdir /null
root@ip-172-31-17-90:~# mkdir -p /n/1
root@ip-172-31-17-90:~# ls /n
1
root@ip-172-31-17-90:~# rsync -r --delete /null/ /n/
root@ip-172-31-17-90:~# ls /n
6.1.3查看属性信息功能,相当于ls
查看属性
root@ip-172-31-17-90:~# rsync /etc/hosts
-rw-r--r-- 221 2019/05/14 18:02:05 hosts
6.2 远程数据传输模式(remote shell mode)
借助类似ssh隧道传输数据,适合不同的机器之间的复制 类似于scp
6.2.1 远程shell传输模式语法
远程shell数据传输模式分为拉取和推送两种模式,拉取是指从远端服务器把数据拉取到服务器本地,推送是指把数据从本地推送到远端服务器,这两种传输方式的语法格式,具体说明如下:
拉取(pull)表示从远端主机把数据复制到执行命令的本地主机的相应目录
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
远程shell传输数据拉取语法格式说明
rsync | [OPTION] | [USER@]HOST:SRC | [DEST] |
---|---|---|---|
rsync命令 | 参数选项 | [认证用户]@[主机地址]:[源路径] | 目的路径 |
**推送(Push)**表示从本地主机执行命令把本地的数据复制到远端主机指定目录
rsync [OPTION...] SRC... [USER@]HOST:DEST
远程shell传输数据推送语法说明
6.3 守护进程模式 以守护进程socket的方式传输数据最常用
PULL:拉取
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:推送
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
注意:推拉操作都是通过rsync client客户端操作的。
7.rsync的应用场景
7.1 推
7.2 拉
7.3 大量数据备份场景
7.4 异地备份
1.规划
角色 | IP | 系统 |
---|---|---|
客户端 | 192.168.197.26 | ubuntu-16.04 |
服务端 | 192.168.197.29 | ubuntu-16.04 |
2.安装rsync
ubuntu默认安装rsync 只需打开即可
192.168.197.29
vim /etc/default/rsync
RSYNC_ENABLE=true
参数详解
参数 | 说明 |
---|---|
-v, --verbose | 详细模式输出 |
-a, --archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD |
-z, --compress | 对备份的文件在传输时进行压缩处理 |
-P | 显示进度 |
-r, --recursive | 对子目录以递归模式处理 |
-l, --links | 保留软链结 |
-p, --perms | 保持文件权限 |
-o, --owner | 保持文件属主信息 |
-g, --group | 保持文件属组信息 |
-D, --devices | 保持设备文件信息 |
-t, --times | 保持文件时间信息 |
-e, --rsh=command | 指定使用rsh、ssh方式进行数据同步 |
–exclude=PATTERN | 指定排除不需要传输的文件模式 |
–exclude-from=FILE | 排除FILE中指定模式的文件 |
-S, --sparse | 对稀疏文件进行特殊处理以节省DST的空间 |
–bwlimit=KBPS | 限制I/O带宽,KBytes per second |
–delete | 删除那些DST中SRC没有的文件 |
–password-file=FILE | 从FILE中得到密码 |
-n, --dry-run | 现实哪些文件将被传输 |
-w, --whole-file | 拷贝文件,不进行增量检测 |
-B, --block-size=SIZE | 检验算法使用的块尺寸,默认是700字节。 |
-x, --one-file-system | 不要跨越文件系统边界 |
-R, --relative | 使用相对路径信息 |
-b, --backup | 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。 |
-u, --update | 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件 |
-q, --quiet | 精简输出模式 |
-c, --checksum | 打开校验开关,强制对文件传输进行校验 |
补充参数
--delete 实现无差异数据同步
--bwlimit=KBPS 实现数据传输过程中限速
--exclude=PATTERN 指定一个文件或目录 --exclude={file1,file2} 可以排除多个无顺序规则文件或目录
--exclude-from=FILE 指定排除多个文件或目录信息,将排除信息写入到一个文件中,利用--exclude-from=排除文件名 类似于tar 打包排除命令
3.修改配置文件
192.168.197.29
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/
cat >/etc/rsyncd.conf<<"EOF"
##全局配置
uid = root #用户
gid = root #用户组
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 #日志文件 显示错误信息
## 模块配置
[backup] #模块名称
path = /data #模块对应的为位置(路径)
ignore errors #忽略错误程序
read only = false #是否只读
list = false #是否可以列表
hosts allow = 192.168.197.0/24 #允许客户端的网端
#hosts deny = 0.0.0.0/32 #禁止访问rsync服务器的客户范围
auth users = rsync_backup #不存在的用户;只用户认证
secrets file = /etc/rsync.password #设置进行连接认证的密匙文件
EOF
注意:配置文件中,行后不要有注释和空格。
4.创建rsync备份目录
192.168.197.29
mkdir -p /data
5.授权rsync用户管理备份目录
192.168.197.29
useradd rsync -s /sbin/nologin -M
6.修改备份目录权限
192.168.197.29
chown -R rsync.rsync /data/
7.创建认证用户密码文件
192.168.197.29
echo "rsync_backup:123456" >/etc/rsync.password
8.修改文件权限
192.168.197.29
chmod 600 /etc/rsync.password
9.重启rsync守护进程服务
192.168.197.29
/etc/init.d/rsync start
10. 客户端部署
192.168.197.26
cat >/etc/rsync.password<<"EOF"
123456
EOF
chmod 600 /etc/rsync.password
11. 客户端推送文件
注意:rsync默认使用873端口,防火墙开启时,需放行端口。
192.168.197.26
rsync -avz 88.txt rsync_backup@192.168.197.29::backup --password-file=/etc/rsync.password
12.客户端拉取文件
192.168.197.26
rsync -avz rsync_backup@192.168.197.29::backup --password-file=/etc/rsync.password /tmp