06-备份任务实战

今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用。

  • 先看需求

  • 再讲解

  • 再次动手实践

客户端需求

客户端需求:
1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录)
2.客户端备份的数据必须存放至以 "主机名_ip地址_当前时间" 命名的目录中
3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器
4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间

服务端需求

服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除

注意:所有服务器的备份目录必须都为/momo

客户端需求拆解

先把大需求,拆分为每一个小需求,思考出解决办法,然后再综合操作,也可以写成脚本。

最后定时任务,可以执行该脚本,完成这一系列的需求要求的操作
 

1.打包备份

客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录)

以后见到需求,某任务,要写入定时任务

  • 把其他所有的事全搞定了,最后再去写入定时任务。注意tar命令打包,尽量以相对路径去打包

- 注意tar命令打包,尽量以相对路径去打包
- /etc目录是为了备份系统配置文件、应用配置文件
- /var/log是为了备份所有应用程序的日志

1.需求是创建/backup目录
mkdir -p /backup

/etc
/var/log


[root@nfs-31 /]#cd / && tar -zcf /backup/etc.tgz etc
[root@nfs-31 /]#cd / && tar -zcf /backup/log.tgz var/log

[root@nfs-31 /]#ls /backup/ -lh
total 11M
-rw-r--r-- 1 root root 9.4M Apr 21 12:03 etc.tgz
-rw-r--r-- 1 root root 698K Apr 21 12:04 log.tgz


2.文件夹命名要求

2.客户端备份的数据必须存放至以"主机名_ip地址_当前时间"命名的目录中

期望的结果是,如nfs-31_10.0.0.31_2022-04-19

1.提取主机名
$(hostname)
`hostname`

2.提取ip地址

$(ifconfig eth0 | awk 'NR==2{print $2}')

3.时间设置
$(date "+%F")




4.拼接在一起,文件夹命名的命令如下
mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")


5.创建文件夹,你也可以用内网ip操作
要求,在备份目录下,创建以格式要求的文件夹

mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")

6.检查最终的客户端备份目录

ls /backup

7.备份的etc和log数据,得在这个目录中
[root@nfs-31 /]#cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/etc.tgz etc



[root@nfs-31 /]#cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/log.tgz var/log

3.文件传输

3.客户端最后通过rsync命令推送本地已经打包好的备份文件至rsyncd服务器

需求,把/backup目录下的数据,发给备份服务器
# 去看rsync服务端提供的账户密码

# 客户端还得添加密码 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
export RSYNC_PASSWORD=momo666


rsync -avzP /backup/ momo01@10.0.0.41::momo_data

4.删除过期文件

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

find  /backup  -type f -mtime +7 -delete

5.整合脚本

吧客户端的所有部署操作,写成脚本,待会交给定时任务执行即可

把上述拆解的过程,写成一个脚本、批量执行。

当然这个脚本还可以有多的优化。

#!/bin/bash

# 主动在脚本中,定义path变量,防止命令无法执行
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 1.创建目录,注意目录名字规则
mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")

# 2.打包备份数据
cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/etc.tgz etc

cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/log.tgz var/log


# 2.1 对数据进行校验,生成校验值的文件
[root@nfs-31 ~]#md5sum /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/*.tgz > /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/all_data_md5.txt




# 3.传输客户端备份数据到,rsync备份服务器上,别忘记是如何验证密码的
export RSYNC_PASSWORD=momo666
rsync -avzP /backup/ momo01@10.0.0.41::momo_data


# 4.删除过期文件
find /backup -type f -mtime +7 -delete


6.调试脚本

只显示执行过程,而不会真的执行,发生修改,用于调试程序 -x参数

shell提供了-x参数,能让你看到脚本执行过程,用于调试脚本,不会真的产生数据变动,只会看到执行的过程日志

bash -x my_rsync.sh

7.定时任务

1.确保crond是否运行
systemctl status crond

2.写定时任务语句
crontab -e

* * * * * /bin/bash /my_rsync.sh

3.定时任务,最后再去执行

服务端需求拆解

1.脚本化部署rsyncd服务端

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

配置rsyncd服务端的的全流程,也可以写成脚本,一键安装了

# 1.安装rsync服务
yum install rsync -y

# 2.写配置文件
cat > /etc/rsyncd.conf <<EOF
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = momo01
secrets file = /etc/rsync.momo
log file = /var/log/rsyncd.log
#####################################
[momo_data]
comment = yuchaoit.cn about rsync
path = /momo/

[momo_data2]
comment = this is secord backup dir,to website data..
path = /momo2

EOF

# 3.创建配置文件定义的信息
mkdir -p /{momo,momo2}
chown -R www.www /momo
chown -R www.www /momo2

touch /etc/rsync.momo
chmod 600 /etc/rsync.momo

# 4.创建用于连接的账户密码
echo "momo01:momo666" > /etc/rsync.momo


# 5. 重启服务
systemctl restart rsyncd
 

1.1 修改服务端的rsync安装为脚本

install_rsync.sh

#!/bin/bash
# 1.安装rsync服务
yum install rsync -y

