数据传输原理
1. 需要建立网络连接:TCP三次握手
2. 需要进行身份验证,客户端发送用户/密码信息;服务端需要对比用户文件信息进行验证
3. 数据传递后需要进行属组和属主信息变化,客户端文件属性统一变成服务端指定用户信息
数据增量备份原理
在数据远程传输之前需要进行数据对比。
两种对比方式:
1. 根据文件属性信息进行对比(权限信息 时间信息 大小信息)
2. 根据文件sha/md5算法进行数据对比,根据文件名称以及文件内容识别文件之间区别
PS:
scp命令无法进行增量备份,scp每次传输/备份数据都是重新传输,当文件比较大的时候,会非常浪费时间。
rsync简介
1. rsync 是一个常用的 Linux 应用程序,用于文件同步。
2. 它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代 cp 和 mv 命令。
3. 它名称里面的 r 指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。
语法格式:
Local: rsync [OPTION...] SRC... [DEST] --- rsync可以实现数据本地备份==cp
Access via remote shell: rsync实现远程方式数据备份==scp
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] -- 将远程数据拉取到本地主机上 将数据进行下载/恢复
eg:rsync -avz root@172.16.1.41:/tmp/hosts /etc/
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST -- 将本主机数据推送到远程主机上 将数据进行上传/备份
eg:rsync -avz /etc/hosts root@172.16.1.41:/tmp
Access via rsync daemon:
基于守护进程方式实现数据传输
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
eg:rsync -avz rsync_backup@172.16.1.41::backup /etc/
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
eg:rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
eg:rsync -avz /etc/selinux/config rsync://rsync_backup@172.16.1.41:888(端口号)/backup
常用参数:
-v, --verbose increase verbosity
显示传输过程信息
-z, --compress compress file data during the transfer
文件在传输时做压缩处理
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
执行-a参数等价于执行-rlptgoD
-r, --recursive recurse into directories
进行递归复制数据信息(可以实现目录传输)-l, --links copy symlinks as symlinks (没有任何作用)
可以复制软链接文件
-L, --copy-links transform symlink into referent file/dir
将链接文件所执行源文件信息做备份
-p, --perms preserve permissions
维持权限属性信息不变
-t, --times preserve modification times
维持文件修改时间属性不变
-o, --owner preserve owner (super-user only)
维持文件属主信息不变
-g, --group preserve group
维持文件属组信息不变
-D same as --devices --specials
复制传输设备文件信息可以保持设备文件属性信息不变
-P same as --partial --progress
显示数据传输进度信息--exclude=file 指定排除不需要传输的目标文件
--exclude-from=file 排除file中写的文件信息
--partial 断点续传
--password-file 使用密码文件,实现免交互
--port=xxx(端口号)使用指定端口号
rsync服务端部署过程
1. 第一个历程:安装部署软件程序
[root@backup ~]# yum install -y rsync
2. 第二个历程:创建管理备份目录、数据用户信息
# 创建管理备份数据的用户
[root@backup ~]# useradd rsync -M -s /sbin/nologin -- 创建虚拟用户
3. 第三个历程:创建备份目录,并修改目录的属主和属组信息
[root@backup ~]# mkdir /backup -- 创建备份目录
[root@backup ~]# chown rsync.rsync /backup -- 修改目录的属主和属组
4. 第四个历程:创建用户列表文件(验证)
[root@backup ~]# echo rsync_backup:oldboy123 >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password -- 修改权限信息
5. 第五个历程:编写配置文件
01. 查看rsync安装包配置文件在什么位置以及叫什么名字
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
02. 编辑配置文件/etc/rsyncd.conf(清空文件中内容,将以下文件粘贴进去)
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
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 = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
03. 配置文件解释
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync --- 指定rsync服务备份目录或数据信息管理用户信息
gid = rsync --- 指定rsync服务备份目录或数据信息管理用户组信息
port = 873 --- 指定服务程序端口信息(如果服务端端口号(xxx)改变,那么客户端使用该服务时端口号(xxx)也要相应改变。eg:rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup --port=xxx)
fake super = yes --- 将uid指令指定的用户可以伪装为管理员用户
use chroot = no --- 提高数据备份安全性,前提需要将备份目录权限与uid信息设置为root用户
max connections = 200 --- 设置最大连接数
timeout = 300 --- 设置连接会话超时时间(闲置状态)
pid file = /var/run/rsyncd.pid --- 记录服务程序pid文件(进程号文件)
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 = 0.0.0.0/32 --- 黑名单:禁止哪个客户端主机地址访问
auth users = rsync_backup --- 指定可以进行认证的用户信息(不需要在系统中创建)
secrets file = /etc/rsync.password --- 用户密码文件(权限600 属组属主root)
[backup] --- 模块信息(可以有多个模块) 模块下面的信息称为局部配置信息
comment = "backup dir by oldboy" --- 模块注释说明信息
path = /backup --- 数据备份目录
6. 第六个历程:启动服务程序
# 启动rsync服务
[root@backup ~]# systemctl start rsyncd
# 查看rsync服务进程(可以确认服务是否成功开启)
[root@backup ~]# ps -ef |grep rsync
root 10137 1 0 17:08 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 10139 10113 0 17:09 pts/0 00:00:00 grep --color=auto rsync
# 查看端口号873的服务是否开启/查看服务名称为rsync的服务是否开启
[root@backup ~]# netstat -lntup|grep 873 -
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 10137/rsync
tcp6 0 0 :::873 :::* LISTEN 10137/rsync
rsync客户端部署过程
1. 交互式实现数据传输:
[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
config
sent 362 bytes received 43 bytes 90.00 bytes/sec
total size is 542 speedup is 1.34
2. 免交互式实现数据传输:
01. 方式一:在客户端创建建一个密码文件
[root@nfs01 ~]# echo oldboy123 >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
config
sent 362 bytes received 43 bytes 810.00 bytes/sec
total size is 542 speedup is 1.34
02. 方式二:配置环境变量实现免交互(环境变量:RSYNC_PASSWORD)
# 编写环境变量(export + 普通变量 = 环境变量)
[root@nfs01 ~]# echo 'export RSYNC_PASSWORD="oldboy123"' >> /etc/profile
# 查看文件中是否有设置好的环境变量
[root@nfs01 ~]# tail -1 /etc/profile
export RSYNC_PASSWORD="oldboy123"
# 激活环境变量
[root@nfs01 ~]# . /etc/profile
# 测试数据传输是否是免交互式
[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
sending incremental file list
config
sent 362 bytes received 43 bytes 810.00 bytes/sec
total size is 542 speedup is 1.34
补充:rsync服务在复制目录时和scp复制目录信息区别
1. rsync可以实现增量复制目录下面的数据信息,scp只能实现全量复制
2. 复制目录时,目录后面有/和没有/是有区别的
scp复制目录时,目录后面加或者不加 / 都只是将目录本身进行复制
rsync复制目录时,目录后面加 / 表示只将目录下面数据内容进行复制
rsync复制目录时,目录后面没 / 表示将目录以及目录下面内容都进行复制 等价于scp