全网备份项目环境准备

主机名称和IP地址规划

服务 主机名 eth0网卡IP eth1网卡IP 软件
防火墙服务器 firewalld 10.0.0.81 172.16.1.81 firewalld
负载均衡服务器 lb01 10.0.0.5 172.16.1.5 nginx,keepalived
负载均衡服务器 lb02 10.0.0.6 172.16.1.6 nginx,keepalived
web服务器 web01 10.0.0.7 172.16.1.7 nginx
web服务器 web02 10.0.0.8 172.16.1.8 nginx
web服务器 web03 10.0.0.9 172.16.1.9 nginx
存储服务器 nfs01 10.0.0.31 172.16.1.31 nfs
备份服务器 backup 10.0.0.41 172.16.1.41 rsync
数据库服务器 db01 10.0.0.51 172.16.1.51 mysql,mariaDB
批量管理服务器 m01 10.0.0.61 172.16.1.61 ansible
跳板机服务器 jumpserver 10.0.0.71 172.16.1.71 jumpserver
监控服务器 zabbix 10.0.0.72 172.16.1.72 zabbix
缓存服务器 暂无 暂无 暂无 暂无
  • 备份服务器已经配置好了守护进程并启动,密码为123456
vim /etc/rsyncd.conf 


#指定管理备份目录的用户
uid = rsync
#指定管理备份目录的用户组
gid = rsync
#定义rsync备份服务的网络端口号
port = 873
#将rsync虚拟用户伪装成为一个超级管理员用户
fake super = yes
#和安全相关的配置
use chroot = no
#最大连接数  同时只能有200个客户端连接到备份服务器
max connections = 200
#超时时间(单位秒)
timeout = 300
#记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
pid file = /var/run/rsyncd.pid
#锁文件
lock file = /var/run/rsync.lock
#rsync服务的日志文件 用于排错分析问题
log file = /var/log/rsyncd.log
#忽略传输中的简单错误
ignore errors
#指定备份目录是可读可写
read only = false
#使客户端可以查看服务端的模块信息
list = false
#允许传输备份数据的主机(白名单)
hosts allow = 172.16.1.0/24
#禁止传输备份数据的主机(黑名单)
hosts deny = 0.0.0.0/32
#指定认证用户
auth users = rsync_backup
#指定认证用户密码文件 用户名称:密码信息
secrets file = /etc/rsync.password
#模块信息
[backup]

comment = "backup dir by 1997sty"
#模块中配置参数 指定备份目录
path = /backup

项目需求

  1. 所有服务器的备份目录必须都为/backup
  2. 要备份的系统配置文件包括但不限于

定时任务服务的配置文件/var/spool/cron/root(适合web和nfs服务器)

开机自启动的配置文件/etc/rc.local(适合web和nfs服务器)

日常脚本的目录/server/scripts(适合web和nfs服务器)

防火墙iptables的配置文件/etc/sysconfig/iptables

  1. Web服务器站点目录假定为/var/html/www
  2. Web服务器A访问日志路径假定为/app/logs
  3. Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
  4. 备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本
  5. 备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存
  6. 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中

编写全网备份脚本

nfs01服务器备份脚本

#!/bin/bash

backup=/backup
ip_info=`hostname -i`
backup_path=$backup/$ip_info

#回到根
cd /
#创建目录
mkdir -p $backup_path
#打包备份内容
tar -zcvhf $backup_path/backup_`date +%F_week%w`.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
#验证备份内容
find $backup_path/ -type f -mtime -1 ! -name "md5"|xargs md5sum > $backup_path/md5
#发送备份内容到服务器
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#删除7天前的备份信息
find $backup_path -mtime +7 -type f -exec rm -rf {} \;

web01服务器备份脚本

#!/bin/bash

backup=/backup
ip_info=`hostname -i`
backup_path=$backup/$ip_info

#回到根
cd /
#创建目录
mkdir -p $backup_path
#打包备份内容
tar -zcvhf $backup_path/backup_`date +%F_week%w`.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar -zcvhf $backup_path/www_`date +%F_week%w`.tar.gz ./var/html/www
tar -zcvhf $backup_path/logs_`date +%F_week%w`.tar.gz ./app/logs
#验证备份内容
find $backup_path/ -type f -mtime -1 ! -name "md5"|xargs md5sum > $backup_path/md5
#发送备份内容到服务器
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#删除7天前的备份信息
find $backup_path -mtime +7 -type f -exec rm -rf {} \;

backup服务器备份脚本

#!/bin/bash

#删除超过180天不为星期一的备份
find /backup -type f ! -name "*week1.tar.gz" -mtime +180 -exec rm -rf {} \;
#验证结果
find /backup -type f -name "md5"|xargs md5sum -c | mail -s "备份结果" admin@1997sty.com
  • 使用邮件服务需要配置/etc/mail.rc,并重启邮件服务systemctl restart postfix.service
vim /etc/mail.rc

set from=邮箱地址 smtp=邮件服务器地址
set smtp-auth-user=邮箱地址 smtp-auth-password=邮箱授权密码 smtp-auth=login

systemctl restart postfix.service

实现自动完成全网数据备份

nfs01服务器定时任务

#backup
0 0 * * *  /bin/sh /server/scripts/backup.sh &>/dev/null

web01服务器定时任务

#backup
0 0 * * *  /bin/sh /server/scripts/backup.sh &>/dev/null

backup服务器定时任务

#backup server
0 5 * * *  /bin/sh /server/scripts/backup_server.sh &>/dev/null