# 2.写配置文件
cat > /etc/rsyncd.conf <<EOF
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = momo01
secrets file = /etc/rsync.momo
log file = /var/log/rsyncd.log
#####################################
[momo_data]
comment = yuchaoit.cn about rsync
path = /momo/

[momo_data2]
comment = this is secord backup dir,to website data..
path = /momo2

EOF

# 3.创建配置文件定义的信息
mkdir -p /{momo,momo2}
chown -R www.www /momo
chown -R www.www /momo2

touch /etc/rsync.momo
chmod 600 /etc/rsync.momo

# 4.创建用于连接的账户密码
echo "momo01:momo666" > /etc/rsync.momo


# 5. 重启服务
systemctl restart rsyncd


给脚本添加执行权限 chmod u+x install_rsync.sh

./install_rsync.sh
 

2.校验数据完整性

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

客户端先生成校验信息,回头改脚本

此时在rsync服务端,可以通过md5sum命令校验文件完整性

3.邮件通知

让脚本执行的结果,告诉运维,它正确的执行了,数据备份也是没问题的

如果有问题,运维看到邮件也会立即去处理了

运维在公司里,每天第一件事就打开邮箱,看看其他组的同事是否发来的故障邮件,然后根据邮件解决问题,回复邮件。

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

这里你就照抄就好,固定步骤而已,更换为你自己的qq邮箱即可

然后需要打开qq邮箱的smtp服务器的授权码,自己去获取

注意授权码别泄露给别人

#1.安装配置mailx:
yum install mailx -y

#2.邮箱配置文件,给你的自己的信息
利用的邮箱的smtp协议,需要打开你的qq,163邮箱的smtp功能即可
如下的信息,改为你自己的即可
邮箱的授权码,需要自己去获取



cat > /etc/mail.rc << 'EOF'
set from=877348180@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=877348180@qq.com
set smtp-auth-password=irmmuvbeibwxbbee
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
EOF




#3.服务端生成备份数据的校验结果文件,吧这些信息发个邮件发给运维的邮箱
md5sum -c /momo/nfs-31_10.0.0.31_2022-04-21/all_data_md5.txt > /momo/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt


md5sum -


#4.校验发送命令,把校验结果,发给于超老师的qq邮箱
# 语法 mail -s "邮件主题" 邮箱 < 邮件正文


mail -s "0224-check-rsync-$(date +%F)" 877348180@qq.com < /momo/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt

4.过期文件删除

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

find /momo -type f -mtime +180 -delete

5.汇总脚本(服务端、客户端)

为什么要制作为脚本,因为要交给定时任务,统一执行这一系列的备份步骤。

5.1 客户端脚本

#!/bin/bash

#1.创建客户端备份数据的目录

#2.打包备份etc配置文件,var/log 日志目录

#3.生成校验文件,确保备份的数据完整性

#4.传输到备份服务器

#5.删除过期文件

5.2 服务端脚本

#!/bin/bash
#1.校验数据完整性

#2.发送邮件

#3.删除过期文件

6.定时任务

服务端要求是每天校验

客户端是每天凌晨一点

测试脚本,服务端、客户端的脚本,改为每分钟试一下,也可以直接运行该脚本,查看结果。

* * * * *

注意测试顺序是

  • 先客户端

  • 再服务端

客户端的调整操作

[root@nfs-31 ~]## 决定修改客户端的备份数据目录 得修改脚本吧
[root@nfs-31 ~]#
[root@nfs-31 ~]#sed -i 's#backup#momo#g' /my_rsync.sh

执行脚本,看是否正确

