第1章 项目准备工作

1.1 基本备份要求

  已知3台服务器主机名分别为:web01,backup,nfs01,主机信息如下表:

服务器说明

外网IP

内网IP

主机名

Nginx web服务器

10.0.0.8/24

172.16.1.8/24

web01

NFS存储服务器

10.0.0.31/24

172.16.1.31/24

nfs01

rsync备份服务器

10.0.0.41/24

172.16.1.41/24

backup

需求:每天晚上0点整在web服务器上打包备份系统配置文件,网站程序目录及访问日志通过rsync命令推送备份服务器backup上备份保留。

 

具体要求如下:

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

2)要备份的系统配置文件包括但不限余:

   a.定时任务服务的配置文件(/var/spool/cron/root)

   b.开机自启动的配置文件(/etc/rc.local)

   c.日常脚本的目录(/server/scripts)

   d.防火墙iptables的配置文件(/etc/sysconfig/iptables)

3)web服务器站点目录为(/var/html/www)

4)Web服务器A访问日志的路径为(/app/logs)

5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)

6)备份服务器上,保留最近7天的备份数据,同时保留6个月内每周一的所有数据。

7)备份服务器上要安装备份数据服务器的内网IP为目录保存备份,备份的文件安装时间名字保存。

8)需要确保备份的数据尽量完整争取,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员的邮箱中。

 

1.2 简单逻辑图

 

1.3 解题思路

1)搭建backup服务器。

   a.搭建rsync服务

2)搭建web服务器。

   1.验证rsync服务能否推送成功。

   2.开发脚本,实现打包,备份,推送,校验,删除。

   3.配置定时任务定时推送,每天0点定时推送。

3)搭建backup服务器。

1.实现校验,删除,报警。

2.配置定时任务每天6点定时执行。

4)搭建nfs服务器。

   1.验证rsync服务能否推送成功。

   2.开发脚本,实现打包,备份,推送,校验,删除。

   3.配置定时任务定时推送,每天0点定时推送。

 

 

第2章 项目实施

2.1 搭建backup服务器。

2.1.1 rsync的默认配置文件是/etc/rsyncd.conf,配置文件默认是空的,需要自己编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@backup ~] # cat /etc/rsyncd.conf
#rsync_config_____________________________start
#created by oldboy 15:01 2007-6-5
##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/rsyncd .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      
[nfsbackup]
path =  /nfsbackup
[luo]
path =  /luo
ignore errors
read  only =  false
list =  false
hosts allow = 172.16.1.0 /24
#hosts deny = 0.0.0.0/32
auth  users  = tang
secrets  file  /etc/tang
#rsync_config________________________end

 

2.1.2 添加用户rsync

1
2
3
[root@backup ~] # useradd rsync -s /sbin/nologin -M
[root@backup ~] # cat /etc/passwd|grep rsync
rsync :x:501:501:: /home/rsync : /sbin/nologin

 

为什么用虚拟用户?

应答:文件和进程都要满足属主的要求,文件和进程的存在一定是需要用户的,也是为了安全问题。

2.1.3 根目录下添加backup目录

1
2
3
4
[root@backup ~] # mkdir -p /backup/
[root@backup ~] # chown -R rsync.rsync /backup/
[root@backup ~] # ls -ld /backup/
drwxr-xr-x 3  rsync  rsync  20480 1月  18 09:51  /backup/

 

2.1.4 创建rsync的密码配置文件,默认也是空的

1
2
3
4
5
[root@backup ~] # cat /etc/rsync.password 
rsync_backup:oldboy
[root@backup ~] # chmod 600  /etc/rsync.password 
[root@backup ~] # ls -l /etc/rsync.password 
-rw-------. 1 root root 20 11月 29 01:14  /etc/rsync .password

 

2.1.5 开启服务并开机自启动

1
2
[root@backup ~] # tail -1 /etc/rc.local 
/usr/bin/rsync  --daemon

 

2.1.6 服务器端测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@backup ~] # ps -ef|grep rsync|grep -v grep
root      23049      1  0 Jan15 ?        00:00:00  rsync  --daemon
root@backup ~] # lsof -i:rsync
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
rsync    23049 root    3u  IPv4  56971      0t0  TCP *: rsync  (LISTEN)
rsync    23049 root    5u  IPv6  56972      0t0  TCP *: rsync  (LISTEN)
[root@backup ~] # netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      23049 /rsync         
tcp        0      0 :::873                      :::*                        LISTEN      23049 /rsync         
[root@backup ~] # telnet 172.16.1.41 873
Trying 172.16.1.41...
Connected to 172.16.1.41.
Escape character is  '^]' .
@RSYNCD: 30.0
说明服务器端配置没有问题

 

 

2.2 验证rsync服务能否推送成功。

2.2.1 客户端配置

1
2
3
4
   [root@web01 ~] # cat /etc/rsync.password 
