大规模集群全网备份案例及分析(超详细)

                               大规模集群全网备份

                                                                                                    --案例及分析

要求:

企业案例:rsync上机实战考试题

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

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

具体要求如下:

1. 需要备份的文件或目录有(原则上,只要运维人员写入或更改的数据,都需要备份):

/var/spool/cron/root  /etc/rc.local  /etc/sysconfig/iptables  /var/www/heml   /app/logs

2. 为了规范化,每台web服务器进行本地备份时都备份到/backup目录下

3. 每台web服务器进行本地备份时,都备份到/backup下以本地IP地址命名的目录中

4. 打的tarball文件名需要包含执行当天的日期

5. 统一存储备份数据的服务器通过rsync daemon 方式提供存储备份数据的目录/bakcup

6. 由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除

7. 为了方便的知道每次备份是否成功,我们需要做如下操作:

在每台web服务器上检查备份是否成功

在存储备份数据的服务器上检查备份数据是否推送成功,并发送邮件至管理员邮箱

8. 由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留

解答:

几个里程碑
1.在rsync服务器上,配置rsync服务,实现推送
服务端成功配置rsync,并在客户端成功推送。
2.在客户端nfs服务器上,实现打包,推送,删除,定时任务推送。
3.在rsync备份服务器上,做检查,发邮件给管理员

里程碑1

服务端:

[root@backup ~]# ifconfig eth0  

eth0      Link encap:Ethernet  HWaddr 00:0C:29:F7:EC:E5  

          inet addr:10.0.0.41  Bcast:10.0.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fef7:ece5/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1150 errors:0 dropped:0 overruns:0 frame:0

          TX packets:993 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:134810 (131.6 KiB)  TX bytes:122678 (119.8 KiB)

 

[root@backup ~]# cat /etc/redhat-release

CentOS release 6.7 (Final)

[root@backup ~]# uname -r

2.6.32-573.el6.x86_64

[root@backup ~]# rsync --version

rsync  version 3.0.6  protocol version 30

Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.

Web site: http://rsync.samba.org/

Capabilities:

    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,

    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,

    append, ACLs, xattrs, iconv, symtimes

 

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you

are welcome to redistribute it under certain conditions.  See the GNU

General Public Licence for details.

Rsync 的配置文件在/etc/rsycnd.conf   默认是不存在的

可以man rsyncd.conf 查看配置文件里的内容,然后再来添加

[root@backup ~]# vim /etc/rsyncd.conf

#rsync_config__________________________start

#created by oldboy 20:30 2018-3-13

##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 = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

#rsync_config________________end

~                                                                                

"/etc/rsyncd.conf" 21L, 488C 已写入

  

[root@backup ~]# id rsync   ==》查看rsync用户是否存在

id: rsync:无此用户

[root@backup ~]# useradd rsync -s /sbin/nologin -M   -M:不建家目录

[root@backup ~]# tail -1 /etc/passwd

rsync:x:501:501::/home/rsync:/sbin/nologin

[root@backup ~]# rsync --daemon   ==》启动服务

[root@backup ~]# ps -ef |grep rsync|grep -v grep   ==》查看是否启动

root      27649      1  0 20:39 ?        00:00:00 rsync --daemon

[root@backup ~]# ll -d /backup

ls: 无法访问/backup: 没有那个文件或目录

[root@backup ~]# mkdir /backup

[root@backup ~]# ls -ld /backup

drwxr-xr-x 2 root root 4096 3月  13 20:44 /backup

[root@backup ~]# chmod 777 /backup   ==》不安全

[root@backup ~]# ll -d /backup

drwxrwxrwx 2 root root 4096 3月  13 20:44 /backup

[root@backup ~]# chmod 755 /backup

[root@backup ~]# ll -d /backup

drwxr-xr-x 2 root root 4096 3月  13 20:44 /backup

[root@backup ~]# chown rsync.rsync /backup   权限越小越安全

[root@backup ~]# ll -d /backup

drwxr-xr-x 2 rsync rsync 4096 3月  13 20:44 /backup

