第三十八天-一道例题企业级备份方案
一、例题
某公司里有一台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共享服务器的数据做备份,如何实现实时的数据同步?