rsync

1.什么是备份?

​ 备份就是把文件复制一份储存起来。(给文件加个副本)

2.为什么要备份?

​ 数据重要

​ 保证数据尽可能不丢

​ 快速的恢复数据

3.能不能不做备份

​ 可以,看数据重不重要

4.备份怎么做

​ 完全备份,完全复制一份。效率低,占用空间。

​ 增量备份,只备份变化的那部分。效率高,节省空间。

5.备份使用什么工具

​ 本地备份:cp

​ 远程备份:scp、rsync

6.备份工具rsync基本介绍

​ rsync remote rsync 远程同步,可以实现“不同主机”之间的同步,同时支持增量和全量的同步方式。

7.rsync备份工具应用的几种场景

​ 前置条件:

​ 推push:将本地的数据推到备份服务器

​ 拉pull: 讲备份服务器的数据拉到本地

8.rsync三大传输模式

​ 1.本地传输

​ 2.远程传输

​ 3.守护进程

rsync

​ 先安装工具命令 yum install rsync -y

SYNOPSIS
       Local:  rsync [OPTION...] SRC... [DEST]

       Access via remote shell:
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

1.本地传输方式:

​ 单个主机之间的数据拷贝,类似cp

rsync -avz /root/file.txt  /tmp/
rsync: 命令
-avz: 选项
/root/file.txt 备份的源
/tmp	备份到哪

2.远程传输的方式:

​ 借助ssh协议进行传输,意味着需要知道对端的用户名及密码

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

1.推

​ 将本地/root/file.txt文件推送到172.16.1.31 服务器的 /opt 目录,使用的是 31 服务器的 root用户。

[root@backup ~]# rsync -avz /root/file.txt root@172.16.1.31:/opt
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

2.拉

​ 拉取远程服务器 172.16.1.31 /opt目录下的file.txt 文件 至 本地 /mnt 目录。

[root@backup ~]# rsync -avz root@172.16.1.31:/opt/file.txt /mnt/

3.推送目录

[root@backup ~]# rsync -avz /etc/ root@172.16.1.31:/opt/
[root@backup ~]# rsync -avz /etc root@172.16.1.31:/opt/
注意:
	1.添加 / 表示推送目录下的所有内容
	2.不添加 / 表示推送该目录本身,以及目录下的内容

依托对端主机的用户身份权限:
	1.使用系统root用户 ( 不安全 )
	2.使用系统的普通用户 ( 会出现权限不够的情况 )

3.守护进程模式:

​ 不使用系统用户,使用的是一个虚拟的用户(不存在的用户) 来实现推送。

Access via rsync daemon:
	Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
	Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

​ 服务:运行在我们的后台,持续提供服务支持,就三步:

0.规划
172.16.1.41 作为我们的 Rsync 服务端
172.16.1.31 作为我们的 Rsync 客户端

1.安装

[root@backup ~]# yum install rsync -y

2.配置

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                      # 运行进程的用户
gid = rsync                      # 运行进程的用户组
port = 873                       # 监听端口
fake super = yes                 # 不需要rsync已root身份运行,就可以存储文件的完整属性
use chroot = no                  # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200            # 最大连接数
timeout = 600                    # 超时时间
ignore errors                    # 忽略错误信息
read only = false                # 对备份数据可读写
list = false                     # 不允许查看模块信息
auth users = rsync_backup        # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径

[backup]                # 定义模块信息
comment = commit        # 模块注释信息
path = /backup          # 定义接收备份数据目录
–初始化

​ 根据配置文件解读,我们发现还需要做一些初始化的操作:

2.1)创建Rsync进程运行的用户  ( rsync )
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# id rsync
uid=1008(rsync) gid=1008(rsync) 组=1008(rsync)

2.2) 定义虚拟用户名rsync_bakcup的密码.
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd

2.3) 创建存储的数据的目录 /backup
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/

3.启动

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