[root@backup ~]# ll /etc/rsync.passwd

ls: 无法访问/etc/rsync.passwd: 没有那个文件或目录

[root@backup ~]# vim /etc/rsync.passwd

rsync_backup:oldboy     用户:密码

[root@backup ~]# cat /etc/rsync.passwd

rsync_backup:oldboy

[root@backup ~]# ls -l /etc/rsync.passwd

-rw-r--r-- 1 root root 21 3月  13 20:50 /etc/rsync.passwd

[root@backup ~]# chmod 600 /etc/rsync.passwd    修该/etc/rsync.passwd文件权限,注意此处必须为600不然会在日志文件中报错

[root@backup ~]# ls /etc/rsync.passwd -l

-rw------- 1 root root 21 3月  13 20:50 /etc/rsync.passwd

客户端:

[root@nfs01 ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:82:B0:96  

          inet addr:10.0.0.31  Bcast:10.0.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe82:b096/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:2391 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1654 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:243484 (237.7 KiB)  TX bytes:228034 (222.6 KiB)

 

[root@nfs01 ~]# cat /etc/redhat-release

CentOS release 6.7 (Final)

[root@nfs01 ~]# uname -r

2.6.32-573.el6.x86_64

[root@nfs01 ~]# rsync --version

rsync  version 3.0.6  protocol version 30

Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.

Web site: http://rsync.samba.org/

Capabilities:

    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,

    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,

    append, ACLs, xattrs, iconv, symtimes

 

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you

are welcome to redistribute it under certain conditions.  See the GNU

General Public Licence for details.

[root@nfs01 ~]# vim /etc/rsync.password

oldboy

[root@nfs01 ~]# cat /etc/rsync.password

oldboy

[root@nfs01 ~]# chmod 600 /etc/rsync.password

[root@nfs01 ~]# ll /etc/rsync.password

-rw------- 1 root root 7 3月  14 19:24 /etc/rsync.password

[root@nfs01 ~]# cd /mnt/

[root@nfs01 mnt]# mkdir -p /backup

[root@nfs01 mnt]# ll

总用量 0

[root@nfs01 mnt]# ll -d /backup

drwxr-xr-x 2 root root 4096 3月  14 19:25 /backup

客户端向服务端推送:

[root@nfs01 mnt]# cd /backup/    ==》在客户端创建一个和服务端相同的目录,目的是为了可以将需要推送的文件都放到该目录下进行推送

[root@nfs01 backup]# touch stu{01..100}   ==》在该目录下创建文件

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password      ==》将该目录下的文件都推送给服务端

sending incremental file list

./

stu001

stu002

stu003

......

stu099

stu100

 

sent 4425 bytes  received 1911 bytes  12672.00 bytes/sec

total size is 0  speedup is 0.00

[root@backup ~]# ls /backup/   ==》查看服务端下/backup/下的文件

stu001  stu011  stu021  stu031  stu041  stu051  stu061  stu071  stu081  stu091 ==》推送成功

[root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected] /backup/ --password-file=/etc/rsync.password    ==》另一种推送方法

Unexpected remote arg: rsync://[email protected]

rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]

