文轩运维博客(李文轩)

一个愿意为理想奋斗终生的人! 技术交流QQ:838997384

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

全网备份案例

备份全网服务器数据生产架构方案案例模型

 

企业案例:rsync上机实战考试题:

某公司里有二台Web服务器为web01web02,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:

每天晚上00点整在Web服务器web01web02上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留

 

(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。

具体要求如下:

1)Web服务器web01web02和备份服务器B的备份目录必须都为/backup

2)Web服务器站点目录假定为(/var/www/html)

3)Web服务器本地仅保留7天内的备份。

4)备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。

5)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。

 

规划架构图

快速部署(backup

一:快速搭建rsync服务的脚本

 

[root@backup ~]# mkdir /server/scripts/ -p

[root@backup ~]# vim /server/scripts/rsync-server.sh

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

cat >/etc/rsyncd.conf<<EOF

#rsync_config_________________________start

#created by oldboy 15:01 2016-06-04

#rsyncd.conf start#

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

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]

path = /backup

[data]

path = /data

#rsync_config_______________end

EOF

useradd -s /sbin/nologin -M rsync

mkdir -p /backup

chown -R rsync.rsync /backup

#mkdir /data -p

#chown rsync.rsync /data/

echo "rsync_backup:oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

echo "rsync --daemon" >> /etc/rc.local

rsync --daemon

/etc/init.d/postfix start

chkconfig postfix on

二:备份服务器检查备份文件的状态脚本

 

[root@backup ~]# vim /server/scripts/backup-check.sh

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

> /opt/mail_$(date +%F)

export LANG=en

flag_num=$(find /backup/ -type f -name "flag_$(date +%F)"|wc -l)

if [ $flag_num -eq 2 ];then

    echo "$(date +%F_%T) Node server tar is OK" >/opt/mail_$(date +%F)

else

    echo "$(date +%F_%T) Node server tar is abnormal NO" >>/opt/mail_$(date +%F)

fi

echo ================================================ >>/opt/mail_$(date +%F)

count=$(find /backup/ -type f -name "flag_$(date +%F)"|xargs md5sum -c|grep -v OK|wc -l)

if [ $count -eq 0 ];then

  echo "$(date +%F_%T) backup server is all OK " >>/opt/mail_$(date +%F)

else

  echo "$(date +%F_%T) backup server is abnormal NO" >>/opt/mail_$(date +%F)

  find /backup/ -type f -name "flag_$(date +%F)"|xargs md5sum -c|grep -v OK >>/opt/mail_$(date +%F)

fi

mail -s "backup info $(date +%F_%T)" 838997384@qq.com </opt/mail_$(date +%F)

# delete

find /backup/ -type f -name "www-backup-*.tar.gz" ! -name "www-backup-*6.tar.gz" -mtime +180|xargs rm -f

设置定时任务

[root@backup ~]# crontab -l

#Time synchronization system-Chris-2016-5-2

#*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

 

#backup www conf to backup

01 00 * * * /bin/sh /server/scripts/backup-check.sh >/dev/null 2>&1

