Rsync复制软件应用和实践
1、什么是rsync?
Rsync,Rsync英文全称为Remote synchronization rsync
开源的、高速的、可实现本地以及远程,全量以及增量的数据复制(拷贝)工具
2、全量和增量的区别
全量复制:
[root@nfs01 ~]# cp -a /etc/ /opt/
[root@nfs01 ~]# \cp -a /etc/ /opt
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# \cp -a /etc/ /opt/
增量复制:
只复制oldboy.txt
3、rsync的作用?
工作中需要定时/实时数据备份。本地服务器目录、不同机器、不同机房之间的数据备份。都可以用rsync来完成。
4、rsync的功能特性?
(1)、支持拷贝普通文件与特殊文件,如:链接文件、设备文件等
(2)、支持排除指定文件或目录同步的功能,相当于打包命令tar的组排功能
(3)、可以做到保持源文件或目录权限、时间、软链接、属主、组等所有属性均不改变
(4)、可实现增量复制,即只复制发生变化的数据,因此数据传输效率很高
(5)、可使用rcp,rsh,ssh等方式来配合进行隧道加密文件(rsync本身不对数据加密)
(6)、可以通过socket(进程方式)传输文件和数据(服务端和客户端)
(7)、支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像
5、增量复制原理
使用quick check算法,只对增量的部分复制,根据大小属性的变化进行复制。
2.x比对差异后复制;3.x一边比对一边复制
6、rsync三种工作模式介绍
(1)、本地(local)
Rsync就是一个命令
rsync [OPTION...] SRC... [DEST]
rsync命令 参数选项 [源目录或文件] 目的目录或文件
A、把数据从一个地方复制到另一个地方(仅在一台机器增量),相当于cp。
B、通过加参数实现删除的功能,相当于rm命令
C、查看属性信息功能,相当于LS
实践:
a、拷贝实践
[root@backup01~]# rsync /etc/hosts /opt
[root@backup01~]# ls /opt
hosts
[root@backup01~]# \cp /etc/hosts /opt
保持属性
[root@backup01~]# rsync -zrtopg /etc/hosts /opt
[root@backup01~]# ls -l /etc/hosts
/opt/hosts
-rw-r--r--. 1 root root 332 4月 12 11:24 /etc/hosts
-rw-r--r-- 1 root root 332 4月 12 11:24 /opt/hosts
b、删除实践
[root@backup01/]# touch null.txt
[root@backup01/]# cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.etiantian.org
172.16.1.61 m01
[root@backup01/]# rsync --delete /null.txt /opt/hosts
<===让前面的null.txt和后面的hosts一样
rsync: --delete does not work without--recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1)at main.c(1567) [client=3.1.2]
[root@backup01/]# rsync -r --delete /null.txt /opt/hosts
[root@backup01/]# cat /opt/hosts
删除目录下的所有文件:
[root@backup01 ~]# mkdir /null
[root@backup01 ~]# rsync -r --delete /null/ /opt/ #让后面opt和前面null目录内容保持一致
[root@backup01 ~]# ls /opt/
c.查看属性
[root@backup01 ~]# rsync /etc/hosts
-rw-r--r-- 332 2019/04/12 11:24:41 hosts
(2)、远程shell模式
借助类似ssh隧道传输数据,适合不同的机器之间复制。
Pull,拉:从远端拉取到本地。
Push,推:从本地推到远端。
rsync [OPTION...] SRC... [USER@]HOST: [DEST]
rsync命令 参数选项 本地路径 [认证用户]@[主机地址]:[目标路径]
Push实践:
[root@nfs01~]# rsync -avz /etc/hosts root@172.16.1.41:/opt
The authenticity of host '172.16.1.41
(172.16.1.41)' can't be established.
ECDSA key fingerprint is
SHA256:3T7m4j67Ht0atDzvJH+kVWMV0nklv8OeKgpkID0fY6Q.
ECDSA key fingerprint is
MD5:9a:72:5b:30:02:22:a1:65:b7:03:70:a3:7a:27:e8:e0.
Are you sure you want to continue
connecting (yes/no)? yes
Warning: Permanently added '172.16.1.41'
(ECDSA) to the list of known hosts.
root@172.16.1.41's password:
sending incremental file list
hosts
sent 218 bytes received 35 bytes 20.24 bytes/sec
total size is 332 speedup is 1.31
检查:
[root@backup01/]# ll /opt
总用量 4
-rw-r--r-- 1 root root 332 4月 12 11:24 hosts
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
上述命令是等价的。-e 指定通道 ssh ssh服务连接客户端 -p 22指定22端口。
推拉:
A、参照物,执行命令的机器
B、root@172.16.1.41 使用的用户和主机,就用主机和用户的密码
强调一个重点:适合rsync
Null和null/ 区别:null是目录和目录下的内容
null/ 只是目录下的内容,不含本身。
(3)、rsync守护进程模式
首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据
企业运维的重要模式:
Rsync服务模式:*****开启后台进程,接受别人访问
7、rsync命令参数
企业常用参数组合:-avz或者-vzrtopg
8、rsync守护进程模式应用实践
第一步:以下操作都是在backup服务器
(1)、安装
[root@backup01/]# rsync --version
rsync version 3.1.2 protocol version 31
(2)、配置配置文件/etc/rsyncd.conf
备份
[root@backup01/]# cp /etc/rsyncd.conf
{,.ori}
[root@backup01/]# cat
>/etc/rsyncd.conf<<EOF
> #rsync_config_______________start
> #created by oldboy
> #site: http://www.oldboyedu.com
> uid = rsync
> gid = rsync
> use chroot = no
> max connections = 200
> timeout = 600
> 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 = 0.0.0.0/32
> auth users = rsync_backup
> secrets file = /etc/rsync.password
> [backup]
> comment = welcome to oldboyedu backup!
> path = /backup/
> EOF
[root@backup01/]# cat /etc/rsyncd.conf -n
1 #rsync_config_______________start
2 #created by oldboy
3 #site: http://www.oldboyedu.com
4 uid = rsync < === 管理备份目录的用户
5 gid = rsync < ===管理备份目录的用户组
6 use chroot = no < ===安全功能,数据是否锁定到备份目录
7 max connections = 200 <
=== 并发连接,同时多少客户端访问
8 timeout = 600 < === 超时实践
9 pid file = /var/run/rsyncd.pid <
=== 进程号所在文件
10 lock file = /var/run/rsync.lock <
=== 锁文件
11 log file = /var/log/rsyncd.log < === 日志文件,查看报错等
12 ignore errors < === 忽略错误
13 read only = false < === 可写
14 list = false < === 不允许列表
15 hosts allow = 172.16.1.0/24 <
=== 授权那些主机可以访问
16 hosts deny = 0.0.0.0/32 < ===拒绝哪些主机不允许访问
17 auth users = rsync_backup <
=== 远程虚拟连接用户
18 secrets file = /etc/rsync.password
< === 存放密码的文件。格式:用户名:密码 权限:必须600
19 [backup] < ===【模块】远程访问时使用模块名访问
20 comment = welcome tooldboyedu backup! <===说明注释
21 path = /backup/ <
===服务器端用于备份的目录。用户和组:rsync.rsync
要了解知识的源头:
Man rsync 查命令的参数
Man rsyncd.conf 查配置参数
(3)、启动和检查
Rsync -daemon(c6及以前)
systemctl enable
rsyncd
systemctl status
rsyncd
[root@backup ~]#ps -ef|grep sync|grep -v grep #检查进程
root 7521 1 0 11:39 ? 00:00:00 /usr/bin/rsync --daemon--no-detach
[root@backup ~]#
netstat -lntup|grep 873 #检查端口
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7521/rsync
tcp6 0 0 :::873 :::* LISTEN 7521/rsync
[root@backup ~]#
lsof -i :873 #检查端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7521 root 3u IPv4 41439 0t0 TCP *:rsync (LISTEN)
rsync 7521 root 5u IPv6 41440 0t0 TCP *:rsync (LISTEN)
(4)、配置密码文件
[root@backup01~]# echo
"rsync_backup:oldboy" > /etc/rsync.password
[root@backup01~]# chmod 600 /etc/rsync.password
[root@backup01~]# cat /etc/rsync.password
rsync_backup:oldboy
[root@backup01~]# ls -l /etc/rsync.password
-rw------- 1 root root 20 4月 15 11:52 /etc/rsync.password
[root@backup01~]# useradd rsync
[root@backup01~]# id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)
[root@backup01~]# mkdir -p /backup
[root@backup01~]# chown -R rsync.rsync
/backup/
[root@backup01~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:13 /backup/
服务端配置完成。。。
第二步:以下操作都是在客户端服务器
认证密码文件
方法一:
[root@nfs01~]# echo "oldboy" >
/etc/rsync.password
[root@nfs01~]# chmod 600
/etc/rsync.password
[root@nfs01~]# cat /etc/rsync.password
oldboy
[root@nfs01~]# ls -l /etc/rsync.password
-rw------- 1 root root 7 4月 15 11:55 /etc/rsync.password
方法二:
[root@nfs01~]# echo ' export RSYNC_PASSWORD=oldboy'>>/etc/bashrc
[root@nfs01~]# echo $UID
0
[root@nfs01~]# tail -1 /etc/bashrc
export RSYNC_PASSWORD=oldboy
[root@nfs01~]# . /etc/bashrc
[root@nfs01~]# echo $RSYNC_PASSWORD
Oldboy
rsync客户端nfs01配置完成
第三步:守护进程模式,客户端rsync的命令语法
配置服务器端守护进程,实现数据传输:
1、服务器端守护进程2、客户端执行命令
pull,拉:从远端拉取到本地。
语法1(常用):
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync命令 参数选项 [虚拟用户]@[主机地址]::[模块名] 本地路径
语法2:
rsync [OPTION...] rsync://[USER@]HOST::SRC... [DEST]
rsync命令 参数选项 rsync://[虚拟用户]@[主机地址]/[模块名] 本地路径
push,推:从本地推到远端。
语法1(常用):
rsync [OPTION...] [DEST] [USER@]HOST::SRC...
rsync命令 参数选项 本地路径 [虚拟用户]@[主机地址]::[模块名]
语法2:
rsync [OPTION...] [DEST] rsync://[USER@]HOST::SRC...
rsync命令 参数选项 本地路径 rsync://[虚拟用户]@[主机地址]/[模块名]
第四步:测试成果
[root@nfs01~]# rsync -avz /etc/hosts
rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 222 bytes received 43 bytes 176.67 bytes/sec
total size is 332 speedup is 1.25
服务端检查:
[root@backup01~]# ls /opt
hosts
