全网备份案例
备份全网服务器数据生产架构方案案例模型
企业案例:rsync上机实战考试题:
某公司里有二台Web服务器为web01和web02,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:
每天晚上00点整在Web服务器web01和web02上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留
(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。
具体要求如下:
1)Web服务器web01和web02和备份服务器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.测试web01与web02的站点目录是否存在,是否有测试文件?
[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.测试backup,web01,web02服务是否存在/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.测试web01与web02服务器的备份脚本是否执行成功,即将/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.检查backup,web01,与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
打开邮件进行检查
附件列表