快速部署(web01

三:rsync客户端快速部署脚本

[root@web01 ~]# mkdir /server/scripts/ -p

[root@web01 ~]# vim /server/scripts/rsync-client.sh

mkdir -p /backup

echo "oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

 

四:备份服务器备份数据的脚本

[root@web01 ~]# vim /server/scripts/backup-web.sh 

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

IP=$(ifconfig eth1|awk -F '[ :]+' 'NR==2 {print $4}')

Path="/backup/$IP"

[ ! -d $Path ] && mkdir $Path -p

#bak

cd / && tar zcf $Path/www_$(date +%F).tar.gz var/www/html/ &&\

find $Path/ -type f -name "*.tar.gz"|xargs md5sum >$Path/flag_$(date +%F)

#bak to rysnc server

rsync -az /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

#del before 7 day ago

find $Path/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f

设置定时任务

[root@web01 ~]# crontab -l

#Time synchronization system-Chris-2016-5-2

#*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

 

#backup www conf to backup

00 00 * * * /bin/sh /server/scripts/backup-web.sh >/dev/null 2>&1

快速部署(web02

五:rsync客户端快速部署脚本

[root@web02 ~]# mkdir /server/scripts/ -p

[root@web02 ~]# vim /server/scripts/rsync-client.sh

mkdir -p /backup

echo "oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

 

六:备份服务器备份数据的脚本

[root@web02 ~]# vim /server/scripts/backup-web.sh

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

IP=$(ifconfig eth1|awk -F '[ :]+' 'NR==2 {print $4}')

Path="/backup/$IP"

[ ! -d $Path ] && mkdir $Path -p

#bak

cd / && tar zcf $Path/www_$(date +%F).tar.gz var/www/html/ &&\

find $Path/ -type f -name "*.tar.gz"|xargs md5sum >$Path/flag_$(date +%F)

#bak to rysnc server

rsync -az /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

#del before 7 day ago

find $Path/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f

设置定时任务

[root@web01 ~]# crontab -l

#Time synchronization system-Chris-2016-5-2

#*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

 

#backup www conf to backup

00 00 * * * /bin/sh /server/scripts/backup-web.sh >/dev/null 2>&1

测试环节

1.测试web01web02的站点目录是否存在,是否有测试文件?

[root@web01 ~]# ll /var/www/html

-rw-r--r-- 1 root root 0 Jul  3 00:12 file

[root@web02 ~]# ll /var/www/html

-rw-r--r-- 1 root root 0 Jul  3 00:12 file

2.测试backupweb01web02服务是否存在/bakcup目录

[root@backup ~]# ll /backup -d

drwxr-xr-x 4 rsync rsync 4096 Jul  2 00:00 /backup

[root@web01 ~]# ll /backup -d

drwxr-xr-x 3 root root 4096 Jul  2 00:00 /backup

[root@web02 ~]# ll /backup -d

drwxr-xr-x 3 root root 4096 Jul  2 00:00 /backup

3.测试web01web02服务器的备份脚本是否执行成功,即将/var/www/html目录打包被放在本地/bakcup目录,同时实现将打包的文件推送到bakcp服务器的/backup目录下,并以IP地址进行区分。

一:web01备份脚本测试

[root@web01 ~]# /bin/sh /server/scripts/backup-web.sh

[root@web01 ~]# hostname

web01

备份服务器检查是否推送过来

[root@backup ~]# ll /backup/

drwxr-xr-x 2 rsync rsync 4096 Jul  3 00:00 172.16.1.8

二:web02备份脚本测试

[root@web02 ~]# /bin/sh /server/scripts/backup-web.sh

[root@web02 ~]# hostname

web02

备份服务器检查是否推送过来

[root@backup ~]# ll /backup/

drwxr-xr-x 2 rsync rsync 4096 Jul  3 00:00 172.16.1.7

drwxr-xr-x 2 rsync rsync 4096 Jul  3 00:00 172.16.1.8

4.测试backup服务器的备份检查脚本,通过MD5效验检查备份数据是否完整,并发送到指定的邮件

[root@backup ~]# /bin/sh /server/scripts/backup-check.sh

[root@backup ~]# hostname

backup

打开邮件检查是否接收到检查备份信息的相关的邮件

5.检查backupweb01,与web02的定时任务是否设置完成

一:bakcp服务器

[root@backup ~]# crontab -l

#backup www conf to backup

01 00 * * * /bin/sh /server/scripts/backup-check.sh >/dev/null 2>&1

二:web01服务器

[root@web01 ~]# crontab -l

#backup www conf to backup

00 00 * * * /bin/sh /server/scripts/backup-web.sh >/dev/null 2>&1

三:web02服务器

[root@web01 ~]# crontab -l

#backup www conf to backup

00 00 * * * /bin/sh /server/scripts/backup-web.sh >/dev/null 2>&1

6.模拟测试打包的数据顺坏是否会发邮件提示错误(在backup服务器通过echo给压缩包追加内容)

[root@backup ~]# cd /backup/172.16.1.7/

[root@backup 172.16.1.7]# ls

flag_2016-07-02flag_2016-07-03www_2016-07-02.tar.gzwww_2016-07-03.tar.gz

[root@backup 172.16.1.7]# echo 123 >www_2016-07-03.tar.gz

执行检查脚本查看哪个文件已被损坏

[root@backup ~]# /bin/sh /server/scripts/backup-check.sh

md5sum: WARNING: 1 of 2 computed checksums did NOT match

md5sum: WARNING: 1 of 2 computed checksums did NOT match

打开邮件进行检查

 

 

 





附件列表

     

    posted on 2016-06-29 03:55  Chris_李文轩  阅读(382)  评论(0编辑  收藏  举报