综合架构备份项目

欢迎大家访问我的博客:blog.54newpower.top



综合架构备份项目

0.环境准备

主机名

描述

外网IP

内网IP

nfs01

存储服务器

10.0.0.31/24

172.16.1.31/24

web01

web服务器

10.0.0.10/24

172.16.1.10/24

backup

备份服务器

10.0.0.41/24

172.16.1.41/24

0.1前提:

备份服务端已经部署好rsync守护进程,web01和nfs01需要部署好rsync的认证密码信息,确保rsync服务能够正常运行

0.2验证:

确保backup服务端已经开启rsync服务,并产看端口信息:

[root@backup ~]#systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-02 08:23:36 CST; 12h ago
 Main PID: 838 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─838 /usr/bin/rsync --daemon --no-detach

May 02 08:23:36 backup systemd[1]: Started fast remote file copy program daemon.
May 02 08:23:36 backup systemd[1]: Starting fast remote file copy program daemon...
[root@backup ~]#netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:873     0.0.0.0:*               LISTEN      838/rsync           
tcp        0      0 0.0.0.0:22      0.0.0.0:*               LISTEN      1343/sshd           
tcp        0      0 127.0.0.1:25    0.0.0.0:*               LISTEN      1430/master         
tcp6       0      0 :::873          :::*                    LISTEN      838/rsync           
tcp6       0      0 :::22           :::*                    LISTEN      1343/sshd           
tcp6       0      0 ::1:25          :::*                    LISTEN      1430/master     

检查web01和nfs01是否已经配置好rsync服务认证密码,检查数据是否可以正常同步到backup的backup模块;在web01和nfs01服务器分别创建/backup目录,用于备份时的本地目录,并且在其中创建名为主机名的文本文件用于验证与backup服务之间可以正常同步数据:

[root@nfs01 ~]#rsync -avz /backup/ rsync_backup@backup::backup --password-file=/etc/rsync.password
sending incremental file list
./

sent 69 bytes  received 27 bytes  192.00 bytes/sec
total size is 0  speedup is 0.00

[root@web01 ~]#rsync -avz /backup/ rsync_backup@backup::backup --password-file=/etc/rsync.password
sending incremental file list

sent 62 bytes  received 20 bytes  164.00 bytes/sec
total size is 0  speedup is 0.00

[root@backup /backup]#ls -l
total 4
-rw-r--r-- 1 rsync rsync 371 Apr 19 10:04 hosts
-rw-r--r-- 1 rsync rsync   0 May  2 21:04 nfs01

1.项目要求

1.1具体要求如下:

1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
  a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。
  b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。
  c.日常脚本的目录 (/server/scripts)(适合web和nfs服务器)。
  d.防火墙iptables或firewalld配置文件(/etc/sysconfig/iptables或 /etc/firewalld)(适合web和nfs服务器)。
  e.自己思考下还有什么需要备份呢?
3)Web服务器站点目录假定为(/var/html/www)(适合web服务器)。
4)Web服务器A访问日志路径假定为(/app/logs)(适合web服务器)。
5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
6)备份服务器上,保留最近6个月的备份数据,同时保留6个月之前每周一的所有数据
7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中
9)搭建NFS存储实现web服务器网站图片、附件共享
10)NFS存储数据实时备份

1.2要求总结

1)每天晚上00点整在web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留。
2)每天晚上00点整在nfs服务器上打包备份系统配置文件,并通过rsync命令推送备份服务器backup上备份保留。
思路:
备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上,备份完成后要进入解压文件,查看一下是否有内容,nfs存储服务器同web服务器,实际工作中就是全部的服务器。

这些要求都是运维自己写出来的,实际工作中,老大可能就说一句,把服务器数据备份下。

2.准备测试环境

具体思路:

根据项目的要求,自己创建出必要的文件及其目录:具体包括网站的站点目录/var/html/www,访问日志/app/logs,并且包含不同时间的文件(修改系统时间创建所需要的文件或者是目录,注意,之前创建了定时任务:每个五分钟自动同步一次时间,现在可以先关闭,等到创建完成所需文件后,在将时间修正即可)

web01站点目录下存放站点的源码文件(用wordpress安装包代替),日志目录下拷贝一些日志文件过来;nfs01创建一个/data目录,并往里写入一些数据;在打包的时候,注意打包几份不同日期的压缩文件,并且文件名中要包含要打包的文件名称和打包的时间;

先把命令一条条的执行,在逐步的汇总完善,最终编写成一个简单的脚本,在配合定时任务,最终实现整体的功能

3.web01应完成的工作

项目用到的一些数据准备过程比较容易,拷贝一些数据即可,由此省略;直接开始打包备份的操作

系统文件的打包备份:

打包完成的文件格式:文件名称backup_2020-04-13星期\tar.gz

cd /
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig

设置不同的系统时间,多次执行,创建出不同时间的备份数据

cd / && tar zchf /backup/www_log_backup_$(date +%F_%A).tar.gz  ./app/logs
cd / && tar zchf /backup/www_backup_$(date +%F_%A).tar.gz  ./var/html/www

打包完成之后的文件:

