day11.1

day11.1

rsync数据备份

rsync概述

# 为什么使用rsync不用scp
1.scp是基于ssh协议的命令,不是一个服务
2.scp每次都是基于全量拷贝,rsync支持增量拷贝

rsync功能

cp rm scp tar

备份类型

# 全量备份
	将数据全部备份出来
# 增量备份
	基于上一次备份,新增部分的数据备份出来
# 差异备份
	基于全量备份,新增部分的数据备份出来

rsync工作模式

# 本地模式(cp)
Local: rsync [OPTION...] SRC... [DEST]
	cp [OPTION]... SOURCE DEST
rsync [选项] 源文件.. 目标路径
# 远程模式(scp)
Access via remote shell:
Pull: 拉 rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: 推 rsync [OPTION...] SRC... [USER@]HOST:DEST

拉:rsync [选项] [用户@] 主机ip :文件路径 本机目录
推:rsync [选项] [本机文件] [用户@] 主机ip : 目录
# 守护进程模式
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

拉:rsync [选项] [用户@] 主机ip ::配置文件中的模块名 本机目录
推:rsync [选项] [本机文件] [用户@] 主机ip :: 配置文件中的模块名
'注意:rsync拷贝目录时,加不加/是有区别的'
加/:将目录下所有文件拷贝过去,不包括目录本身
不加/:将目录本身和目录下所有文件拷贝过去

rsync官网地址:TP

rsync监听端口:873

rsync的运行架构:C/S B/S

企业中为什么使用守护进程模式

1.远程模式和scp差不多,基于ssh协议
2.需要知道系统的用户名和密码
3.守护进程不需要ssh协议,服务启动后自带端口
4.守护进程可以设置匿名用户,不需要使用系统用户

rsync选项

-a:归档模式传输,等于-tropgDl
-t:保持文件的时间信息
-r:递归拷贝
-o:保持文件属主信息
-g:保持文件属组信息
-p:保持文件权限信息
-D:保持设备文件信息
-l:保留软链接
-v:显示同步过程
-z:压缩,提高传输频率
-p:显示进度
-L:保留软链接指向的文件
--exclude=PATTERN 指定排除不需要的文件模式
--exclude-from=file 指定排除文件
--bwlimit=1 限速传输
--partial 断点传输
--delete 决定数据是否要同步
--passwd-file= 指定密码文件
# rsync服务端的作用:存储备份数据的

服务端操作

# 1.安装
[root@backup ~]# yum install -y rsync

# 2.配置
[root@backup ~]# vim /etc/rsyncd.conf
服务的用户
uid = rsync
服务的用户组
gid = rsync
服务的端口
port = 873
不以root身份运行,传输数据不使用系统用户
fake super = yes
禁锢目录不允许获取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
日志文件
log file = /var/log/rsyncd.log
#####################################
模块名
[backup]
描述信息
comment = welcome to oldboyedu backup!
备份的目录
path = /backup
# 3.创建rsync系统用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
# 4.创建服务端密码文件
[root@backup ~]# vim /etc/rsync.passwd
[root@backup ~]# cat /etc/rsync.passwd
rsync_backup:123
# 5.修改密码文件的权限
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# ll /etc/rsync.passwd 
-rw------- 1 root root 18 May 16 09:36 /etc/rsync.passwd
# 6.创建备份的目录
[root@backup ~]# mkdir /backup
# 7.修改备份目录的属主和属组
[root@backup ~]# chown rsync:rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 May 16 09:44 /backup/
# 8.启动rsync服务并加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
# 9.检查服务进程
[root@backup ~]# ps -ef|grep rsync
# 10.检查服务端口
[root@backup ~]# netstat -lntup|grep 873

客户端操作

