全网备份项目
企业案例
某公司里有一台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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 from=17682311347@163.com 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" 2468558247@qq.com </etc/hostname #测试发送
3.2收到邮件
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" 2468558247@qq.com </tmp/md5.log
删除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" 2468558247@qq.com </backup/md5.log
#del 180 ago
#find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz" -mtime +180 |xargs rm
写入定时任务,每分钟进行测试
[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
)
收到邮件
image.png测试成功后修改为指定的时间
[root@backup ~]# crontab -l|tail -n2
#rm
00 00 * * * sh /server/scripts/rm-etc.sh