oldboy
[root@web01 ~] # ls -ld /etc/rsync.password 
-rw------- 1 root root 7 1月  18 16:01  /etc/rsync .password

 

 

2.2.2 客户端推送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@web01 backup] # rsync -avz /backup/  rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password   
sending incremental  file  list
./
1
10
2
3
4
5
6
7
8
9
说明客户端推送成功

 

 

 

2.2.3 Web服务器实现打包,备份,推送,删除。

2.2.3.1 命令行备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@web01 backup] # mkdir /var/html/www -p
[root@web01 scripts] # mkdir /app/logs -p
[root@web01 /] # tar zcvfh /backup/sys_config_$(date +%F).tar.gz  ./var/spool/cron/root  ./server/scripts/ ./etc/rc.local  
. /var/spool/cron/root
. /server/scripts/
. /server/scripts/bak .sh
. /etc/rc . local
[root@web01 /] # tar zcvfh /backup/webdata_config_$(date +%F).tar.gz ./var/html/www/
. /var/html/www/
. /var/html/www/4
. /var/html/www/7
. /var/html/www/5
. /var/html/www/6
. /var/html/www/2
. /var/html/www/8
. /var/html/www/3
. /var/html/www/10
. /var/html/www/1
. /var/html/www/9
[root@web01 /] # tar zcvfh /backup/access_log_config_$(date +%F).tar.gz ./app/logs/ 
. /app/logs/
. /app/logs/f
. /app/logs/c
. /app/logs/a
. /app/logs/d
. /app/logs/e
. /app/logs/b
. /app/logs/g

 

2.2.3.2 推送:
1
[root@web01 backup] # rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

 

2.2.3.3 删除:
1
[root@web01 backup] # find /backup/ -type f -mtime +7|xargs rm -rf

 

 

 

2.2.3.4 全部放到脚本里:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat    /server/scripts/bak .sh
#!/bin/sh
export  PATH= /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin : /root/bin
IP=$( ifconfig  eth1| awk  -F  "[ :]+"  'NR==2{print $4}' )
Bak_Path= /backup
mkdir  $Bak_Path/$IP -p
if  [ $( date  +%w) - eq  2  ]; then
date = "$(date +%F -d " -1day ")_week1"
else
date = "$(date +%F -d " -1day ")"
fi
cd  / &&\
tar  zcfh $Bak_Path/$IP /sys_config_ ${ date }. tar .gz . /var/spool/cron  . /etc/rc . local  . /server/sc
ripts   &&\
tar  zcf $Bak_Path/$IP /webdata_ ${ date }. tar .gz var /html/www/    &&\
tar  zcf $Bak_Path/$IP /access_log_ ${ date }. tar .gz app /logs/   &&\
find  $Bak_Path - type  f -name  "*.tar.gz" | xargs  md5sum >$Bak_Path/$IP /flag_ ${ date } &&\
rsync  -az $Bak_Path/ rsync_backup@172.16.1.41::backup/ --password- file = /etc/rsync .password
&&\
###delete data before 7days ago by chen at 20170118
find  $Bak_Path - type  f  -mtime +7| xargs  rm  -f
~

 

2.2.3.5 每天00点定时任务推送
1
2
[root@web01 backup] # crontab -l
00 00 * * *  /bin/sh  /server/scripts/bak .sh > /dev/null  2>&1  完成客户端的定时任务推送工作

 

第3章 backup服务器实现校验,删除,报警

首先我们测试下如果实现服务器报警

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@backup ~] # tail -1 /etc/mail.rc 
set  from=njlc_jsbcmq@163.com smtp=smtp.163.com smtp-auth-user=njlc_jsbcmq  smtp-auth-password=hgg7454196ls smtp-auth=login
[root@backup ~] #  echo "31qqi zuzi bang"|mail -s "nihao" 373967205@qq.com
就可以收到邮件了
  
[root@backup scripts] # cat checkbak.sh 
#!/bin/bash
export
if  [ $( date  +%w) - eq  2 ]; then
date = "$(date +%F -d " -1day ")_week1"
else
date = "$(date +%F -d " -1day ")"
fi
find  /backup/  -name  "flag_${date}*" | xargs  md5sum -c  &>> /tmp/mail_ $( date  +%F).log
find  /backup/  - type  f -name  "*.tar.gz"   -a ! -name  "*week1*"   -mtime +1| xargs  rm  -f 
mail -s   "backup ~date~"   373967205@qq.com < /tmp/mail_ $( date  +%F).log
\ cp  /tmp/mail_ $( date  +%F).log   /tmp/mail_ $( date  +%F).log.ori
> /tmp/mail_ $( date  +%F).log
做定时任务,每天上午6点发送邮箱
[root@backup scripts] # crontab -l
* * * * *  /usr/sbin/ntpdate  time .nist.gov > /dev/null  2>&1 
* * * * *  /bin/bash   /server/scripts/checkbak .sh > /dev/null  2>&1 
项目完成