00 课程介绍部分
1)根据需求搭建环境
2)按照需求编写脚本
3)进行功能测试
01 课程知识回顾
1)rsync守护进程的部署过程
服务端部署:
001 下载安装软件
002 编写配置文件
003 创建虚拟用户(进程都是root用户管理的,虚拟用户只是用来管理备份目录的)
004 创建认证密码文件,修改属性为600(创建用户名和密码的对应关系文件,由于文件中密码是明文撰写的,需要对其他人屏蔽权限)
005 创建备份目录(修改目录的属主属组信息,都改为rsync虚拟用户)
006 启动守护进程服务
客户端部署:
001 创建认证密码文件(只有密码信息即可)
002 进行免交互传输测试(password -file=密码文件)
2) rsync备份传输数据的原理
001 有用户身份的转换 (数据备份的时候是将数据的用户信息由原来的root用转换为虚拟用户)
002 用户存储数据的权限 (目录本身的权限是755 目录的属主信息rsync)
3) rsync服务的常见错误
4) rsync命令的参数信息 -avz(压缩)
5) rsync服务的企业应用
服务的多模块配置
服务的排除功能
服务的备份目录创建
服务的列表功能
服务的策略控制
服务的无差异同步
02 全网备份项目环境准备
老男孩教育运维班0基础起步上机实战系列项目
100台规模集群全网数据备份解决方案
1、基本备份要求
已知3台服务器主机名分别为web01、backup、nfs01,主机信息见下表:
服务器说明 |
外网IP |
内网IP |
主机名称 |
nginx web服务器 |
10.0.0.8/24 |
172.16.1.8/24 |
web01 |
NFS存储服务器 |
10.0.0.31/24 |
172.16.1.31/24 |
nfs01 |
rsync备份服务器 |
10.0.0.41/24 |
172.16.1.41/24 |
backup |
要求:每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器。
1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。
b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。
c.日常脚本的目录 (/server/scripts)(适合web和nfs服务器)。
d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。
e.自己思考下还有什么需要备份呢?
3)Web服务器站点目录假定为(/var/html/www)。
4)Web服务器A访问日志路径假定为(/app/logs)
5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。
7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中(发邮件技巧见VIP群资料)效果如下:
特别提示:本题在工作中是网站生产环境全网备份项目方案的一个小型模拟,很有意义。
2、本项目的整个备份逻辑结构如下图:
特别说明:
1)工作中领导很可能不会告诉你如何去做,只会提需求,例如:小崔,我们集群的数据器很重要,请你做一个方案把所有的数据备份好(定期的备份)。
2)逻辑架构图更不可能是领导给你画,而是你理解了领导的意思,然后自己想出备份的方案,最后,在实施前你做的一个图纸而已。
3)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。
4)真实工作中除了异机备份,可能还会需要异地备份,这个地方请大家思考如何异地备份。
企业运维岗三项核心职责:
1、企业数据不丢
备份策略又分为异步备份和实时备份,本文主要解决内部人员更改的数据异步备份问题。
2、7*24服务能力
3、用户访问体验好
03 完成项目需求
1) 所有服务器的备份目录必须都是/backup
在三台服务器上创建备份目录,由于后期备份的服务器会很多,数据也会很多,所以此处建议在每个服务器上都创建同一个备份目录.将需要备份的数据都放到此目录中.备份服务器上将备份后的数据也放在创建的目录中
利用命令 mkdir -p /backup 此处的-p参数如果目录存在不会报错,后期如果创建多级目录时也方便
2) 要备份的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。
b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。
c.日常脚本的目录(/server/scripts)。
d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。
e.自己思考下还有什么需要备份呢?
要将上述内容全部备份到备份服务器,一个一个进行备份费时费力,此时需要将上述文件进行打包,文件若是过多会占用不少空间,还得进行压缩
利用打包压缩命令 tar z(gzip压缩)c(创建新的tar包)v(详细执行过程)f(指定压缩文件名) /backup/system_backup.tar.gz /var/spool/cron/root(定时任务配置文件) /etc/rc.local(开机自启动配置文件) /server/scripts(服务脚本) /etc/sysconfig/iptables-config(防火墙配置文件)
由上述结果不难发现我们利用tar命令压缩打包数据的时候回出现一些问题,某些数据中会有链接文件,此时打包压缩的时候是对链接文件作用,而我们需要的是链接文件所指向的源文件,此时就会出现问题,这个链接文件已失效,显然备份一个失效的链接文件没有任何意义.所以我们在打包压缩的时候需要添加参数 h(打包软链接文件指向的真实源文件)
由于压缩文件后期是需要写到脚本中的,脚本编写的时候是不需要一些额外的输出信息存在的,此时需要对一些输出信息做调整,
对于错误提示信息,我们直接利用绝对路径方式取消.此时也不需要参数v
tar zchf /backup/system_backup.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config
3) Web服务器站点目录假定为(/var/html/www)
与上述系统文件打包压缩一致,由于此文件是站点目录,后期如果有服务运行,次文件会越来越大,对于大的数据来说最好是单独进行打包压缩,后期数据恢复也方便
tar zchf /backup/www_backup.tar.gz ./var/html/www/
4) Web服务器A访问日志路径假定为(/app/logs)
与上面一致
tar zchf /backup/www_logs_backup.tar.gz ./app/logs/
5) Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
保留打包后的7天的备份数据,意思就是7天前的数据进行删除,那对于上输压缩文件来说,在压缩的时候直接在文件名中加上时间信息可以很直观的观察到文件的时间信息
利用date命令创建出一个测试环境.假设此时我们拥有了几天前的数据,
找出7天前的数据并删除
find /backup/ -type f -mtime +7|xargs rm 删除七天前的数据
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。
由于上述要求中要保留周一的数据副本,前期我们在压缩文件后面添加了日期信息,此时我们再在后面添加星期信息
在备份服务器端创建环境.查看180天前的数据
利用取反符号 ! 排除掉周一的数据
上述命令中取出了180天前的数据,同时排除了周一的数据.此时将上述找出的数据排除即可
find /backup/ -type f -mtime +180 ! -name "*Monday.tar.gz"|xargs rm
7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存
上述操作中已解决描述问题
8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中
如何验证数据完整性? 利用md5sum命令实现
对于一个文件来说需要验证完整性的时候我们在传输数据之前先生成一个校验值,当数据发生变化时值也会发生变化,对上述两个数值进行比较
先在客户端找到当天产生的文件,并对这些文件生成校验值
在客户端中数据的校验值信息已经生成,此时需要将客户端的数据传输到服务端,由服务端进行校验
转到服务端,利用md5sum -c 对数据进行比对
补充说明:md5sum -c 命令执行原理
步骤一:打开一个指纹文件,将信息记录到缓存中
步骤二:根据指纹文件的路径信息,生成md5数值信息
步骤三:将新生成的md5数值和原有的指纹文件中的数值进行比较
步骤四:如果相同显示结果为ok,如果不同显示failed
对上述错误进行分析,由于我们是利用命令rsync -avz /backup/ rsync_backup@172.16.1.41::backup/172.16.1.7/ --password-file=/etc/rsync.password进行数据传输的,对于服务端来说由于有上述命令,所以他会创建/backup/172.16.1.41目录,这个目录是它自己创建的,当md5sum打开指纹文件,同时根据指纹文件中的数据路劲信息找对应文件的时候,就会出现问题.传输过来的数据路径信息是没有172.16.1.7 这个目录的,当md5sum只会根据文件中的数据路径进行查找,此时当然 找不到对应文件.所以系统报错,解决办法如下
客户端自己创建二级目录/backup/172.16.1.7/
此时也得注意将之间的finger文件的路径也得变更过来,变更完成后进行传输操作
此时转到服务端进行查看
进行校验值对比测试.并对命令进行整合
find /backup/ -type f -name "finger.txt"|xargs md5sum -c >>/tmp/check.txt
实现发送邮件???
利用第三方邮件进行转接实现邮件的发送接收
步骤一:登录网易163邮箱进行设置,配置163企业邮箱
步骤二:编写linux服务邮件的相关配置文件
编辑邮件配置文件
添加信息(配置文件最后一行进行添加)
修改配置文件需重启服务.利用命令测试邮件工作正常否
实现将文件的内容发送出来 <标准输入重定向 将文件的内容作为输出发送出去
9) 服务器配置命令总结说明
备份客户端要完成的工作:
创建备份目录及子目录: mkdir -p /backup/172.16.1.7/
打包压缩要备份的文件数据: cd / ---需要切换到/目录下利用相对路径来进行打包压缩,绝对路劲会产生错误信息
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config
tar zchf /backup/www_backup_$(date +%F_%A).tar.gz ./var/html/www
tar zchf /backup/www_log_backup_$(date +%F_%A).tar.gz ./app/logs
查找7天以前的数据并进行删除: find /backup -type f -mtime +7|xargs rm 2>/dev/null
创建指纹文件并生成md5sum校验值信息: find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/backup/172.16.1.7/finger.txt
推送数据到备份服务端: rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
备份服务端要完成的工作:
查找180天前的数据进行删除保留其中周一的数据: find /backup/ -type f -mtime +180 ! -name "*Monday.tar.gz"|xargs rm
检查数据完整性: find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt
发送检查邮件: mail -s "check info for 时间信息" 751060301@qq.com </tmp/check.txt
10) 编写全网备份脚本
备份客户端脚本:
#!/bin/bash
#create backup dir
mkdir -p /backup/172.16.1.7/
#tar backup date
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config
#del 7day ago date
find /backup -type f -mtime +7|xargs rm 2>/dev/null
#create finger file
find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/backup/172.16.1.7/finger.txt
#backup push data info
rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
开始编写脚本文件: 将脚本文件统以放置于/server/scripts目录下
编写脚本文件内容(编些变量信息,将备份目录用变量表示.)
执行脚本文件(-x 参数可显示执行过程)
利用过程信息排查错误
改正错误信息(最终脚本信息)
测试脚本文件
备份服务端脚本:
在备份服务端有个小问题需要主要,区别于客户端的备份目录在脚本中创建的方式,服务端的备份目录是需要提前创建,不能写到脚本中,如果客户端的脚本先与服务端的脚本运行那将导致客户端的数据传到服务端没地方存放,为了避免这个问题,所以服务端的备份目录要提前创建
创建脚本文件存放目录.编写脚本文件
测试脚本文件.发现出现错误
开启先前关闭的同步时间定时任务
修改当前系统时间
重新传输数据,脚本运行正常
11) 脚本文件总结
存储服务器脚本配置:
1 [root@nfs01 ~]# vim /server/scripts/backup.sh 2 #!/bin/bash 3 Backup_dir="/backup" 4 IP_info=`hostname -i` 5 #create backup dir 6 mkdir -p $Backup_dir/$IP_info 7 #tar backup date 8 cd / 9 tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./serv 10 er/scripts ./etc/sysconfig/iptables-config 11 #del 7day ago date 12 find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null 13 #create finger file 14 find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt 15 #backup push data info 16 rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
web服务器脚本配置:
1 [root@nfs01 ~]# vim /server/scripts/backup.sh 2 #!/bin/bash 3 Backup_dir="/backup" 4 IP_info=`hostname -i` 5 #create backup dir 6 mkdir -p $Backup_dir/$IP_info 7 #tar backup date 8 cd / 9 tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./serv 10 er/scripts ./etc/sysconfig/iptables-config 11 #del 7day ago date 12 find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null 13 #create finger file 14 find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt 15 #backup push data info 16 rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
备份服务器脚本配置:
1 [root@backup ~]# cd /server/scripts/ 2 [root@backup /server/scripts]# vim backup.sh 3 #del 180 day ago data 4 find /backup/ -type f -mtime +180 ! -name "*Monday.tar.gz"|xargs rm 2>/dev/null 5 #check backup date 6 find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt 7 #send check mail 8 mail -s "check info for $(date +%F)" 751060301@qq.com </tmp/check.txt
12) 实现自动完成全网数据备份(定时任务)
存储服务器配置:
1 [root@nfs01 ~]# crontab -e 2 # edit name input file 3 #* * * * * echo "wwl" >> /oldgirl/oldgirl.txt 4 # created users 5 #* * * * * /usr/sbin/useradd user &>/dev/null 6 # created txt 7 #* * * * * sh PATH_info.sh 8 # backup file and tar 9 #* * * * * /bin/sh /root/backup.sh &>/dev/null 10 # time sync by lidao at 2017-03-08 11 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1 12 # backup date 13 0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null #每天0点定时执行脚本命令 14 15 "/tmp/crontab.auHqGh" 12L, 408C written 16 crontab: installing new crontab 17 [root@nfs01 ~]# systemctl restart crond.service
web服务器配置:
1 [root@web01 ~]# crontab -e 2 # edit name input file 3 #* * * * * echo "wwl" >> /oldgirl/oldgirl.txt 4 # created users 5 #* * * * * /usr/sbin/useradd user &>/dev/null 6 # created txt 7 #* * * * * sh PATH_info.sh 8 # backup file and tar 9 #* * * * * /bin/sh /root/backup.sh &>/dev/null 10 # time sync by lidao at 2017-03-08 11 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1 #时间自动同步定时任务 12 # backup date 13 0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null 14 15 "/tmp/crontab.ohjCP2" 12L, 408C written 16 crontab: installing new crontab 17 [root@web01 ~]# systemctl restart cr 18 crond.service cryptsetup.target 19 [root@web01 ~]# systemctl restart crond.service
备份服务器配置:
1 [root@backup /server/scripts]# crontab -e 2 # edit name input file 3 #* * * * * echo "wwl" >> /oldgirl/oldgirl.txt 4 # created users 5 #* * * * * /usr/sbin/useradd user &>/dev/null 6 # created txt 7 #* * * * * sh PATH_info.sh 8 # backup file and tar 9 #* * * * * /bin/sh /root/backup.sh &>/dev/null 10 # time sync by lidao at 2017-03-08 11 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1 12 # backup date 13 0 6 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null #早上六点执行脚本定时任务 14 15 16 "/tmp/crontab.1a5Q1k" 12L, 415C written 17 crontab: installing new crontab 18 [root@backup /server/scripts]# systemctl restart crond.service 19 [root@backup /server/scripts]# 20 [root@backup /server/scripts]# 21 [root@backup /server/scripts]# sync 22 [root@backup /server/scripts]# sync 23 [root@backup /server/scripts]# sync 24 [root@backup /server/scripts]# tree /backup/ 25 /backup/ 26 ├── 172.16.1.31 27 │ ├── finger.txt 28 │ ├── system_backup_2020-07-14_Tuesday.tar.gz 29 │ └── system_backup_2020-07-15_Wednesday.tar.gz 30 └── 172.16.1.7 31 ├── finger.txt 32 ├── system_backup_2020-07-14_Tuesday.tar.gz 33 ├── system_backup_2020-07-15_Wednesday.tar.gz #查看目录发现客户端定时任务已执行 , 在0点自动备份了数据 34 ├── www_backup_2020-07-14_Tuesday.tar.gz 35 ├── www_backup_2020-07-15_Wednesday.tar.gz 36 ├── www_log_backup_2020-07-14_Tuesday.tar.gz 37 └── www_log_backup_2020-07-15_Wednesday.tar.gz 39 2 directories, 10 files