# 1.安装
[root@backup ~]# yum install -y rsync
# 2.客户端创建文件密码
[root@web01 ~]# vim /etc/rsync.pass
123(与服务端的一致)
# 3.使用环境变量免交互输密码
[root@web01 ~]# export RSYNC_PASSWORO=123
# 4.推数据
[root@web01 ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
# 5.拉数据
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt

报错

# 用户密码认证失败
[root@web01 ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.用户输入错误
2.密码输入错误
3.密码文件的权限不是600

[root@web01 ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::bak
@ERROR: Unknown module 'bak'
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.模块名不认识

[root@web01 ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
排错过程
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
无法和172.16.1.41rsync服务建立连接
1.防火墙
2.selinux
3.服务没启动
4.服务的端口改了

[root@web01 ~]# rsync -avz /etc/shadow rsync_backup@172.16.1.41::backup --passwordfile=/etc/rsync.pass
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
客户端的密码文件权限也必须是600,否则报错

排错过程

服务端

# 服务端
1.检查配置文件
2.检查密码文件的权限
3.检查密码文件的内容
4.检查模块目录权限

客户端

1.检查命令用户名
2.检查命令模块名
3.检查密码文件权限和内容
4.检查环境变量中的密码

企业级备份案例

先决条件

# 1.时间同步
[root@web01 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com >/dev/null
# 2.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 3.关闭selinux
setenforce 0
sed -i 's#selinux=enforcing#selinux=disabled#g' /etc/sysconfig/selinux

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下: /client_backup 

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至 /client_backup 包名: nfs_172.16.1.31_2022-05- 16.tar.gz

3.客户端最后将备份的数据进行推送至备份服务器

4.客户端每天凌晨1点定时执行该脚本 

5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间 

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据 

2.服务端需要每天校验客户端推送过来的数据是否完整 

3.服务端需要每天校验的结果通知给管理员 

4.服务端仅保留6个月的备份数据,其余的全部删除

脚本实现客户端的需求

1.客户端提前准备存放的备份目录如下,目录规则如下:`/client_backup`

# 命令:mkdir /client_backup
2.客户端在本地打包备份(/etc/passwd)拷贝至`/client_backup`包名:`nfs_172.16.1.31_2022-05-16.tar.gz`

# 命令:cd /etc && tar zcf /client_backup/nfs_172.16.1.31_2022-05-16.tar.gz passwd

3.客户端最后将备份的数据进行推送至备份服务器

# 命令:rsync -az /client_backup/ rsync_backup@172.16.1.41::backup

4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

# 命令:find /client_backup -type f ! -mtime -7|xargs rm -f

5.客户端每天凌晨1点定时执行该脚本
crontab -e
00 01 * * * /bin/sh /root/bakup.sh >/dev/null
## 编写脚本
[root@web01 ~]# vim /root/backup.sh
#!/bin/bash
ml="/client_backup"
host=`hostname`
ip=`/usr/sbin/ifconfig eth1|awk 'NR==2 {print $2}'`
dtime=`date +%F`
export RSYNC_PASSWORD=123


mkdir -p $ml

cd /etc && tar zcf ${ml}/${host}_${ip}_${dtime}.tar.gz passwd

cd $ml && md5sum ${host}_${ip}_${dtime}.tar.gz > ${host}_${ip}_${dtime}.md5

rsync -az ${ml}/ rsync_backup@172.16.1.41::backup

find $ml -type f ! -mtime -7|xargs rm -f

脚本实现服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

2.服务端需要每天校验客户端推送过来的数据是否完整

#命令:cd /backup/ && md5sum -c *2022-05-16.md5

# 配置发邮件
[root@backup ~]# vim /etc/mail.rc
set from=2794552827@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=2794552827@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

3.服务端需要每天校验的结果通知给管理员

#命令:md5sum -c *2022-05-16.md5 |mail -s 'xxx' 123@qq.com

4.服务端仅保留180天的备份数据,其余的全部删除

#命令:find /backup -type f ! -mtime -180|xargs rm -f

# 编写脚本
[root@backup ~]# vim md5.sh 

ml="/backup"

host=`hostname`

ip=`/usr/sbin/ifconfig eth1|awk 'NR==2 {print $2}'`

dtime=`date +%F`

export RSYNC_PASSWORD=123

cd ${ml} && md5sum -c *${dtime}.md5|mail -s "${dtime}校验文件" 2794552827@qq.com>/dev/null

find ${ml} -type f ! -mtime -180|xargs rm -f

测试crontab

# 客户端定时任务
crontab -e
00 01 * * * /bin/sh /root/backup.sh &>/dev/null

# 服务端定时任务
crontab -e
01 01 * * * /bin/sh /root/backup.sh &>/dev/null
posted @ 2022-05-16 17:04  Gabydawei  阅读(35)  评论(0编辑  收藏  举报