基本备份要求 已知3 台服务器主机名分别为 web01、backup 、nfs01,主机信息见下表:
服务器说明
外网IP(NAT)
内网IP(NAT)
主机名称
nginx web 服务器
192.168.110.135
10.0.0.135/24
web01
NFS存储服务器
192.168.110.141
10.0.0.141/24
nfs
rsync备份服务器
192.168.110.142
10.0.0.142/24
backup
每天晚上 00 点整在 Web 服务器上打包备份系统配置文件 、网站程序目录 及访问日志 并通过 rsync 命令推送备份服务器 backup 上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器 backup 上)。
需求分析:
Web 服务器和备份服务器的备份目录必须都为/backup
要备份的系统配置文件包括但不限于: a. 定时任务服务的配置文件/var/spool/cron/root
b. 开机自启动的配置文件/etc/rc.local
c. 日常脚本的目录 /server/scripts
Web 服务器站点目录假定为/var/html/www
Web 服务器A 访问日志路径假定为 /app/logs
Web 服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)。
备份服务器上,保留每周一的所有数据副本,其它要保留 6 个月的数据副本。
备份服务器上要按照备份数据服务器的内网 IP 目录保存备份,备份的文件按照时间名字保存。
需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。
大概思路: 做项目文档,画逻辑图,提交审核。
搭建backup服务器
配置rsync服务;
启动rsync守护进程;
搭建web01服务器
验证rsync能否推送成功;
开发打包、备份、推送、校验、删除脚本;
配置定时任务,每天0点定时推送;
同理搭建nfs服务器
backup服务器
开发脚本实现校验、删除、报警;
配置定时任务,每天6点执行;
实施步骤 搭建backup服务器
安装rsync
1 2 yum install rsync -y # 安装 rsync --version # 检验安装
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 vim /etc/rsyncd.conf # 编辑配置文件 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid = rsync # rsync访问本地数据目录的一个用户,下一步要创建的用户。有坑,默认是nobody gid = rsync # 用户组 read only = false # 要写上这一句,要不然无法推送。有坑 fake super = yes # 如果出现操作不被允许等提示,可以添加这一句,允许不在root用户下复制文件属性 use chroot = no # 是否使用chroot选项 max connections = 200 # 并发最大连接数 pid file = /var/run/rsyncd.pid # 进程启动后,将进程pid写入这个文件 exclude = lost+found/ # 排除的文件或目录,此处为相对路径 log file = /var/log/rsyncd.log # 指定日志文件存放路径 secrets file = /etc/rsyncd.password # 指定虚拟用户的密码存放的文件,格式为,用户名:密码 lock file = /var/run/rsyncd.lock # 锁文件,用来支持max connections参数,此处为默认值 auth users = rsync # 允许认证的用户,有坑。 timeout = 900 # 超时时间 hosts only = 192.168.110.0/24 # 白名单,此处表示仅允许该局域网内访问 # hosts deny = 0.0.0.0/32 # 通常hosts only和hosts deny只需要选择一个进行配置,否则可能造成配置混乱,都配置的时候默认白名单优先级最高。 [backup] # 此处为一个模块,用[模块名]表示,下面是此模块的配置 path = /home/backup # 此模块的文件路径 comment = backup export area # 备注
创建目录和用户
1 2 3 4 mkdir /home/backup -p # 创建目录 useradd -s /sbin/nologin -M rsync # 创建一个rsync用户,-s指定shell,-M不创建家目录 chown -R rsync.rsync /home/backup # 授权rsync用户管理此目录
创建密码文件
1 2 3 4 5 vim /etc/rsyncd.password # 指定虚拟用户的密码存放的文件,格式为,用户名:密码 rsync:123456 chmod 600 /etc/rsyncd.password # 修改密码文件的权限
启动服务
1 2 3 4 5 6 systemctl enable rsyncd # 设置开机自启 systemctl start rsyncd # 启动服务 systemctl status rsyncd # 查看状态 ps -ef | grep sync | grep -v grep # 查看进程 netstat -tunlp | grep rsync # 检查端口 lsof -i :873 # 查看默认端口873
搭建web01服务器
认证密码文件
1 2 3 4 yum install rsync -y # 安装 rsync --version # 检验安装 echo "123456" > /etc/rsyncd.password # 客户端的密码文件要与服务端相同 chmod 600 /etc/rsyncd.password # 修改密码文件的权限
打包、备份、推送、删除脚本文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # !/bin/bash # 本机备份路径 backup="/backup" # 以主机IP地址命名的文件夹 path="/backup/$(hostname -i)" # 如果不存在此文件夹则创建文件夹 [ -f $path ] || mkdir -p $path # 判断是不是周一 if [ $(date +%w -eq 2)];then date="$(date +%F -d -1day)_week1" else date="$(date +%F -d -1day)" fi # 进入此文件夹 cd $path # 将配置文件和脚本打包进一个压缩包 tar -cvhf conf_${date}.tar.gz /var/spool/cron/root /etc/rc.d/rc.local /server/scripts 2>/dev/null # 将站点目录打包进一个压缩包 tar -cvf www_${date}.tar.gz /var/html/www 2>/dev/null # 将app日志打包进一个压缩包 tar -cvf logs_${date}.tar.gz /app/logs 2>/dev/null # 获取所有打包文件的原始指纹 find $path -type f -name "*_${date}.tar.gz" | xargs md5sum > $path/$(hostname -i)_fingerprint_${date}.log # 推送 rsync -avz $backup/ rsync@backup::backup --password-file=/etc/rsyncd.password # 删除7天前的备份 find $backup/ -type f -name "*.tar.gz" -mtime +7 -o -name "*.log" -mtime +7 | xargs rm -f
添加定时任务
1 2 3 4 5 crontab -e # 创建定时任务,添加以下内容 # 时间同步 */5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1 # 定时执行脚本 00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
搭建nfs服务器 参考web01服务器搭建步骤
备份服务器校验、删除和报警 1 2 3 4 5 6 7 8 vim /server/scripts/check.sh # 添加校验脚本,添加以下内容 # !/bin/bash # 搜寻备份目录下的校验文件并把校验结果重定向到文件中 find /backup/ -type f -name "*.log" | xargs md5sum -c > /backup/result_$(date +%F -d -1day).log # 备份结果写入邮件内容并发送 mail -s "$(date +%F -d -1day)_backup_result_notice" dengjinjun0805@126.com 498790885@qq.com < /backup/result_$(date +%F -d -1day).log
添加定时任务
1 2 3 4 5 6 7 8 crontab -e # 添加定时任务 # 时间同步 */5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1 # 定时执行脚本 00 05 * * * /bin/sh /server/scripts/check.sh &>/dev/null # 删除7天前的备份文件,但是保留周一的备份文件 00 05 * * * /bin/sh find /backup -type f ! -name "*week1*" -mtime +7 | xargs rm -f $>/dev/null