1)提出问题:
1、发现公司问题现状,根据现状进行整理,思考解决方案
2)分析问题:
2、写出大体解决方案
3、进行上级授权(运维经理、CTO)
4、召集各个部门领导开会,演讲确定可行性,立项。
5、会议立项后,制定具体的执行方案
3)解决问题:
具体执行方案
1、采集信息
2、制定具体执行方案
3、根据制定方案细化,操作步骤
4、制定测试方案
5、制定预判出现问题,回退方案
公司有一台web server,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:
1)每天晚上00点整在web服务器A上打包备份网站程序目录并通过rsync命令推送到server B上备份保留(备份思路可以是现在本地按日期打包,然后再推到备份服务器上)。
具体要求如下:
1)web server A和backup server B的backup(备份)目录必须都为/backup。
2)web server 站点目录假定为(var/www/html)。
3)web server 本地仅保留7天内的备份。
4)backup server 上检查backup 结果是否正常,并将每天的backup结果发给管理员邮箱
5)backup server 上每周六的数据都保留,其他backup仅保留180天backup。
1)需要备份的文件或目录有(原则上,只要是运维人员写入或更改的数据,都需要备份): /var/spool/cron/root ,/etc/rc.local ,/etc/sysconfig/iptables ,/var/www/html ,/app/logs
2)为了规范化,每台web服务器进行本地备份时都备份到/backup目录下
3)每台web服务器进行本地备份时,都备份到/backup下以本机IP地址命令的目录中
4)打的tarball文件名中需要包含执行当天的日期。
5)统一存储备份数据的服务器通过rsync daemon方式提供存储备份数据的目录/backup
6)由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除。
7)为了方便的知道每次备份是否成功,我们需要做如下操作: 每台web服务器上检查是否成功 在存储备份数据的服务器上检查备份数据是否推送成功,并发邮件至管理员邮箱 8)由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留。
1、在rsync备份服务器上,配置rsync服务,实现推送。 服务端成功配置rsync,并在客户端成功推送
2、在客户端NFS服务器上,实现打包,推送,删除,定时任务推送。 /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /var/www/html /app/logs 命令行要成功
脚本
[root@nfs01 172.16.1.31]# cat /server/scripts/bak.sh
IP=$(ifconfig eth1|awk -F "[ :]+" ‘NR==2 {print $4}‘)
Path=/backup
if [ $(date +%w) -eq 0 ]
then
Time=$(date +%F-%w -d "-1day")
else
Time=$(date +%F -d "-1day")
fi
mkdir $Path/$IP/ -p
cd / &&tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&rsync -az $Path/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password &&find /backup/ -type f -mtime +7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs rm -f
定时任务
[root@nfs01 backup]# crontab -l
#bak all server data
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
服务端:
[root@backup ~]# vim /server/scripts/check_and_del.sh
IP=$(ifconfig eth1|awk -F "[ :]+" ‘NR==2 {print $4}‘)
Path=/backup
if [ $(date +%w) -eq 0 ]
then
Time="week_$(date +%F_%w -d "-1day")"
else
Time=$(date +%F -d "-1day")
fi
LANG=en
find /backup -type f -name "*${Time}*.log"|xargs md5sum -c >>$Path/${Time}_result.log 2>&1
mail -s "$Time bak result" aaromail@163.com <$Path/${Time}_result.log
find /backup/ -type f -mtime +180 ! -name "*week*_6*" |xargs rm -f
3、在rsync备份服务器上,做检查,发邮件给管理员。
使用mail发邮件时,必须先将sendmail服务启动。
mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人姓名 < 要发送的邮件内容
mail -s “标题” 邮件地址< 文件
echo “正文”|mail -s “oldboy” 邮件地址
例:定期删除脚本
#!/bin/sh
#2017-01-22
#bu Aaron
#轮询删除Java日志,只保存最近7天日志
MailContent=/dev/shm/mailContent
LogFile=/dev/shm/cleanJavaLog.log
logDir=/home/java_*/log
MailList="system@okooo.net"
echo "轮询删除java 日志,只保存最近7天日志,详情查看附件!删除日期:`date +%Y%m%d`" >$MailContent
if [ -n "$LogDir" ];then
find $LogDir -type f -mtime +7 > $LogFile 2>&1
find $LogDir -type -mtime +7 -delete > $LogFile 2>&1
mutt -s "Clean the java log 7 days ago" $MailList -a $LogFile <$MailContent
else
echo "删除日志失败,log目录不存在"|mutt -s "Clean the java log Wrong" $MailList
fi
小结:当然还可以用php之类程序的来发邮件,网上有很多代码。
sendmail服务 Linux
mutt
qmail服务 mail命令(客户端)
posfix mailq(查看发送队列)
<<-------------
exchange(win) Windows
发送:smtp 25端口 forxmail
接受:pop3 110端口 outlook
CentOS 5默认使用sendmail邮件服务,开启方式/etc/init.d/sendmail start
CentOS 6默认使用postfix邮件服务,开启方式/etc/init.d/postfix start
通过修改配置文件可以使用外部SMTP服务器,可以达到不适用sendmail/postfix等内部邮件服务而用外部的smtp服务器发送邮件的目的:
修改/ect/mail.rc最后一行加入。
set from=aaromail@163.com smtp=smtp.163.com smtp-auth-user=aaromail@163.com smtp-auth-password=chenbaojia88 smtp-auth=login
说明:
from是发送的邮件地址
smtp是发生的外部smtp服务器的地址
原文:http://www.cnblogs.com/aofo/p/6379576.html