已知3台服务器主机名分别为web0一、backup、nfs01,主机信息见下表:html
服务器说明 | 外网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 |
具体要求以下:
(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服务器,实际工做中就是所有的服务器。
linux
(1)首先三台服务器的备份目录都要为backupweb
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服务器)。
(3)Web服务器站点目录假定为(/var/html/www)(适合web服务器)。vim
[root@web01 ~]# mkdir /var/html/www -p
(4)Web服务器A访问日志路径假定为(/app/logs)(适合web服务器)。bash
[root@web01 ~]# 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 rsync_backup@172.16.1.41::backup/week01/ find /backup/ -path "/backup/week01" -prune -o -type f -name "*.tar.gz" -print |xargs rm
(7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。app
[root@backup ~]# mkdir /backup/172.16.1.7 172.16.1.31
(8)须要确保备份的数据尽可能完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中
post
rsync -avz /backup/ rsync_backup@172.16.1.41::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 from=1396344xxxx@163.com smtp=smtp.163.com set smtp-auth-user=1396344xxxx@163.com smtp-auth-password=ichn123456 smtp-auth=login # 将这两条命令添加到最后一行 systemctl restart postfix.service # 重启邮件 echo "linux ichn62"|mail -s "test_mail" 7880xxxx@qq.com # 测试邮件是否能发送 mail -s "test_mail" 7880xxxx@qq.com </etc/hosts # 测试邮件是否能发送
整理以上命令编写脚本
测试
mkdir /server/scripts/ #建立脚本目录 [root@web01 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/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password # 删除七天之前备份数据 find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
mkdir /server/scripts/ #建立脚本目录 [root@nfs01 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/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password # 删除七天之前备份数据 find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
mkdir /server/scripts/ #建立脚本目录 [root@backup scripts]#vi backup_check.sh [root@backup 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" 1138108293@qq.com </tmp/check_info.txt #删除6个月以前数据 find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*星期1.tar.gz"|xargs rm 2>/dev/null
编写定时任务
WEB服务端:
[root@web01 /]#crontab -e 00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null
NFS客户端:
[root@nfs01 /]#crontab -e 00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null
backup服务端:
[root@backup /]#crontab -e 0 6 * * * /bin/sh /server/scripts/backup_check.sh &>/dev/null
能够修改系统时间来验证脚本,定时是否成功。