5.测试

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
	1.使用172.16.1.31 推送 client.txt 文件至 备份服务器 41 的 《backup模块》
	[root@nfs ~]# rsync -avz client.txt rsync_backup@172.16.1.41::backup

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
	2.拉取 172.16.1.41 备份服务器 backup模块下的数据
	[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt

6.rsync选项:

-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
–exclude=PATTERN #指定排除不需要传输的文件模式
–exclude-from=file #文件名所在的目录文件
–bwlimit=100 #限速传输
–partial #断点续传
–delete #让目标目录和源目录数据保持一致

实战1:

Rsync的Limit限速 1=1MB

[root@nfs ~]# rsync -avz --bwlimit 1 -P /opt/1.txt rsync_backup@172.16.1.41::backup
实战2:

Rsync实现数据无差异同步

推: 客户端 推送 到 服务端,服务端必须与客户端保持一致。
	[root@nfs ~]# rsync -avz --delete  -P /opt/ rsync_backup@172.16.1.41::backup
拉: 客户端 拉取 服务端数据,服务端有什么,客户端就有什么。 客户端必须与服务端完全一致。
	[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.41::backup /opt/
实战3:

无需输入密码实现rsync推送和拉取

方式一: --password-file
[root@nfs opt]# echo "123456" > /etc/rsync.pass
[root@nfs opt]# chmod 600 /etc/rsync.pass
[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.41::backup /opt/ --password-file=/etc/rsync.pass

方式二: 设定环境变量方式
[root@nfs opt]# export RSYNC_PASSWORD=123456	#只当前窗口有用,换一个窗口就没用了(放到脚本中使用,非常的方便)
[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.41::backup /opt/

回顾

问题1:

rsync用户与rsync_backup用户有什么区别?

	1.rsync用户是rsyncd进程运行的用户身份
	2.rsync_backup是rsync认证时需要使用的虚拟用户,可以自行定义。

问题2:

rsync.passwd 与 rsync.pass 有什么关系?
其实没有关系。

	1.rsync.passwd 该文件主要定义 虚拟用户名称 以及 虚拟用户对应的密码  (服务端才定义)
	2.rsync.pass其实可以没有,也可以是任何文件。因为这里面只有密码,便于我们向rsync推送数据时,无需密码认证  (客户端,只能有密码,不能有用户名)  或者 设定环境变量 RSYNC_PASSWORD

问题3:

为什么写入到backup中的文件或目录 属主和属组 都是 rsync呢?

	客户端推送文件至服务端,服务端需要以该进程的用户身份将文件存储下来,所以属主和数组就发生变化。( 变化为了 rsync该进程的运行用户身份)

问题4:

什么时候使用守护进程模式,什么时候使用远程传输模式?

	1.守护进程可以设置定时任务进行,这种常用于定期备份。
	2.远程传输方式主要用户临时操作。
	注意:不要搞混了,他们之间是区别的?
		用户名称:
			远程传输:  系统用户  root
			守护进程:  虚拟用户  rsync_backup
		拷贝资源:
			远程传输:  可以是系统中任何路径下的文件	
			守护进程:  固定模块下的资源			

案列

已知3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

角色外网IP(NAT)内网IP(LAN)主机名
WEBeth0:10.0.0.7eth1:172.16.1.7web01
NFSeth0:10.0.0.31eth1:172.16.1.31nfs01
Rsynceth0:10.0.0.41eth1:172.16.1.41backup

客户端需求:

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本

1.我要备份什么?
/etc/rc.local /etc/fstab /etc/hosts
/var/spool/cron/ /etc/firewalld /server/scripts

2.我要备份到哪里?
/backup目录
该主机的主机名称_该主机的IP地址_今天的日期

3.我要推送到哪儿?
备份服务器 172.16.1.41 backup模块

实现:

散货–>装车–>运输–>下一个仓库点

1.我们要准备一个目录

[root@nfs ~]# mkdir -p  "/backup/$(hostname)_$(ifconfig eth1 | awk '/inet / {print $2}')_$(date +%F)"

2.将文件备份到该目录中

[root@nfs ~]# cp -r /etc/rc.local /etc/fstab  /etc/hosts  /backup/nfs_172.16.1.31_2020-04-15/

3.使用rsync命令进行运输

[root@nfs ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup

4.保留最近7天

[root@nfs ~]# for i in {1..30};do date -s 2020/04/$i && sh /scripts/clinet_push_data.sh ;done
[root@nfs ~]# find /backup  -type d -mtime +7  | xargs rm -rf

5.编写定时任务

[root@nfs backup]# crontab -l
#backup
* * * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null
#00 01 * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null

脚本实现:

(将手动执行成功的1 2 3 4 5 写成一个脚本)

[root@nfs backup]# cat /scripts/clinet_push_data.sh
#!/usr/bin/bash
# 客户端推送备份的数据至备份服务器   

#0.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
Time=$(date +%F)
Path=/backup
DirName="${Host}_${Addr}_${Time}"

#1.我们要准备一个目录
mkdir -p  "$Path/$DirName"

#2.将文件备份到该目录中
cp -r /etc/rc.local /etc/fstab  /etc/hosts  $Path/$DirName

#3.使用rsync命令进行运输
export RSYNC_PASSWORD=123456
rsync -avz $Path/ rsync_backup@172.16.1.41::backup

#4.保留本地7天的数据
find $Path  -type d -mtime +7  | xargs rm -rf

服务端需求:

1.服务端部署rsync,用于接收客户端推送过来的备份数据
已完成(如果没有完成,请自行操作)

2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员

1.修改客户端推送数据脚本:

​ 将散货 --> 打包 --> 贴上封条 --> 推送给服务端

[root@nfs ~]# cat /scripts/clinet_push_data.sh
#!/usr/bin/bash

# 客户端推送备份的数据至备份服务器  

#0.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
Time=$(date +%F)
Path=/backup
DirName="${Host}_${Addr}_${Time}"

#1.我们要准备一个目录
mkdir -p  "$Path/$DirName"

#2.将文件备份到该目录中
cd / && \
  
md5sum $Path/$DirName/*.tar.gz > $Path/$DirName/check_flag_$Time

#3.使用rsync命令进行运输
export RSYNC_PASSWORD=123456
rsync -avz $Path/ rsync_backup@172.16.1.41::backup

#4.保留本地7天的数据
find $Path  -type d -mtime +7  | xargs rm -rf

2.服务端:

​ 根据客户端推送的封条 --> 校验数据是否一致,最后通知管理员。

[root@backup ~]# cat /scripts/check_clinet_data.sh
#!/usr/bin/bash

# 检查客户端推送的数据  

#0.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Time=$(date +%F)
Path=/backup

#1.找到当天的check_flag文件,校验数据是否是完整的,并且将校验结果存储至某个文件中
find $Path/ -type f -name "check_flag_$Time" | xargs md5sum -c > $Path/result_$Time

#3.将校验的结果通知给管理人员
mail -s "Rsync Backup $Time" #收件人邮箱 <$Path/result_$Time

#4.服务端仅保留6个月的备份数据,其余的全部删除
find $Path  -type d -mtime +180  | xargs rm -rf

最后记得配置定时任务:

配置发件人邮箱账号密码:

[root@backup ~]# yum install mail.rc -y
[root@backup ~]# vim /etc/mail.rc
set from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
set smtp-auth-password=#客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

如何快速备份一台新的机器?

[root@web01 ~]# rsync -avz 172.16.1.31:/scripts /

接下来完整的测试一把,测试完成后,需要将时间修改为对应的真实时间。

nfs、web:
[root@nfs ~]# crontab -l

** * * */usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null

backup:
[root@backup ~]# crontab -l
*/2 * * * * /usr/bin/sh /scripts/check_clinet_data.sh &>/dev/null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值