[root@web01 /]#ls -l /backup/
total 65936
-rw-r--r-- 1 root root    48009 Mar 30  2019 system_backup_2019-03-30_Saturday.tar.gz
-rw-r--r-- 1 root root    48009 Apr  1  2019 system_backup_2019-04-01_Monday.tar.gz
-rw-r--r-- 1 root root    48009 Apr 30  2019 system_backup_2019-04-30_Tuesday.tar.gz
-rw-r--r-- 1 root root    48009 Apr 30 00:00 system_backup_2020-04-30_Thursday.tar.gz
-rw-r--r-- 1 root root    48009 May  1 00:00 system_backup_2020-05-01_Friday.tar.gz
-rw-r--r-- 1 root root    48009 May  2 23:05 system_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root 33476258 May  2 23:14 www_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root 33745422 May  2 23:16 www_log_backup_2020-05-02_Saturday.tar.gz

生成打包文件的指纹信息

md5sum www_backup_2020-05-02_Saturday.tar.gz >$(hostname)_$(hostname -i)_$(date +%F).finger

删除7天之前的数据文件

find /backup -type f -mtime +7|xargs rm

推送数据

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password

整合命令并且编写脚本

#!/bin/bash
##定义一些变量
backup_dir="/backup"
host_name="$(hostname)_$(hostname -i)"

# 创建本地备份目录
[ -e $backup_dir/$host_name ] || mkdir -p $backup_dir/$host_name

# 创建本地备份压缩文件,备份站点目录和日志目录
cd / &&
tar zchf $backup_dir/$host_name/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
tar zchf $backup_dir/$host_name/www_log_backup_$(date +%F_%A).tar.gz ./app/logs
tar zchf $backup_dir/$host_name/www_backup_$(date +%F_%A).tar.gz ./var/html/www
#生成文件指纹信息
find $backup_dir/$host_name/ -type f -mtime -1 ! -name "*.finger" |xargs md5sum  >$backup_dir/$host_name/$(date +%F).finger
# 传输备份数据
rsync -az $backup_dir/$host_name/  [email protected]::backup/$host_name --password-file=/etc/rsync.password

# 删除七天以前备份数据
find $backup_dir -type f -mtime +7|xargs rm 2>/dev/null

添加定时脚本

#list02 date_backup editor w****** time 2020-05-03
* 2 * * * /bin/bash /server/scripts/data_backup.sh >/dev/null

4.nfs01应完成的工作

系统文件的打包备份:

打包完成的文件格式:文件名称backup_2020-04-13星期\tar.gz

cd /
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig

设置不同的系统时间,多次执行,创建出不同时间的备份数据

tar zchf /backup/data_backup_$(date +%F_%A).tar.gz  ./data

打包完成之后的文件:

[root@nfs01 /]#ls -l /backup/
total 8
-rw-r--r-- 1 root root 111 May  2 23:17 data_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root  45 May  2 23:14 www_backup_2020-05-02_Saturday.tar.gz

生成打包文件的指纹信息

md5sum data_backup_2020-05-02_Saturday.tar.gz >$(hostname)_$(hostname -i)_$(date +%F).finger

删除7天之前的数据文件

find /backup -type f -mtime +7|xargs rm

推送数据

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password

整合命令并且编写脚本

#!/bin/bash
##定义一些变量
backup_dir="/backup"
host_name="$(hostname)_$(hostname -i)"

# 创建本地备份目录
[ -e $backup_dir/$host_name ] || mkdir -p $backup_dir/$host_name

# 创建本地备份压缩文件,备份站点目录和日志目录
cd / &&
tar zchf $backup_dir/$host_name/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
tar zchf $backup_dir/$host_name/data_$(date +%F_%A).tar.gz  ./data
#生成文件指纹信息
find $backup_dir/$host_name/ -type f -mtime -1 ! -name "*.finger" |xargs md5sum  >$backup_dir/$host_name/$(date +%F).finger
# 传输备份数据
rsync -az $backup_dir/$host_name/  [email protected]::backup/$host_name --password-file=/etc/rsync.password

# 删除七天以前备份数据
find $backup_dir -type f -mtime +7|xargs rm 2>/dev/null

添加定时脚本

crontab -e
#添加以下内容
#list02 date_backup editor w****** time 2020-05-03
* 2 * * * /bin/bash /server/scripts/data_backup.sh >/dev/null

 

5.backup服务端完成的工作

验证数据的完整性

find /backup/ -type f -name "*.finger"|xargs md5sum -c &>/tmp/check_info.txt

删除半年之前(180天)的备份数据

find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*Monday.tar.gz"|xargs rm 2>/dev/null

发送数据完整性的结果到指定邮箱

mail -s "backup_check_info" w******@126.com </tmp/check_info.txt

整合命令并编写脚本

#!/bin/bash
#验证数据完整性
find /backup/ -type f -mtime -1 -name "*.finger"|xargs md5sum -c &>/backup/$(date +%F).finger.check
#发送验证结果到指定邮箱
mail -s "backup_check_results" w******@126.com </backup/$(date +%F).finger.check
#删除180天之前的备份文件
find /backup/ -type f -mtime +180 ! -name "*Monday.tar.gz"|xargs rm 2>/dev/null

添加定时脚本

crontab -e
#添加以下内容
#list02 data_backup_check editor wangsonghu time 2020-05-03
1 2 * * * /bin/bash /server/scripts/data_backup_check.sh >/dev/null

附加:

邮箱的配置:

vim /etc/mail.rc
#添加以下内容,需要登录邮箱获取授权码
set from=w******@126.com smtp=smtp.126.com
set smtp-auth-user=w******@126.com smtp-auth-password=******* smtp-auth=login
#重启邮箱服务
systemctl restart postfix.service

注意

编写的脚本要添加执行权限,脚本内容要有注释信息,定时任务也要有注释,并且定时任务要经过测试!


猜你喜欢

转载自blog.51cto.com/14799619/2498775