第三十八天-一道例题企业级备份方案

一、例题

  某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据备份,这样web服务器数据丢失可以进行恢复。
  要求如下:
  每天晚上00点整在web服务器A上打包备份系统配置文件、网站程序目录及访问日志,并通过rsync命令推送到服务器B上备份保留(备份的思路可以是先在本地按日期打包,然后再推到备份服务器B上)。

  问题一:实现web服务器A数据备份到服务器B
  要求如下:
  1、web服务器A和备份服务器B的备份目录必须都为/backup
  2、系统配置文件包括但不限于:
      a、定时任务服务的配置文件/var/spool/cron/root
      b、开机自启动的配置文件/etc/rc.local
      c、日常脚本目录/server/scripts
      d、防火墙iptables配置文件/etc/sysconfig/iptables
      e、自己思考下还有什么需要备份?
  3、web服务器站点目录假定为/var/html/www
  4、web服务器A访问日志路径假定为/app/logs
  5、web服务器保留打包后的七天的备份数据即可(本地留存不多余7天),备份服务器B上保留6个月的数据备份。
  6、备份服务器B上要按照备份数据服务器的IP为目录保存,打包的文件按照时间名字保存。


二、实施步骤
在B上搭建rsync服务
1、编辑rsync服务配置文件

[root@B /]#vim /etc/rsyncd.conf

2、查看rsync服务配置文件是否配置正确

[root@B /]#cat /etc/rsyncd.conf
#rsync_config_______________start
##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
[backup]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 192.168.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end 

3、创建同步目录,并修改其所属用户和组

[root@B /]# mkdir /backup/
[root@B /]# chown rsync.rsync -R /backup/

4、创建rsync服务虚拟用户和密码文件

[root@B /]# echo "rsync_backup:123456" >/etc/rsync.password
[root@B /]# chmod 600 /etc/rsync.password
[root@B /]# cat /etc/rsync.password
rsync_backup:123456
[root@B /]# rsync --daemon         #启动rsync服务
[root@B /]# lsof -i :873           #查看rsync服务是否启动成功
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1728 root    4u  IPv4  14284      0t0  TCP *:rsync (LISTEN)
rsync   1728 root    5u  IPv6  14285      0t0  TCP *:rsync (LISTEN)

5、关闭防火墙和selinux

[root@B /]# /etc/init.d/iptables stop
[root@B /]# setenforce 0
[root@B /]# getenforce
Permissive

6、在备份端编写简单脚本,删除180天以前的备份,并将脚本加到定时任务中

[root@B scripts]# cat rmfile.sh
#!/bin/bash

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

[root@B scripts]# crontab -l
#########
00 00 * * *  sh /server/scripts/rmfile.sh >/dev/null 2>&1


在A上的配置
1、创建备份目录,并修改目录所属用户和组

[root@A /]# mkdir backup
[root@A /]# chown rsync.rsync -R backup/
[root@A /]# ls -ld backup/
drwxr-xr-x. 2 rsync rsync 4096 12月 26 02:13 backup/

 2、创建rsync密码文件

[root@A /]# echo "123456" >/etc/rsync.password
[root@A /]# chmod 600 /etc/rsync.password
[root@A /]# cat /etc/rsync.password
123456

3、测试同步是否成功

[root@A /]# cd backup/
[root@A backup]# ls
[root@A backup]# touch test.txt
[root@A backup]# echo 124 >test.txt
[root@A backup]# cat test.txt
124
[root@A backup]# rsync -avz /backup/ rsync_backup@192.168.1.115::backup --password-file=/etc/rsync.password
sending incremental file list
./
test.txt

sent 107 bytes  received 30 bytes  274.00 bytes/sec
total size is 4  speedup is 0.03

4、在A上编写打包同步脚本
4.1、打包同步脚本

[root@A scripts]# cat bak.sh
#!/bin/sh

ip=`ifconfig |awk -F '[ :]+' 'NR==2{print $4}'`

[  ! -d /backup/$ip ] && mkdir -p /backup/$ip
cd /backup/$ip &&\
tar czf bak_$(date +%F).tar.gz /var/spool/cron/ /etc/rc.local /server/scripts/ /etc/sysconfig/iptables

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

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

4.2、添加到定时任务

[root@A scripts]# crontab -l
####back system config file and web site  to B server####
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1 

4.3、查看打包备份效果

[root@A scripts]# cd /backup/
[root@A backup]# ls
192.168.1.113
[root@A backup]# cd 192.168.1.113/
[root@A 192.168.1.113]# ls
bak_2015-12-26.tar.gz

[root@B backup]# ls
192.168.1.113
[root@B backup]# cd 192.168.1.113/
[root@B 192.168.1.113]# ls
bak_2015-12-26.tar.gz


问题二、如果有100台服务器需要备份数据,该如何指定备份方案及具体实施?
  解答:
  思路:很多同学说在web客户端备份完毕发邮件给管理员,有100台客户端,老大疯了,早晨开邮箱100封垃圾邮件,这个思路不对。
  正确思路:服务器端检查结果:
  1)du -sh /backup/ip/当天的备份文件 >/tmp/bak.log
  2)打包,推送,再推送一个flag(ip+时间的文件名),本地清理7天前的。
  3)手工或定时的杰宝,模拟数据恢复来确认数据备份的完整性。

问题三、如何在备份数据后,把备份的成功及失败结果信息发给系统管理员邮箱中?
问题四、假如是对NFS共享服务器的数据做备份,如何实现实时的数据同步?

posted @ 2015-12-27 10:09  幻月0412  阅读(372)  评论(0编辑  收藏  举报