基本备份要求
要求:每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器。
具体要求如下:
1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。
b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。
c.日常脚本的目录 (/server/scripts)(适合web和nfs服务器)。
d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。
e.自己思考下还有什么需要备份呢?
3)Web服务器站点目录假定为(/var/html/www)。
4)Web服务器A访问日志路径假定为(/app/logs)
5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。
7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中
规范项目文档、画逻辑图,提交审核
思路:
1.搭建backup服务器
a)rsync服务
2.搭建web01服务器
a.验证rsync服务能否推送成功
b.开发校本实现打包、备份、推送、校验、删除
c.配置定时任务每天0点准时推送
3.backup服务器:
a.校本实现校验、删除、报警
b.配置定时任务每天6点定时执行
4.同理搭建其他服务器
实施手册:
一、rsync服务端配置即backup服务器的配置:
1.配置rsync服务端
vim /etc/rsyncd.conf
#Rsync server
##rsyncd.conf
uid = rsync # 客户端具有rsync用户的权限
gid = rsync
use chroot = no #与安全相关
max connections = 20 #客户端最大连接数
timeout = 600 #超时时间
pid file = /var/run/rsyncd.pid #进程号文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #log文件
ignore errors #忽略错误
read only = false #可读写
list = false #不可远程列表
hosts allow = 192.168.3/24 #允许的ip网段
hosts deny = 0.0.0.0/32
auth users = rsync_backup #远程连接的用户
secrets file = /etc/rsync.password #存放用户和密码的文件
[backup] #模块
comment = backup server by chinasoft 2017-04-10 #注释
path = /backup #共享的目录
注意:在配置/etc/rsyncd.conf时最好不要加注释,可能会出错
*************************************************
uid = rsync
gid = rsync
use chroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup
ignore errors
read only = false
list = false
hosts allow = 192.168.3.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
*************************************************
添加rsync用户
useradd -s /sbin/nologin -M rsync
创建目录
mkdir /backup
chown -R rsync.rsync /backup
写入密码
echo 'rsync_backup:rsyncpass' >/etc/rsync.password
#配置密码文件/etc/.rsyncd.passwd,文件格式是明文的,所以文件权限设为600
chmod 600 /etc/rsync.password
#配置服务能够启动,监听在873/tcp端口上
# rsync --daemon
# ss -tunlp|grep rsync
tcp LISTEN 0 5 :::873 :::* users:(("rsync",64141,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",64141,3))
# chkconfig rsync on
# service xinetd start
或者写入rc.local
echo '/usr/bin/rsync --daemon' >> /etc/rc.local
二、rsync客户端配置步骤(需要备份的服务器如web/nfs/mysql等)
1、创建密码文件echo "jack">/etc/rsync.password
chmod 600 /etc/rsync.password
mkdir /backup
添加配置文件
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup
ignore errors
read only = false
list = false
hosts allow = 192.168.3.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
2、rsync测试
rsync -avz /backup/ rsync://rsync_backup@192.168.3.12/backup --password-file=/etc/rsync.password
报错:
# rsync -avz /backup/ rsync://rsync_backup@192.168.3.12/backup/ --password-file=/etc/rsync.password
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
解决办法:
是因为服务端配置文件加了注释,去掉注释重启即可
md5指纹测试,对某个文件生成md5码,然后修改文件发现md5sum -c验证不通过
# md5sum /etc/hosts > zhiwen.txt
# md5sum -c zhiwen.txt
/etc/hosts: OK
# echo "#" >> /etc/hosts
# md5sum -c zhiwen.txt
/etc/hosts: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
创建测试目录:
mkdir -p /var/html/www
touch /var/html/www/{1..10}
mkdir /app/logs/ -p
touch /app/logs/{a..g}
mkdir -p /server/scripts
压缩文件
# tar zcvfh /backup/sys_config_$(date +%F).tar.gz /var/spool/cron /etc/rc.local /server/scripts
客户端自动备份脚本:
vim /server/scripts/bak.sh
#!/bin/bash
export PATH=/bin:/sbin/bin:/usr/sbin:/usr/bin
IP=$(/sbin/ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}')
bakpath=/backup
/bin/mkdir $bakpath/$IP -p
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
cd / &&\
/bin/tar zcfh $bakpath/$IP/sys_config_$(date +%F).tar.gz var/spool/cron etc/rc.local server/scripts &&\
/bin/tar zcf $bakpath/$IP/web_data_$(date +%F).tar.gz var/html/www/ &&\
/bin/tar zcf $bakpath/$IP/access_log_$(date +%F).tar.gz app/logs &&\
find $bakpath -type f -name "*.tar.gz"|xargs md5sum > $bakpath/$IP/flag_$(date +%F)
# bak data to backupserer
rsync -avz $bakpath/ rsync://rsync_backup@192.168.3.12/backup --password-file=/etc/rsync.password
# del data 7 days ago
find $bakpath -type f -mtime +7|xargs rm -f
添加计划任务,每天一次备份并且向backup服务器推送
00 00 * * * /bin/bash /server/scripts/bak.sh > /dev/null 2>&1
三、在backup备份服务器上添加检测功能并且进行邮件发送报警
添加一行vim /etc/mail.rc
set from=username@163.com smtp=smtp.163.com smtp-auth-user=pass smtp-auth-password=reblue.520 smtp-auth=login
测试邮件是否能够正常发送,这个配置通过163.com向qq发送信息是ok的,需要在163邮箱配置中开启smtp发送
echo 'yunva telnolegy infomation'|mail -s 'yunva.com' 111@qq.com
添加自动发送邮件脚本:
vim /server/scripts/checkbak.sh
#!/bin/bash
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
find /backup/ -name "flag_${date}*" |xargs md5sum -c &>>/tmp/mail_$(date +%F).log
find /backup/ -type f -name "*.tar.gz" -a ! -name "*week1*" -mtime +1 | xargs rm -f
mail -s "backup `date`" 111@qq.com < /tmp/mail_$(date +%F).log
# cp命令前面一定要加 \ 表示命令隔开,如果不加shell会认为是一个命令
\cp /tmp/mail_$(date +%F).log /tmp/mail_$(date +%F).log.ori
>/tmp/mail_$(date +%F).log
添加计划任务,每天6点检查并且发送邮件提醒
00 06 * * * /bin/bash /server/scripts/checkbak.sh > /dev/null 2>&1