day36-rsync全网备份项目

day36-rsync全网备份项目_第1张图片
全网备份项目.png

day36-rsync全网备份项目_第2张图片
image.png

企业案例

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

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

具体要求如下:

1)Web服务器A和备份服务器B的备份目录必须都为/backup。 #扩展要求/backup/ip地址命名目录中
2)Web服务器站点目录假定为(/var/www/html)。
3)Web服务器本地仅保留7天内的备份。
4)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。
5)备份服务器上检查备份结果是否正常(备份内容变?),并将每天的备份结果发给管理员信箱。

这些要求都是运维自己写出来的,实际工作中,老大可能就说一句,把服务器数据备份下。

环境准备

准备两台设备

web01 10.0.0.7
backup 10.0.0.41

rsync服务端(backup)

1、检查用户

[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)

2.共享目录权限

[root@backup ~]# ll -d /backup
drwxr-xr-x 8 rsync rsync 230 May 21 17:36 /back

3.密码文件和权限

[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 20 May 20 19:52 /etc/rsync.password

4.配置文件添加模块

省略若干
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup

5.设置启动和开机自启

[root@backup ~]# systemctl start rsyncd  #开启服务
[root@backup ~]# systemctl enable  rsyncd  #设置开机自启动
[root@backup ~]# systemctl is-active  rsyncd  #检查是否在运行
active
[root@backup ~]# systemctl is-enable  rsyncd  #检查是否开机自启动
enable

6。本地测试服务是否可以正常使用

[root@backup ~]# touch /oldboy/oldboy{01..3}.txt
[root@backup ~]# rsync -avz /oldboy 172.16.1.41:/tmp
[root@backup ~]# tree /tmp
/tmp
└── oldboy
    ├── oldboy01.txt
    ├── oldboy02.txt
    ├── oldboy03.txt
    ├── oldboy04.txt
    ├── oldboy05.txt
    ├── oldboy06.txt
    ├── oldboy07.txt
    ├── oldboy08.txt
    ├── oldboy09.txt
    └── oldboy10.txt

本地测试正常

rsync客户端(web01)

1.密码文件和权限

[root@web01 ~]# echo 123456 >/etc/rsync.password
[root@web01 ~]# cat /etc/rsync.password
123456
[root@web01 ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 7 May 21 20:22 /etc/rsync.password
[root@web01 ~]# chmod 600 /etc/rsync.password
[root@web01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 May 21 20:22 /etc/rsync.password

2.测试是否可以向服务端推送数据

客服端推送:
[root@web01 ~]# rsync -avz /etc/hostname [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
hostname

sent 101 bytes  received 43 bytes  288.00 bytes/sec
total size is 6  speedup is 0.04
服务端检查
[root@backup ~]# ll /backup
-rw-r--r-- 1 rsync rsync  6 May 20 21:42 hostname

到这里如果可以传数据,就说明服务是正常的

rsync客户端(web01)测试命令

1.创建以IP命名的目录

[root@web01 ~]# hostname -I|awk '{print $NF}'
172.16.1.41
[root@web01 ~]# IP=`hostname -I|awk '{print $NF}'`
[root@web01 ~]# mkdir -p /backup/$IP
[root@web01 ~]# tree /backup
/backup
└── 172.16.1.41

1 directory, 0 files

2.打包备份 /etc/ 和 /var/www/html 到/backup

[root@web01 ~]# tar zcf /backup/172.16.1.7/html.`date +%F-%w`.tar.gz /etc/ /var/www/html/
tar: Removing leading `/' from member names
[root@web01 ~]# tree /backup
/backup
└── 172.16.1.7
    ├── html.2019-05-21-2.tar.gz

3.制作md5sum指纹验证

[root@web01 ~]# find /backup/ -type f -name '*.tar.gz'|xargs md5sum
8388cdbf97ca4e5dedf6a0701720b93c  /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
017f79c1bf3b1d131eb1c8991b082cfd  /backup/172.16.1.7/html.2019-05-21-2.tar.gz
[root@web01 ~]# find /backup/ -type f -name '*.tar.gz'|xargs md5sum >/backup/172.16.1.7/web01.md5
[root@web01 ~]# tree /backup/
/backup/
└── 172.16.1.7
    ├── html.2019-05-21-2.tar.gz
    └── web01.md5

4.推送数据到服务端backup

客户端发送
[root@web01 ~]# rsync -avz /backup/  [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
172.16.1.7/
172.16.1.7/conf-2019-05-21-2.tar.gz
172.16.1.7/html.2019-05-21-2.tar.gz
172.16.1.7/web01.md5

sent 20,036,007 bytes  received 92 bytes  13,357,399.33 bytes/sec
total size is 20,435,914  speedup is 1.02
You have new mail in /var/spool/mail/root
服务端检查
[root@backup ~]# tree /backup
/backup
└── 172.16.1.7
    ├── html.2019-05-21-2.tar.gz
    └── web01.md5

5.删除7 天之前的备份

[root@backup ~]# find /backup/ -name '*.tar.gz' -mtime +7|xargs rm

我先在没有7天之前的所以不会有结果

rsync客户端(web01)书写为脚本

[root@web01 /server/scripts]# vim bak-etc.sh
#!/bin/bash

#IP 
IP=`hostname -I|awk '{print $NF}'`
#hostnaem
HOSTNAME=`hostname`
#mkdir 
mkdir -p /backup/$IP
#tar
tar zcf /backup/$IP/html.`date +%F-%w`.tar.gz /etc/ /var/www/html/
#md5sum
find /backup/ -type f -name '*.tar.gz'|xargs md5sum >/backup/$IP/$HOSTNAME.md5
#rsync
rsync -avz /backup/  [email protected]::backup --password-file=/etc/rsync.password
#rm mtime +7
#find /backup/ -name '*.tar.gz' -mtime +7|xargs rm

rsync客户端(web01)进行脚本测试

1.将客户端和服务端的/backup目录清空

[root@web01 ~]# rm -rf /backup/*
[root@web01 ~]# tree /backup
/backup

0 directories, 0 files
[root@backup ~]# rm -rf /backup/*
[root@backup ~]# tree /backup
/backup

0 directories, 0 files

2.执行脚本进行测试

web01进行推送
[root@web01 /server/scripts]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
sending incremental file list
172.16.1.7/
172.16.1.7/html.2019-05-21-2.tar.gz
172.16.1.7/web01.md5


sent 10,018,088 bytes  received 73 bytes  20,036,322.00 bytes/sec
total size is 10,217,957  speedup is 1.02
backup进行检查
[root@backup ~]# tree /backup
/backup
└── 172.16.1.7
    ├── html.2019-05-21-2.tar.gz
    └── web01.md5

1 directory, 1 file
[root@backup /server

书写定时任务-先设置为每分钟进行测试

[root@web01 ~]# crontab -l|tail -n2
#back /backup/* --> backup server
* * * * * sh /server/scripts/bak-etc.sh >/dev/null 2>&1
backup客户端检查
[root@backup ~]# rm -rf /backup/*
[root@backup ~]# tree /backup
/backup
└── 172.16.1.7
    └── html.2019-05-21-2.tar.gz
    └── web01.md5

1 directory, 1 file

定时任务改为指定的时间

[root@web01 ~]# crontab -l|tail -n2
#back /backup/* --> backup server
00 00 * * * sh /server/scripts/bak-etc.sh >/dev/null 2>&1

到这里客户端的脚本就写好。如果脚本中有一些经常会被用到目录或文件。可以给他设置为变量,这样的话即使脚本给别的服务器用也基本上是通用的。

rsync服务端(rsync)

1.进行md5sum指纹库验证

[root@backup ~]# md5sum -c /backup/*/*.md5
/backup/172.16.1.7/html.2019-05-21-2.tar.gz: OK

2.邮件提醒

1.注册一个163的邮箱

记得添加配置邮箱的授权码,不然邮箱会被屏蔽掉了

2.保证 postfix 邮件服务运行

[ root@backup ~]# systemctl restart postfix.service 
[ root@backup ~]# systemctl is-active postfix.service 
active
[ root@backup ~]# systemctl is-enabled postfix.service 
enabled

3.配置邮件提醒

[root@backup ~]# vim /etc/mail.rc   #邮件配置文件最后一行添加下面的
set [email protected]  smtp=smtp.163.com smtp-auth-user=17682311347 smtp-
auth-password=oldboy123  smtp-auth=login
"/etc/mail.rc" 70L, 2088C written                             
[root@backup ~]# systemctl restart postfix.service  #重启服务
[root@backup ~]# mail -s "test" [email protected] 

3.2收到邮件

day36-rsync全网备份项目_第3张图片
image.png

3.3 md5sum验证结果邮件发送

[root@backup ~]# md5sum -c  /backup/*/*.md5
/backup/172.16.1.7/html.2019-05-21-2.tar.gz: OK
[root@backup ~]# md5sum -c  /backup/*/*.md5 >/tmp/md5.log
[root@backup ~]# mail -s "test" [email protected] 

删除180以前的保留周6的。

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

编写脚本

check.sh 
#!/bin/bash

#check
md5sum -c  /backup/*/*.md5
# find /backup/  -type  f -name "*.md5"|xargs md5sum -c
#mail
mail -s "holle linux word" [email protected] 

写入定时任务,每分钟进行测试

[root@backup ~]# crontab -l|tail -n2
#rm 
* * * * * sh /server/scripts/rm-etc.sh

检查定时任务日志

[root@backup ~]# tail -f /var/log/cron
May 22 08:36:01 backup CROND[8180]: (root) CMD (sh /server/scripts/rm-etc.sh >/dev/null 2>&1
)

收到邮件

day36-rsync全网备份项目_第4张图片
image.png

测试成功后修改为指定的时间

[root@backup ~]# crontab -l|tail -n2
#rm 
00 00 * * * sh /server/scripts/rm-etc.sh

你可能感兴趣的:(day36-rsync全网备份项目)