第1章 rsync服务及搭建备份服务器
1.1 什么是Rsync
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据复制(拷贝)的优秀工具。
1.2 全量和增量
全量
全部备份
增量
差异化备份,对更新的那一部分进行备份
1.3 Rsync的作用
工作中的定时/实时数据备份、本地服务器目录、不同机器、不同机房之间的数据备份都可以使用Rsync完成。
1.4 Rsync的功能特性
支持拷贝普通文件与特殊文件,如链接文件,设备文件等。
支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
可实现增量复制,既只复制发生变化的数据,因此数据传输效率很高。
可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像
1.5 增量复制原理
使用quick check算法,只对增量的部分复制,根据大小属性的变化进行复制。
版本
复制原理
Rsync 2.x
比对完所有内容后,对差异的内容进行复制
Rsync 3.x
一边比对文本内容,一边对差异进行复制。
1.6 Rsync三种工作模式介绍
1.6.1 本地(local)
在本地使用,rsync就是一个命令。
语法格式:
rsync
[OPTION...]
SRC...
[DEST]
rsync命令
参数选项
[源目录或文件]
目的目录或文件
命令作用:
把数据从一个地方复制到另一个地方(仅在一台机器增量),相当于cp命令。
通过加参数实现删除功能,相当于rm命令。
查看属性信息功能,相当于ls命令。
拷贝实践:
1.一般复制:
[root@backup ~] rsync /etc/hosts /opt <===拷贝文件hosts
[root@backup ~]$ ls /opt <===查看结果
hosts
2.保持属性复制:
[root@backup ~] ls -l /opt/hosts /etc/hosts <===查看属性
-rw-r--r-- 1 root root 332 4月 12 11:25 /etc/hosts
-rw-r--r-- 1 root root 332 4月 12 11:25 /opt/hosts
删除实践:
1.删除文件内容:
[root@backup ~] 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@backup ~] cat /opt/hosts <===查看是否清空
2.删除目录下所有内容:
[root@backup ~] rsync -r --delete /null/ /opt/ <===让后面opt和前面null目录内容保持一致
[root@backup ~]$ ls /opt/
查看属性:
[root@backup ~]$ rsync /etc/hosts
-rw-r--r-- 332 2019/04/12 11:25:32 hosts
重点:只适合rsync
目录
区别
null
目录和目录下的内容
null/
只是目录下的内容,不含本身
1.6.2 远程shell模式
借助类似ssh隧道传输数据,适合不同的机器之间的异地拷贝,相当于scp,但是scp是远程全量拷贝。
远程拷贝的两种模式:
1、pull(拉):从远端拉取到本地
语法格式:
rsync
[OPTION...]
[USER@]HOST:SRC...
[DEST]
rsync命令
参数选项
[认证用户]@[主机地址]:[源路径]
本地路径
2、push(推):从本地推到远端
语法格式:
rsync
[OPTION...]
SRC...
[USER@]HOST:[DEST]
rsync命令
参数选项
本地路径
[认证用户]@[主机地址]:[目标路径]
示例:
[root@nfs01 ~]$ rsync -avz /etc/hosts root@172.16.1.41:/opt/ <===加密传输。
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 219 bytes received 35 bytes 14.51 bytes/sec
total size is 332 speedup is 1.31
检查:
[root@backup ~] ls
hosts
以下两条命令是等价的。其中:
参数
含义
-e ssh
指定使用ssh通道
-p 22
指定使用22端口
rsync -avz /etc/hosts root@172.16.1.41:/opt/
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
示例:
[root@nfs01 ~]# rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
sent 44 bytes received 12 bytes 22.40 bytes/sec
total size is 332 speedup is 5.93
pull(拉)的命令:
rsync -avz root@172.16.1.41:/opt/hosts /opt
rsync -avz -e "ssh -p 22" root@172.16.1.41:/opt/hosts /opt
1.6.3 rsync守护进程模式
rsync服务模式:开启后台进程,接受别人访问。
守护进程模式首先要搭建rsync服务端(即守护进程),然后才能在客户端实现推拉数据。守护进程模式是企业运维的一个重要的模式。
1.7 rsync命令参数
参数
说明
-v
--verbose 显示输出过程
-z
--compress 压缩
-a
--archive 多参数集合(-rtopgDl)
-r
--recursive 递归
-t
--times 保持修改时间属性
-o
--owner 保持属主不变
-p
--perms 保持权限不变
-g
--group 保持用户组不变
-l
--links 保持拷贝软连接
-q
--quiet 安静的拷贝
-e
指定传输通道
--bwlimit=KBPS
限制I/O带宽,KBytes per second。
--delete
删除
--exclude
排除
--exclude-from
从文件中排除
企业常用参数组合: -avz或者-vzrtopg
1.8 rsync守护进程模式应用实践
1.8.1 以下操作都是在backup服务器
1.8.1.1 安装rsync命令,若已安装,可以忽略
[root@backup ~] yum install rsync <===安装rsync
1.8.1.2 配置配置文件
备份:
cp /etc/rsyncd.conf{,.ori}
修改文件信息:
cat -n /etc/rsyncd.conf
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 fake super = yes --->不用root用户也可以存储文件的完整属性
8 max connections = 200 --->最大并发连接数(同时多少客户端访问)
9 timeout = 600 --->超时时间
10 pid file = /var/run/rsyncd.pid --->进程号所在文件
11 lock file = /var/run/rsync.lock --->锁文件
12 log file = /var/log/rsyncd.log --->日志文件,查看报错等信息*****
13 ignore errors --->忽略错误
14 read only = false --->可写
15 list = false --->不允许列表
16 hosts allow = 172.16.1.0/24 --->授权哪些主机可以访问
17 hosts deny = 0.0.0.0/32 --->哪些主机不允许访问
18 auth users = rsync_backup --->远程虚拟连接用户
19 secrets file = /etc/rsync.password --->存放密码的文件(格式为(用户名:密码) 权限:必须为600)
20 [backup] --->[模块名]远程访问一般使用模块名访问
21 comment = welcome to oldboyedu backup! --->说明,注释
22 path = /backup/ --->服务端用户备份的目录(用户和组,rsync.rsync)
创建用户和备份目录:
[root@backup ~] id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)
[root@backup ~] chown -R rsync.rsync /backup/ <===修改用户和用户组
[root@backup ~]$ ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/
1.8.1.3 启动和检查rsyncd服务
启动:
c6及以前:
rsync --daemon
c7:
systemctl start rsyncd <===开启服务
systemctl enable rsyncd <===开启开机自启动
systemctl status rsyncd <===检查服务状态
检查进程和端口:
[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)
1.8.1.4 配置密码文件
[root@backup ~] chmod 600 /etc/rsync.password
[root@backup ~] ll /etc/rsync.password
-rw------- 1 root root 20 4月 15 11:52 /etc/rsync.password
到这里rsync服务端已配置完成
1.8.2 以下操作在客户端服务器
在客户端认证密码,有两种方法:(可以二选一)
方法1:认证密码文件
[root@nfs01 ~] chmod 600 /etc/rsync.password
[root@nfs01 ~] ll /etc/rsync.password
-rw------- 1 root root 7 4月 15 11:55 /etc/rsync.password
方法2:配置特殊变量 echo ' export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~] echo $RSYNC_PASSWORD
oldboy
到这里rsync客户端 nfs01 配置完成
1.8.3 守护进程模式,客户端rsync的命令语法
配置服务器端守护进程,实现数据传输:
服务器端守护进程。
客户端执行命令。
1.8.3.1 Pull(拉):从远端拉取到本地。
语法1(常用):
rsync
[OPTION...]
[USER@]HOST::SRC...
[DEST]
rsync命令
参数选项
[虚拟用户]@[主机地址]::[模块名]
本地路径
语法2:
rsync
[OPTION...]
rsync://[USER@]HOST::SRC...
[DEST]
rsync命令
参数选项
rsync://[虚拟用户]@[主机地址]/[模块名]
本地路径
1.8.3.2 Push(推):从本地推到远端。
语法1(常用):
rsync
[OPTION...]
[DEST]
[USER@]HOST::SRC...
rsync命令
参数选项
本地路径
[虚拟用户]@[主机地址]::[模块名]
语法2:
rsync
[OPTION...]
[DEST]
rsync://[USER@]HOST::SRC...
rsync命令
参数选项
本地路径
rsync://[虚拟用户]@[主机地址]/[模块名]
1.8.4 测试成果与报错解决方法
报错1:
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
原因分析:无效的UID:rsync,需要添加用户rsync,并且发现没有/backup目录,需要创建目录,并将用户和用户组都改为rsync。
解答:
[root@backup ~] id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)
[root@backup ~] chown -R rsync.rsync /backup/
[root@backup ~]$ ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/
报错2:
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
rsync: chgrp ".hosts.YDuTjO" (in backup) failed: Operation not permitted (1)
sent 223 bytes received 124 bytes 694.00 bytes/sec
total size is 332 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
原因分析:/etc/rsyncd.conf文件内缺少参数,导致文件的存储属性不完整。
解答:增加如下参数到/etc/rsyncd.conf
fake super = yes <===增加的参数:不用root用户也可以存储文件的完整属性。
This allows the full attributes of a file to be stored without having to have the daemon actually running as root.
[root@backup ~] systemctl restart rsyncd
参数添加完后再测试:结果成功,没有报错
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 89 bytes received 49 bytes 276.00 bytes/sec
total size is 332 speedup is 2.41
服务端检查结果:
[root@backup ~]$ ls /backup/
hosts
如果客户端按照环境变量的方式配置,则可以忽略--password-file=/etc/rsync.password参数。
[root@nfs01 ~]$ rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
sent 52,071 bytes received 644 bytes 105,430.00 bytes/sec
total size is 31,244,350 speedup is 592.70
测试增量
[root@nfs01 ~] rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
etc/oldboy.txt
sent 52,098 bytes received 655 bytes 105,506.00 bytes/sec
total size is 31,244,350 speedup is 592.28
第二种语法:
[root@nfs01 ~]$ rsync -avz /etc rsync://rsync_backup@172.16.1.41/backup
sending incremental file list
sent 52,070 bytes received 644 bytes 105,428.00 bytes/sec
total size is 31,244,350 speedup is 592.71
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。copy的。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。