[root@nfs-31 ~]#bash /my_rsync.sh
sending incremental file list
./
nfs-31_10.0.0.31_2022-04-21/
nfs-31_10.0.0.31_2022-04-21/all_data_md5.txt
152 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/5)
nfs-31_10.0.0.31_2022-04-21/etc.tgz
9,805,421 100% 33.76MB/s 0:00:00 (xfr#2, to-chk=1/5)
nfs-31_10.0.0.31_2022-04-21/log.tgz
719,702 100% 2.30MB/s 0:00:00 (xfr#3, to-chk=0/5)

sent 10,255,231 bytes received 92 bytes 6,836,882.00 bytes/sec
total size is 10,525,275 speedup is 1.03
 

服务端调试

数据校验
[root@rsync-41 ~]#md5sum -c /momo/nfs-31_10.0.0.31_2022-04-21/all_data_md5.txt
/momo/nfs-31_10.0.0.31_2022-04-21/etc.tgz: OK
/momo/nfs-31_10.0.0.31_2022-04-21/log.tgz: OK

整合服务端,客户端的脚本,写入定时任务

注意先后顺序

先客户端

再服务端

客户端

每分钟,执行脚本,进行数据备份,传输给rsync服务器

* * * * * /bash /my_rsync.sh

服务端

[root@rsync-41 ~]#cat my_rsync_server.sh
#!/bin/bash
# 1. 对备份的数据校验,生成校验文件
md5sum -c /momo/nfs-31_10.0.0.31_$(date "+%F")/all_data_md5.txt > /momo/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

# 2.发邮件
mail -s "0224-check-rsync-$(date +%F)" 877348180@qq.com < /momo/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

#3.删除旧资料
find /momo -type f -mtime +180 -delete
 

写入定时任务

* * * * * /bin/bash  /root/my_rsync_server.sh

总结

1.客户端能备份数据,生成MD5校验,能发给rsync服务端
2.服务端能接受到客户端的数据,且能对数据进行MD5校验,以及导出校验结果,以及给你的邮箱,发送这个校验结果

 

rsync备份任务练习的更多相关文章

  1. 本文讲述下windows下使用rsync备份数据

    本文讲述下windows下使用rsync备份数据 需要使用的软件如下: 环境需求: 上海monitor上跑有定时任务计划备份线上数据库,现在需要把上海monitor上的备份数据拉回到179.12数据回 ...

  2. Rsync备份功能总结

    备份服务笔记====================================================================== Rsync是一款开源的.快速的.多功能的.可实 ...

  3. 3、Rsync备份服务实战

    1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync官方地址:传送门http:// ...

  4. Rsync备份服务实战

    目录 Rsync备份服务实战 一.Rsync 二.rsync的应用场景 1.Rync的数据同步模式 2.rsync的三种模式 三.rsync配置服务端客户端 四.rsync实战 实战一 报错解决方法: ...

  5. day27 综合架构 rsync备份服务

    sync软件使用方法: rsync命令 1v4 a 本地备份数据 cp [root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll ...

  6. 【Rsync实战】Rsync 备份的配置与管理

    一.Rsync 基本概述 rsync 是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync 官方地址: rsync ...

  7. 利用rsync备份生产应用(二)

    概述 上节主要是针对rsync服务端进行的配置和详解,本节主要针对在客户端上的rsync配置进行讲解. rsync用法 本地到本地 语法:rsync [OPTION...] SRC... [DEST] ...

  8. 利用rsync备份生产应用(一)

    rsync简单介绍 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来 ...

  9. Linux Rsync备份服务介绍及部署守护进程模式

    rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...

  10. 使用rsync备份与同步文件

    在数字化时代的今天,随着个人拥有的数据量急剧增加,对其中的重要数据进行备份以保证其安全性.正确性变得越来越重要.同时,由于在公司.实验室.家里.外出等不同环境下往往使用不同的电脑设备(如台式机.笔记本 ...

随机推荐

  1. 阿里云EMAS移动测试,帮您快速掌握移动端兼容性测试技巧

    简介: 兼容性测试用于验证应用在不同设备上进行安装/启动/登录/不同版本覆盖安装/卸载等操作时,是否存在兼容性问题:如界面适配问题.应用性能等,现阿里云EMAS套餐免费试用,帮您快速掌握移动端兼容性测 ...

  2. 一个 Blink 小白的成长之路

    写在前面 写过blink sql的同学应该都有体会,明明写的时候就很顺滑,小手一抖,洋洋洒洒三百行代码,一气呵成.结果跑的时候,吞吐量就是上不去.导致数据延迟高,消息严重积压,被业务方疯狂吐槽.这时候 ...

  3. 【OpenYurt 深度解析】边缘网关缓存能力的优雅实现

    简介: 阿里云边缘容器服务上线 1 年后,正式开源了云原生边缘计算解决方案 OpenYurt,跟其他开源的容器化边缘计算方案不同的地方在于:OpenYurt 秉持 Extending your nat ...

  4. 双11专刊|云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验

    简介:2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定.除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下面我 ...

  5. [GPT] golang代码组织的核心思想

    1/golang代码组织的核心思想 Go语言(Golang)在代码组织上的核心思想是模块化和封装,主要体现在以下几个方面: 1.包(Packages): Go语言通过包(Packages)来组织代码, ...

  6. [Mobi] Android Studio NDK 安装

    通过 SDK Manager - SDK Tools 中勾选 NDK 进行安装. 注意,下载来源是 dl.google.com,请准备好能连接到国际互联网. 下载完成后在 sdk 工具里面可以看到 n ...

  7. [Auth] 浅谈 jwt token 的妙处

    无状态(易扩展). 有过期时间限制,相对安全(可以有多个有效的 token). 更轻量(适合少量信息),类似传统 query string 签名方式. 标准统一(跨语言). Refer:JWT Aut ...

  8. [FE] G2Plot 在 Vue 中使用 CDN 方式避免构建时增大 js 体积

    使用 npm.yarn 方式安装的包,虽方便使用,但是会极大增加 vendor.xx.js 体积,拖慢网站运行速度. 以 G2Plot 为例,实际在 build 构建时,会下载一些额外字体到 vend ...

  9. [Contract] Truffle 使用流程

    Installation $ npm install -g truffle Choose ethereum client (Ganache OR truffle build in `truffle d ...

  10. WPF 给类库设置设计时使用的资源字典

    在开发 WPF 类库时,由于类库里面没有存在 App.xaml.cs 文件,而在对单个 XAML 进行开发时,设计器将会因为找不到资源文件的存在,而拿不到资源.本文告诉大家简单的方法,给设计器设置仅在 ...