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


:Mr.zhou  阅读: 3,134 次

  案例:rsync

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

每天晚上00点整在Web服务器A上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器上)。

  具体要求如下:

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

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

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

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

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

 

  演示环境:

  Web 服务器

[root@web-a ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@web-a ~]# hostname
web-a.z-dig.com
[root@web-a ~]# hostname -i
172.16.1.210
[root@web-a ~]# getsebool 
getsebool:  SELinux is disabled
[root@web-a ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@web-a ~]# 

  备份服务器

[root@backup-b ~]# hostname
backup-b.z-dig.com
[root@backup-b ~]# hostname -i
172.16.1.211
[root@backup-b ~]# getsebool 
getsebool:  SELinux is disabled
[root@backup-b ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@backup-b ~]#

  一、模拟环境,创建相关的目录及文件。

[root@web-a ~]# mkdir /backup
[root@web-a ~]# mkdir -p /var/www/html
[root@web-a ~]# for i in {a..z};do echo "This is $i.html">/var/www/html/$i.html;done;
[root@web-a ~]# ls /var/www/html/
a.html  e.html  i.html  m.html  q.html  u.html  y.html
b.html  f.html  j.html  n.html  r.html  v.html  z.html
c.html  g.html  k.html  o.html  s.html  w.html
d.html  h.html  l.html  p.html  t.html  x.html
[root@web-a ~]#
[root@backup-b ~]# mkdir /backup

  二、配置备份服务器,使用 rsync –daemon 模式。

  编辑 rsync 的配置文件 /etc/rsyncd.conf

[root@backup-b ~]# cat /etc/rsyncd.conf 
uid = rsync
gid = rsync
read only = false
list = false
max connections = 1000
pid = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
use chroot = ture
auth users = backup
secrets file = /etc/rsyncd.secrets
[backup]
comment = backup
path = /backup
[root@backup-b ~]#

  生成客户端认证使用的用户名密码文件,根据 rsyncd.conf 的配置,客户端的认证用户为 backup,密码文件为 /etc/rsyncd.secrets 。并更改密码文件的权限为 600。

[root@backup-b ~]# echo 'backup:!@#$%^'>/etc/rsyncd.secrets
[root@backup-b ~]# cat /etc/rsyncd.secrets 
backup:!@#$%^
[root@backup-b ~]# ll /etc/rsyncd.secrets    
-rw------- 1 root root 14 Jun 23 00:42 /etc/rsyncd.secrets
[root@backup-b ~]# 

  创建 rsync 用户,并将 /backup 的属主和属组改为 rsync 。

[root@backup-b ~]# useradd -M -s /sbin/nologin rsync
[root@backup-b ~]# id rsync
uid=500(rsync) gid=500(rsync) groups=500(rsync)
[root@backup-b ~]# chown -R rsync.rsync /backup
[root@backup-b ~]# ll -d /backup
drwxr-xr-x 2 rsync rsync 4096 Jun 23 00:38 /backup

  启动 rsync –daemon 。并设置为开机自启动。

[root@backup-b ~]# rsync --daemon
[root@backup-b ~]# echo 'rsync --daemon'>>/etc/rc.local 
[root@backup-b ~]# tail -2 /etc/rc.local 
touch /var/lock/subsys/local
rsync --daemon
[root@backup-b ~]# 
[root@backup-b ~]# ps -ef|grep rsync|grep -v "grep" 
root       2040      1  0 00:45 ?        00:00:00 rsync --daemon
[root@backup-b ~]# netstat -nltup|grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2040/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      2040/rsync  
[root@backup-b ~]#

  三、在 Web 服务器端,创建 rsync 密码文件。并进行测试。

[root@web-a ~]# echo '!@#$%^'>/etc/rsyncd.secrets
[root@web-a ~]# chmod 600 /etc/rsyncd.secrets           
[root@web-a ~]# ll /etc/rsyncd.secrets           
-rw------- 1 root root 7 Jun 23 00:53 /etc/rsyncd.secrets
[root@web-a ~]# cat /etc/rsyncd.secrets 
!@#$%^
[root@web-a ~]#

  测试