[root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/ --password-file=/etc/rsync.password

sending incremental file list

./

stu001

stu002

stu003

[root@backup ~]# rm -fr /backup/   ==》注意这里的删除是将该目录及该目录下的文件全删除

[root@backup ~]# cd /backup

-bash: cd: /backup: 没有那个文件或目录

[root@backup ~]#

[root@backup ~]#

[root@backup ~]#

[root@backup ~]# mkdir /backup

[root@backup ~]# chown rsync.rsync /backup

[root@backup ~]# ll /backup/

总用量 0

[root@backup ~]# ll /backup

总用量 0

[root@backup ~]# ll /backup -d

drwxr-xr-x 2 rsync rsync 4096 3月  14 19:48 /backup

[root@backup ~]# ll /backup

总用量 0

-rw-r--r-- 1 rsync rsync 0 3月  14 19:27 stu001

-rw-r--r-- 1 rsync rsync 0 3月  14 19:27 stu002

-rw-r--r-- 1 rsync rsync 0 3月  14 19:27 stu003

-rw-r--r-- 1 rsync rsync 0 3月  14 19:27 stu004

[root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/stu01 --password-file=/etc/rsync.password     ==》这里是推送目录下的某一个文件,这里只展示一种方法

sending incremental file list

created directory stu01

./

stu001

stu002

stu003

stu004

stu005

stu006

st[root@backup ~]# ll /backup/   ==》推送成功

总用量 4

drwxr-xr-x 2 rsync rsync 4096 3月  14 19:27 stu01

u007

里程碑2

模拟

因为在客户机上/var/www/heml   /app/logs这两个文件没有,所以需要模拟:

[root@nfs01 backup]# mkdir /var/www/html /app/logs -p

打包:

[root@nfs01 backup]# cd /

[root@nfs01 /]# tar zcvfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs

var/spool/cron/root

etc/rc.local

etc/sysconfig/iptables

var/www/html/

app/logs/

推送:

[root@nfs01 /]# rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password

sending incremental file list

./

backup_2018-03-18.tar.gz

 

sent 841 bytes  received 30 bytes  116.13 bytes/sec

total size is 731  speedup is 0.84

[root@backup backup]# ll

总用量 4

-rw-r--r-- 1 rsync rsync 731 3月  18 15:52 backup_2018-03-18.tar.gz

删除:

[root@nfs01 /]# find /backup/ -type f -name "*.tar.gz" -mtime +7 |xargs rm -f

放入脚本:

[root@nfs01 /]# mkdir -p /server/scripts   ==》存放脚本的目录,都写在该目录下

[root@nfs01 /]# cd /server/scripts/

[root@nfs01 scripts]# vim bak.sh     ==》打包,推送,删除,保留等要求都放在该脚本里

cd / &&\      ==》切换到/目录下, &&\的作用时链接两个命令

tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc   ==》打包

/sysconfig/iptables var/www/html app/logs &&\

rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.

password &&\                         ==》推送

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

[root@nfs01 scripts]# rm -f /backup/*   ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验

[root@backup ~]# rm -f /backup/*    ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验

[root@backup ~]# ll /backup/      ==》查看一下是否完全删除/backup/目录下的所有文件

总用量 0

[root@nfs01 scripts]# sh bak.sh    ==》执行脚本

[root@nfs01 scripts]# ll /backup/   ==》查看执行结果

总用量 4

-rw-r--r-- 1 root root 731 3月  18 16:06 backup_2018-03-18.tar.gz

[root@backup ~]# ll /backup/    ==》查看执行结果

总用量 4

-rw-r--r-- 1 rsync rsync 731 3月  18 16:08 backup_2018-03-18.tar.gz

[root@backup ~]# md5sum /etc/hosts    ==》md5sum 指纹验证命令,确保传送安全性

54fb6627dbaa37721048e4549db3224d  /etc/hosts

[root@backup ~]# md5sum /bin/ls    ==》也可以指纹验证二进制文件

d5a715d0390ec5c2855094c805b08787  /bin/ls

[root@nfs01 scripts]# vim bak.sh    ==》向脚本中加入指纹验证 确保安全性能

cd / &&\

tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc

/sysconfig/iptables var/www/html app/logs &&\

rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.

password &&\

md5sum /backup/backup_$(date +%F).tar.gz >/backup/flag_$(date +%F).log  ==向指纹放到.log文件中,以便查看

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

"bak.sh" 5L, 359C 已写入                                     

[root@nfs01 scripts]# cat bak.sh    ==查看脚本

cd / &&\

tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.password &&\

md5sum /backup/backup_$(date +%F).tar.gz >/backup/flag_$(date +%F).log

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

[root@backup backup]# rm -f *   ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验

[root@backup backup]# ll

总用量 0

[root@nfs01 scripts]# sh bak.sh   ==》执行脚本

[root@backup backup]# ll   ==》查看脚本执行结果

总用量 8

-rw-r--r-- 1 rsync rsync 731 3月  18 16:22 backup_2018-03-18.tar.gz

-rw-r--r-- 1 rsync rsync  67 3月  18 16:22 flag_2018-03-18.log

当多台客户端同时备份时,通过ip可以知道备份文件的所属谁者

[root@nfs01 scripts]# ifconfig eth1    ==》查看IP

eth1      Link encap:Ethernet  HWaddr 00:0C:29:82:B0:A0  

          inet addr:172.16.1.31  Bcast:172.16.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe82:b0a0/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:731 errors:0 dropped:0 overruns:0 frame:0

          TX packets:555 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:86214 (84.1 KiB)  TX bytes:80803 (78.9 KiB)

 

[root@nfs01 scripts]# ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}'    ==》用awk取IP

172.16.1.31

[root@nfs01 scripts]# vim bak.sh   

cd / &&\

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')   ==》向脚本中加入取IP,然后让所有的备份文件都打上IP标签

Path=/backup           ==》黄色部分是不同上面脚本的地方,这样做的好处是可以简写脚本

Time=$(date +%F)

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys

config/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa

ssword &&\

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

"bak.sh" 10L, 467C 已写入

[root@backup backup]# rm -fr *

[root@nfs01 scripts]# sh /server/scripts/bak.sh

[root@backup backup]# ll

总用量 12

drwxr-xr-x 2 rsync rsync 4096 3月  18 16:35 172.16.1.31    ==》这里就出现了上面脚本里的添加内容

-rw-r--r-- 1 rsync rsync  731 3月  18 16:22 backup_2018-03-18.tar.gz

-rw-r--r-- 1 rsync rsync   67 3月  18 16:22 flag_2018-03-18.log

[root@backup backup]# cd 172.16.1.31/

[root@backup 172.16.1.31]# ll

总用量 8

-rw-r--r-- 1 rsync rsync 731 3月  18 16:36 backup_2018-03-18.tar.gz

-rw-r--r-- 1 rsync rsync  79 3月  18 16:36 flag_2018-03-18.log

[root@backup 172.16.1.31]# cat flag_2018-03-18.log      ==》注意这里的.log里的内容是指纹

8434085d89e8706fda82ec4c0ec5ac8b  /backup/172.16.1.31/backup_2018-03-18.tar.gz

[root@nfs01 scripts]# cat bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

Time=$(date +%F)

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\

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

[root@nfs01 scripts]# find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \)

/backup/172.16.1.31/flag_2018-03-18.log

/backup/172.16.1.31/backup_2018-03-18.tar.gz     ==》这里是为了删除7天前的数据

/backup/flag_2018-03-18.log

/backup/backup_2018-03-18.tar.gz

[root@nfs01 scripts]# find /backup/ -type f -mtime +7 \( -name "*.log" -o -name "*.tar.gz" \)

[root@nfs01 scripts]# vim bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

Time=$(date +%F)

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys

config/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa

ssword &&\

find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs

rm -f                                                                   

"bak.sh" 10L, 478C 已写入

[root@nfs01 scripts]# sh bak.sh

/backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/backup_2018-03-18.tar.gz

[root@nfs01 scripts]# cd /backup/

[root@nfs01 backup]# ll

总用量 4

drwxr-xr-x 2 root root 4096 3月  18 17:11 172.16.1.31

[root@backup backup]# ll

总用量 4

drwxr-xr-x 2 rsync rsync 4096 3月  18 17:11 172.16.1.31

[root@nfs01 scripts]# vim bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 6 ]

Then         这里的判断语句主要是为了分辨出星期六,因为星期六的备份要永久保留

 Time=$(date +%F-%w)

else

 Time=$(date +%F)

fi

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys

config/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa

ssword &&\

find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs

"bak.sh" 17L, 539C 已写入                                    

[root@nfs01 scripts]# date -s "2018/3/24"   ==》修改时间是为了验证脚本

2018年 03月 24日 星期六 00:00:00 CST

[root@nfs01 scripts]# sh bak.sh

/backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz

[root@backup backup]# ll

总用量 12

drwxr-xr-x 2 rsync rsync 4096 3月  24 2018 172.16.1.31

-rw-r--r-- 1 rsync rsync  761 4月  22 2018 backup_2018-04-22.tar.gz

-rw-r--r-- 1 rsync rsync   68 4月  22 2018 flag_2018-04-22.log

[root@backup backup]# cd 172.16.1.31/

[root@backup 172.16.1.31]# ll

总用量 24

-rw-r--r-- 1 rsync rsync 761 3月  18 17:14 backup_2018-03-18.tar.gz     ==》两者对比,发现有不同之处

-rw-r--r-- 1 rsync rsync 761 3月  24 2018 backup_2018-03-24-6.tar.gz

-rw-r--r-- 1 rsync rsync 761 4月  22 2018 backup_2018-04-22.tar.gz

-rw-r--r-- 1 rsync rsync  79 3月  18 17:14 flag_2018-03-18.log

-rw-r--r-- 1 rsync rsync  81 3月  24 2018 flag_2018-03-24-6.log

-rw-r--r-- 1 rsync rsync  79 4月  22 2018 flag_2018-04-22.log

[root@nfs01 scripts]# cat bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 0 ]

then

 Time=$(date +%F-%w -d "-1day")

else

 Time=$(date +%F -d "-1day")

fi

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\

find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs

rm -f

[root@backup backup]# ll

总用量 20

drwxr-xr-x 2 rsync rsync 4096 3月  24 2018 172.16.1.31

-rw-r--r-- 1 rsync rsync  761 3月  24 2018 backup_2018-03-24-6.tar.gz

-rw-r--r-- 1 rsync rsync  761 4月  22 2018 backup_2018-04-22.tar.gz

-rw-r--r-- 1 rsync rsync   70 3月  24 2018 flag_2018-03-24-6.log

-rw-r--r-- 1 rsync rsync   68 4月  22 2018 flag_2018-04-22.log

[root@backup backup]# rm -rf *

[root@backup backup]# ll

总用量 0

[root@nfs01 scripts]# sh bak.sh

/backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/flag_2018-03-23.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/172.16.1.31/backup_2018-03-23.tar.gz /backup/backup_2018-03-24-6.tar.gz /backup/flag_2018-03-24-6.log /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz

[root@backup backup]# ll

总用量 20

drwxr-xr-x 2 rsync rsync 4096 3月  24 2018 172.16.1.31

-rw-r--r-- 1 rsync rsync  761 3月  24 2018 backup_2018-03-24-6.tar.gz

-rw-r--r-- 1 rsync rsync  761 4月  22 2018 backup_2018-04-22.tar.gz

-rw-r--r-- 1 rsync rsync   70 3月  24 2018 flag_2018-03-24-6.log

-rw-r--r-- 1 rsync rsync   68 4月  22 2018 flag_2018-04-22.log

[root@backup backup]# cd 172.16.1.31/

[root@backup 172.16.1.31]# ll

总用量 32

-rw-r--r-- 1 rsync rsync 761 3月  18 17:14 backup_2018-03-18.tar.gz

-rw-r--r-- 1 rsync rsync 761 3月  24 2018 backup_2018-03-23.tar.gz

-rw-r--r-- 1 rsync rsync 761 3月  24 2018 backup_2018-03-24-6.tar.gz

-rw-r--r-- 1 rsync rsync 761 4月  22 2018 backup_2018-04-22.tar.gz

-rw-r--r-- 1 rsync rsync  79 3月  18 17:14 flag_2018-03-18.log

-rw-r--r-- 1 rsync rsync  79 3月  24 2018 flag_2018-03-23.log

-rw-r--r-- 1 rsync rsync  81 3月  24 2018 flag_2018-03-24-6.log

-rw-r--r-- 1 rsync rsync  79 4月  22 2018 flag_2018-04-22.log

[root@nfs01 scripts]# vim bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 0 ]

then

 Time="week_$(date +%F_%w -d "-1day")"

else

 Time=$(date +%F -d "-1day")

fi

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys

config/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa

ssword &&\

find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs rm -f

"b[root@nfs01 scripts]# date

2016年 05月 01日 星期日 00:04:43 CST

ak.sh" 17L, 568C 已写入             

[root@nfs01 scripts]# sh bak.sh

/backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/flag_2018-03-23.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/172.16.1.31/backup_2018-03-23.tar.gz /backup/backup_2018-03-24-6.tar.gz /backup/flag_2018-03-24-6.log /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz

[root@nfs01 scripts]# cd /backup/172.16.1.31/

[root@nfs01 scripts]# ls /backup/

172.16.1.31                      flag_2018-03-24-6.log

backup_2018-03-24-6.tar.gz       flag_2018-04-22.log

backup_2018-04-22.tar.gz         flag_week_2016-04-30_6.log

backup_week_2016-04-30_6.tar.gz

[root@backup scripts]# vim del_data.sh

find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f    删除180天以前的备份文件

[root@backup backup]# find /backup/ -type f -mtime -7 ! -name "*week*_6*"

/backup/172.16.1.31/backup_2018-03-24-6.tar.gz

/backup/172.16.1.31/flag_2018-03-24-6.log

/backup/172.16.1.31/flag_2018-03-18.log

/backup/172.16.1.31/flag_2018-04-22.log

/backup/172.16.1.31/flag_2018-03-23.log

/backup/172.16.1.31/backup_2018-04-22.tar.gz

/backup/172.16.1.31/backup_2018-03-18.tar.gz

/backup/172.16.1.31/backup_2018-03-23.tar.gz

/backup/backup_2018-03-24-6.tar.gz

/backup/flag_2018-03-24-6.log

/backup/flag_2018-04-22.log

/backup/backup_2018-04-22.tar.gz

[root@backup 172.16.1.31]# md5sum -c /backup/172.16.1.31/flag_week_2016-04-30_6.log

/backup/172.16.1.31/backup_week_2016-04-30_6.tar.gz: 确定

在上面的脚本段中可能看的有点头大,下面我给出最终的脚本

最终的脚本

[root@nfs01 ~]# cat /server/scripts/bak.sh

IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 0 ]

then

 Time="week_$(date +%F_%w -d "-1day")"

else

 Time=$(date +%F -d "-1day")

fi

mkdir $Path/$IP/ -p

 

cd / &&\

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\

rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\

find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs

rm -f

 

[root@backup scripts]# mv del_data.sh check_and_del.sh

 

[root@backup scripts]# cat check_and_del.sh

IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 0 ]

