加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

全网数据备份方案

发布时间:2020-12-13 23:29:24 所属栏目:Linux 来源:网络整理
导读:1 项目备份环境 已知3台服务器主机名分别为web01、backup、nfs01,主机信息见下表: 服务器说明 外网IP 内网IP 主机名称 web服务器 10.0.0.7/24 172.16.1.7/24 web01 nfs存储服务器 10.0.0.31/24 172.16.1.31/24 nfs01 rsync备份服务器 10.0.0.41/24 172.16.

1 项目备份环境

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

服务器说明 外网IP 内网IP 主机名称
web服务器 10.0.0.7/24 172.16.1.7/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

2 项目备份要求

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

3 项目备份逻辑架构图


4 项目实施配置

(1)首先三台服务器的备份目录都要为backup

mkdir /backup       #web01,nfs01,backup服务器都要创建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服务器)。
? ???

cd /
tar zchf $Dir_info/$IP_info/system_backup_$(date +%F_星期%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
# h:表示将源文件也压缩

(3)Web服务器站点目录假定为(/var/html/www)(适合web服务器)。

[[email?protected] ~]# mkdir /var/html/www -p

(4)Web服务器A访问日志路径假定为(/app/logs)(适合web服务器)。

[[email?protected] ~]# mkdir /app/logs -p

(5)Web服务器保留打包后的7天的备份数据。

find /backup -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
2>/dev/null:如果没有7天之前的数据会产生错误报告信息,因此将错误信息追加到/dev/null,不会产生错误信息。

(6)备份服务器上,保留最近6个月的备份数据,同时保留6个月之前每周一的所有数据。

find /backup -type f -mtime +180 -name "*.tar.gz"|xargs rm
#   方法一:在文件名称中显示星期信息
#   data+%A/date +%w
find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*星期1.tar.gz"|xargs rm 2>/dev/null
#   方法二:将周一数据单独保存
#   今天是周一
mkdir /backup/week01
rsync -avz /backup/week01 [email?protected]::backup/week01/
find /backup/ -path "/backup/week01" -prune -o -type f -name "*.tar.gz" -print |xargs rm

(7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。

[[email?protected] ~]#    mkdir /backup/172.16.1.7 172.16.1.31

(8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中
?

rsync -avz /backup/ [email?protected]::backup --password-file=/etc/rsync.password
md5sum /backup/172.16.1.31/system_backup_2019-07-18_星期4.tar.gz >/backup/172.16.1.31/finger.txt
####    md5值追加给finger.txt(指纹文件)
md5sum -c finger.txt        ### 自动对比md5值

?

vim /etc/mail.rc
set [email?protected] smtp=smtp.163.com 
set [email?protected] smtp-auth-password=ichn123456 smtp-auth=login
#   将这两条命令添加到最后一行
systemctl restart postfix.service   #   重启邮件
echo "linux ichn62"|mail -s "test_mail" [email?protected] #   测试邮件是否能发送
mail -s "test_mail" [email?protected] </etc/hosts                     # 测试邮件是否能发送

整理以上命令编写脚本
?

mkdir /server/scripts/  #创建脚本目录
[[email?protected] scripts]#vi system_backup.sh 
#!/bin/bash

Dir_info="/backup"
IP_info="$(hostname -i)"

# 创建本地备份目录
mkdir -p $Dir_info/$IP_info

# 创建本地备份压缩文件,备份站点目录和日志目录
cd /
tar zchf $Dir_info/$IP_info/system_backup_$(date +%F_星期%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar zchf $Dir_info/$IP_info/web_backup_$(date +%F_星期%w).tar.gz ./var/html/www/
tar zchf $Dir_info/$IP_info/web_log_$(date +%F_星期%w).tar.gz ./app/logs/

# 生成数据指纹信息
find $Dir_info/$IP_info/ -type f  -name "*.tar.gz" -mtime -1|xargs md5sum >$Dir_info/$IP_info/finger.txt

# 传输备份数据
rsync -az $Dir_info/ [email?protected]::backup --password-file=/etc/rsync.password

# 删除七天以前备份数据
find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null

?

mkdir /server/scripts/  #创建脚本目录
[[email?protected] scripts]#vi system_backup.sh 
#!/bin/bash

Dir_info="/backup"
IP_info="$(hostname -i)"

# 创建本地备份目录
mkdir -p $Dir_info/$IP_info

# 创建本地备份压缩文件
cd /
tar zchf $Dir_info/$IP_info/system_backup_$(date +%F_星期%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables

# 生成数据指纹信息
find $Dir_info/$IP_info/ -type f  -name "*.tar.gz" -mtime -1|xargs md5sum >$Dir_info/$IP_info/finger.txt

# 传输备份数据
rsync -az $Dir_info/ [email?protected]::backup --password-file=/etc/rsync.password

# 删除七天以前备份数据
find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null

??

mkdir /server/scripts/  #创建脚本目录
[[email?protected] scripts]#vi backup_check.sh 
[[email?protected] scripts]#cat backup_check.sh 
#!/bin/bash

#验证数据完整性
find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check_info.txt

#发送邮件信息通知
mail -s "backup_check_info" [email?protected] </tmp/check_info.txt

#删除6个月之前数据
find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*星期1.tar.gz"|xargs rm 2>/dev/null

编写定时任务
WEB服务端:

[[email?protected] /]#crontab -e
# backup data
00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null

问题: 如何备份备份周一的数据
7月18日 周四 ?产生一天周四数据 ? 7月19日 周五 ?0点备份 ?system_info_2019-07-19_星期五.tar,gz
7月19日 周五 ?产生一天周五数据 ? 7月20日 周六 ?0点备份 ?system_info_2019-07-20_星期六.tar,gz
7月20日 周六 ?产生一天周六数据 ? 7月21日 周日 ?0点备份 ?system_info_2019-07-21_星期日.tar,gz
7月21日 周日 ?产生一天周日数据 ? 7月22日 周一 ?0点备份 ?system_info_2019-07-22_星期一.tar,gz
两种方式:
方式一: 排除周二
方式二: $(date %F -d -1day)
NFS客户端:

[[email?protected] /]#crontab -e
# backup data
00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null

backup服务端:

[[email?protected] /]#crontab -e
0 6 * * * /bin/sh /server/scripts/backup_check.sh &>/dev/null

可以修改系统时间来验证脚本,定时是否成功。


5 补充知识

5.1 如何杀掉进程

第一种方式:kill

ps -ef|grep sshd    #查看进程号
[[email?protected] ~]#ps -ef|grep sshd
root       1537   1229  0 09:06 ?        00:00:00 sshd: [email?protected]/0
kill 1537       # 杀掉sshd服务,有提示信息

?第二种方式:killall

yum install -y psmisc       # 安装killall
ps -ef|grep sshd    #查看进程号
[[email?protected] ~]#ps -ef|grep sshd
root       1537   1229  0 09:06 ?        00:00:00 sshd: [email?protected]/0
killall sshd    #   杀掉sshd  有提示信息

第三种方式:pkill (模糊杀手)

ps -ef|grep sshd    #查看进程号
[[email?protected] ~]#ps -ef|grep sshd
root       1537   1229  0 09:06 ?        00:00:00 sshd: [email?protected]/0
pkill sshd  # 模糊杀掉与有sshd关系的服务       没有提示信息

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读