[root@web-a ~]# ls /backup/
[root@web-a ~]# touch /backup/test-rsync-daemon.txt
[root@web-a ~]# ls /backup/
test-rsync-daemon.txt
[root@web-a ~]# rsync -avz /backup/ backup@172.16.1.211::backup --password-file=/etc/rsyncd.secrets 
sending incremental file list
./
test-rsync-daemon.txt

sent 91 bytes  received 30 bytes  242.00 bytes/sec
total size is 0  speedup is 0.00
[root@web-a ~]#


[root@backup-b ~]# ll /backup/
total 0
-rw-r--r-- 1 rsync rsync 0 Jun 23 00:56 test-rsync-daemon.txt
[root@backup-b ~]#

  测试成功。

  四、在 Web 服务器端编写相应的脚本。

[root@web-a ~]# mkdir -p /scripts/backuphtml
[root@web-a ~]# ls /scripts/backuphtml
autoclean.sh  backupname.sh  backup.sh
[root@web-a ~]# 

  backupname.sh

[root@web-a ~]# cat /scripts/backuphtml/backupname.sh 
#!/bin/bash
# generate backup tar name everyday,it's important.by mr.zhou
echo "html.`hostname -i`.`date +%F`-`date +%w`.tar.gz">/tmp/backupname.txt
[root@web-a ~]# 

  backup.sh

[root@web-a ~]# cat /scripts/backuphtml/backup.sh 
#!/bin/bash
# backup /var/www/html to /backup/,generate md5 of everyday backup and send them to rsync server.by mr.zhou
logfile=/var/log/backuphtml.log&&\
backupname=`cat /tmp/backupname.txt 2>>$logfile`&&\
backupmd5=`cat /tmp/backupname.txt 2>>$logfile`.md5&&\
cd /var/www&&tar zcf /backup/$backupname html&&\
cd /backup/&&\
md5sum $backupname>/backup/$backupmd5&&\
rsync -avz /backup/$backupname /backup/$backupmd5 /tmp/backupname.txt backup@172.16.1.211::backup --password-file=/etc/rsyncd.secrets 1>/dev/null 2>>$logfile
[root@web-a ~]#

  autoclean.sh Web服务器本地仅保留7天内的备份

[root@web-a ~]# cat /scripts/backuphtml/autoclean.sh 
#!/bin/bash
#auto delete local html backup 7 days ago.by mr.zhou
find /backup/ -type f -name "html.*" -mtime +7 -exec rm -f {} \;
[root@web-a ~]#

  五、对 backupname.sh backup.sh 进行测试,看能否将备份文件和md5信息文件,上传至备份服务器。

[root@backup-b /]# hostname
backup-b.z-dig.com
[root@backup-b /]# ls /backup
test-rsync-daemon.txt
[root@backup-b /]#
[root@web-a ~]# hostname
web-a.z-dig.com
[root@web-a ~]# ls /backup/
test-rsync-daemon.txt
[root@web-a ~]# 
[root@web-a ~]# bash /scripts/backuphtml/backupname.sh 
[root@web-a ~]# bash /scripts/backuphtml/backup.sh 
[root@web-a ~]# ls /backup
html.172.16.1.210.2015-06-23-2.tar.gz
html.172.16.1.210.2015-06-23-2.tar.gz.md5
test-rsync-daemon.txt
[root@web-a ~]# 
[root@backup-b /]# hostname
backup-b.z-dig.com
[root@backup-b /]# ls /backup/
backupname.txt
html.172.16.1.210.2015-06-23-2.tar.gz
html.172.16.1.210.2015-06-23-2.tar.gz.md5
test-rsync-daemon.txt
[root@backup-b /]# cat /backup/html.172.16.1.210.2015-06-23-2.tar.gz.md5 
92c9baa94e83c7d617445e433d6648ee  html.172.16.1.210.2015-06-23-2.tar.gz
[root@backup-b /]#

  Web 服务端的两个脚本测试成功。

  六、在 Web 服务端编写定时任务。

[root@web-a ~]# crontab -l
#generate backup tar name for backup.sh
59 23 * * * /bin/bash /scripts/backuphtml/backupname.sh >/dev/null 2>&1