then

 Time="week_$(date +%F_%w -d "-1day")"

else

 Time=$(date +%F -d "-1day")

fi

LANG=en

find /backup/ -type f -name "*${Time}*.log"|xargs md5sum -c  >>$Path/${Time}_result.log 2>&1 &&\

mail -s "$Time bak result" [email protected] <$Path/${Time}_result.log

find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f

Or

 

IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

if [ $(date +%w) -eq 0 ]

then

 Time="week_$(date +%F_%w -d "-1day")"

else

 Time=$(date +%F -d "-1day")

fi

LANG=en

find /backup/ -type f -name "*${Time}*.log"|xargs md5sum -c  >>$Path/${Time}_res

ult.log 2>&1 

mail -s "$Time bak result" [email protected] <$Path/${Time}_result.log

find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f

 

定时任务:

[root@nfs01 scripts]# crontab -l

*/5  *  *  *  *  /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1

#bak all server bata

00 00 * * * /bin/sh  /server/scripts/bak.sh >/dev/null 2>&1

 

[root@backup scripts]# crontab -l

*/5  *  *  *  *  /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1

##check and del data by oldboy 20180319

00 04 * * * /bin/sh /server/scripts/check_and_del.sh >/dev/null 2>&1

 

里程碑3

做检查:

检查验证文件在传输过程中是否存在错误---指纹验证

发邮件:配置mail使用外部SMTP发邮件

通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail/postfix等内部邮件服务而用外部的smtp服务器发送邮件的目的:

修改/etc/mail.rc最后一行加入

set [email protected] smtp=smtp.163.com smtp-auth-user=xiaxia_5321

Smtp-auth-password=shani123  smtp-auth=login

说明:

from是发送的邮件地址

smtp是发生的外部smtp服务器的地址

smtp-auth-user是外部smtp服务器认证的用户名

smtp-auth-password是外部smtp服务器认证的密码

Smtp-auth是外部smtp服务器认证的方式

set from=******@163.com smtp=stmp.163.com smtp-auth-user=******

smtp-auth-password=lk123123 smtp-auth=login

这里我是用临时注册网易邮箱来做的实验,用qq邮箱也可以,但有可能会被当作垃圾邮件处理,而且用的次数多了,可能邮箱会被封哦!

网易邮箱做此实验的前提是,需要设置客户端授权码为开启状态:

设置--POP3/SMTP/IMAP--客户端授权码--设置客户端授权码--开启--自己设置授权码(也就是smtp-auth-password的密码

模拟数据

[root@backup backup]# date

2018年 03月 19日 星期一 18:18:59 CST

[root@backup backup]# date -s 20160426

2016年 04月 26日 星期二 00:00:00 CST

[root@nfs01 backup]# seq 25 30 |awk '{print "date -s 201604"$0}'

date -s 20160425

date -s 20160426

date -s 20160427

date -s 20160428

date -s 20160429

date -s 20160430

[root@nfs01 backup]# seq 25 30 |awk '{print "date -s 201604"$0"&&/bin/sh /server/scripts/bak.sh"}'|bash

2016年 04月 25日 星期一 00:00:00 CST

/backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log

2016年 04月 26日 星期二 00:00:00 CST

/backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/backup_2016-04-25.tar.gz

2016年 04月 27日 星期三 00:00:00 CST

/backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz

2016年 04月 28日 星期四 00:00:00 CST

/backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz

2016年 04月 29日 星期五 00:00:00 CST

/backup/172.16.1.31/backup_2016-04-28.tar.gz /backup/172.16.1.31/flag_2016-04-28.log /backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz

2016年 04月 30日 星期六 00:00:00 CST

/backup/172.16.1.31/backup_2016-04-28.tar.gz /backup/172.16.1.31/flag_2016-04-28.log /backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-29.log /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/backup_2016-04-29.tar.gz /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz

[root@nfs01 backup]# ll

总用量 4

drwxr-xr-x 2 root root 4096 4月  30 00:00 172.16.1.31

[root@nfs01 backup]# ls 172.16.1.31/

backup_2016-04-24.tar.gz  backup_2016-04-28.tar.gz  flag_2016-04-26.log

backup_2016-04-25.tar.gz  backup_2016-04-29.tar.gz  flag_2016-04-27.log

backup_2016-04-26.tar.gz  flag_2016-04-24.log       flag_2016-04-28.log

backup_2016-04-27.tar.gz  flag_2016-04-25.log       flag_2016-04-29.log

[root@backup backup]# sh /server/scripts/check_and_del.sh

[root@backup backup]# mailq

Mail queue is empty

成功!

总结

全网备份是一个运维人员必备的技术,本实验是在老男孩老师的帮助下完成的,这个实验不仅仅是对前一个阶段知识的总结,更是为后一个阶段的运维学习做基石,本次实验用了我一天的时间,中间出现了一些错误,因为是我个人的错误在这里我不之处了,上面的实验步骤很是详细,希望对喜欢学习运维的朋友们有一定的帮助。学习是一步一个脚印的,每一步都是未知,坚持才能有收获,希望朋友们不要轻言放弃;每一步都有收获,希望朋友们能做出自己的实验总结,将实验转化为自己的。另本实验是在虚拟机能上网的前提下进行!!!

猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/79586197