# backup for /var/www/html
00 00 * * * /bin/bash /scripts/backuphtml/backup.sh >/dev/null 2>&1

#auto delete local html backup 7 days ago
00 01 * * * /bin/bash /scripts/backuphtml/autoclean.sh >/dev/null 2>&1
[root@web-a ~]#

  七、开启备份服务器端的 postfix 服务。并配置使用外网邮箱账户发送邮件。

[root@backup-b /]# /etc/init.d/postfix start
Starting postfix:                                          [  OK  ]
[root@backup-b /]#
[root@backup-b /]# tail -3 /etc/mail.rc   
#service@z-dig.com
set from=service@z-dig.com smtp=smtp.*****.com
set smtp-auth-user=service@z-dig.com smtp-auth-password=****** smtp-auth=login
[root@backup-b /]#
[root@backup-b ~]# echo '/etc/init.d/postfix start'>>/etc/rc.local 
[root@backup-b ~]# tail -2 /etc/rc.local 
rsync --daemon
/etc/init.d/postfix start
[root@backup-b ~]#

  八、在备份服务器端编写相应的脚本。

[root@backup-b ~]# ls /scripts/backuphtml/
autoclean.sh  md5check.sh
[root@backup-b ~]# 

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

[root@backup-b ~]# cat /scripts/backuphtml/md5check.sh   
#!/bin/bash
#check md5 of web server and backup server 's html backup file.by mr.zhou
#set -x
cd /backup&&\
backupname=`cat backupname.txt`
orimd5=`cat $backupname.md5`&&\
bakmd5=`md5sum $backupname`&&\
if [[ $orimd5 == $bakmd5 ]];then
mail -s "`cat backupname.txt` backup success!" zhou*@163.com < /dev/null
else
mail -s "`cat backupname.txt` backup failed!" zhou*@163.com < /dev/null
fi
[root@backup-b ~]#

  autoclean.sh 备份服务器上每周六的数据都保留,其他备份仅保留180天备份

[root@backup-b ~]# cat /scripts/backuphtml/autoclean.sh 
#!/bin/bash
#auto delete html backup form 172.16.1.210 by mr.zhou
find /backup/ -type f ! -name "*-6.tar.gz" -name "html.*" -mtime +180 -exec rm -f {} \; 2>/dev/null
[root@backup-b ~]#

  对 md5check.sh 进行检测。

[root@backup-b ~]# bash /scripts/backuphtml/md5check.sh 
Null message body; hope that's ok
[root@backup-b ~]# 

image

  手动更改 html.172.16.1.210.2015-06-23-2.tar.gz 的内容,使备份服务器端的备份文件 md5 跟 Web 服务器端的备份文件 md5 不同。再次进行测试。

[root@backup-b ~]# >/backup/html.172.16.1.210.2015-06-23-2.tar.gz
[root@backup-b ~]#
[root@backup-b ~]# bash /scripts/backuphtml/md5check.sh 
Null message body; hope that's ok
[root@backup-b ~]# 

 

image

  此脚本测试成功。

  九、在备份服务器端编写定时任务。

[root@backup-b ~]# crontab -l
#check md5 of web server and backup's html backup file
58 00 * * * /bin/bash /scripts/backuphtml/md5check.sh >/dev/null 2>&1
#auto delet before 180 days html backup
00 01 * * * /bin/bash /scripts/backuphtml/autoclean.sh >/dev/null 2>&1
[root@backup-b ~]#

  十、清空 /backup 中的所有文件。进行最后的模拟生产环境测试。

  模拟生产环境。稍后完成。时间间隔不好算啊!

[root@web-a ~]# for i in {1..30};do echo " date -s \"2015-5-$i 23:58:58\"&&sleep 65"|tr "\n" ';'|/bin/bash;done;

[root@backup-b ~]# for i in {1..30};do echo " date -s \"2015-5-$i 00:57:58\"&&sleep 123"|tr "\n" ';'|/bin/bash;done;

      

转载请注明原文链接:http://www.z-dig.com/backing-up-server-data-production-architecture-scheme-of-network-wide-case-models.html



正文部分到此结束