一、全网备份

1.1 项目环境准备

主机名外网IP内网IP服务器
backup10.0.0.203172.16.1.203rsync服务器
nfs-110.0.0.204172.16.1.204nfs服务器
web-110.0.0.205172.16.1.205web服务器

1.2 项目需求

公司中的web集群和nfs服务器都需要进行备份,防止宕机和磁盘损坏,如果一旦服务器和磁盘损坏,后果不堪设想,

  1. 规范统一,所有服务器的备份目录必须都为/backup
  2. 需要备份的系统配置文件
    a. 定时任务服务的配置文件(/var/spool/cron/root)
    b. 开机自启动配置文件(/etc/rc.local)
    c. 日常脚本目录(/server/scripts)
    d. 防火墙iptables配置文件(/etc/sysconfig/iptables-config)
    e. web的站点目录和日志目录(/var/www/html/ /app/log/)
  3. web服务器保留打包后7天后的备份数据
  4. 备份服务器上,保留每周日的所有数据副本,其他要保留180天的数据
  5. 备份的数据服务器按IP地址为目录保存,备份的文件使用时间名字保存
  6. 确保备份的数据完整性,在备份服务器上对备份的数据每天检查,并将备份成功及失败的结果发到邮箱

1.3 项目步骤

1.3.1 创建项目所需的目录

mkdir -p /backup        //所有服务器
mkdir /server/scripts   //nfs服务和web服务器

1.3.2 客户端需要压缩的数据信息

压缩nfs和web服务

//nfs服务器

$ tar -zcvPhf /backup/data_backup.tar.gz_$(date +%F-week%w) /var/spool/cron/root /etc/rc.local /server/scripts

//web服务器

$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html 
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /app/log/
$ tar -zcvPhf /backup/file_backup.tar.gz_$(date +%F-week%w) /etc/sysconfig/iptables-config /server/scripts

PS:建议web的站点目录和log目录分开打包,因为不管是哪个目录数据都会很大,打包的时候会很慢,一个一个打包可以提升打包的速率。

//tar查看并解压确定

$ tar tf /backup/data_backup.tar.gz_2020-12-22-weeek2
$ tar tf /backup/web_backup.tar.gz_2020-12-22-weeek2

$ tar xf  /backup/data_backup.tar.gz_2020-12-22-weeek2
$ tar xf /backup/web_backup.tar.gz_2020-12-22-weeek2

1.3.3 web服务器创建7天前的数据并删除

创建7天前数据

//创建日期自己设定

$ date -s "20200430"
$ cd /backup
$ ll
total 144
-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-02
-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-03
.....略.....
-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-09
-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-10

找出七天前的数据,并删除

$ find /backup -type f -mtime +7 |xargs rm -f

rsync的配置文件

cat /etc/rsyncd.conf 
uid = rsync 
gid = rsync
port = 873
fake super = yes
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
ignore errors
read only = false
#list = false
hosts allow = 172.16.1/24
hosts deny = 0.0.0.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by other"
path = /backup

使用rsync传输到备份服务端

$ rsync -avz /backup/ rsync_backup@172.16.1.203::backup --password-file=/etc/rsync_password

1.3.4 备份服务端删除180天的数据,并保留每周日的数据

设置服务器时间为180天后,在服务端找出180天前的数据并删除,并保留每周日的数据

$ date -s "202105010"
$ find /backup -type f -mtime +180 ! -name "*week7"|xargs rm -f
$ ll /backup/
-rw-r--r-- 1 rsync rsync 12435 Mar  5  2021 web_backup.tar.gz_2021-03-08-week7

1.3.5 备份服务端以IP地址目录保存数据,并验证数据完整性

创建IP地址目录(web和nfs创建),这里创建web来演示

$ mkdir -p /backup/172.16.1.205
$ cd /backup/
$ ll
drwxr-xr-x 2 root root 6 Oct 20 00:07 172.16.1.205

分开打包web服务的文件(nfs服务雷同)

$ cd /backup/172.16.1.205
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html
$ tar -zcvPhf /backup/log_backup.tar.gz_$(date +%F-week%w) /app/log

通过md5sum命令进行校验

//将校验码导入到指纹文件finger.txt(绝对路径)

$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >finger.txt
$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >>finger.txt

//查看校验码文件

$ cat finger.txt
4c570d961fd6c7790e0a2f3f576a8681  /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5
4c570d961fd6c7790e0a2f3f576a8681  /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5

//将压缩包和指纹文件发送到备份服务器

$ rsync -avz /backup/172.16.1.205 rsync_backup@172.16.1.203::backup --password-file=/etc/rsync_password  

注意:172.16.1.205后面不要加斜杠,否则只有文件传输过去,目录没有传输

//进入目录对比指纹文件的校验码(服务端)

$ md5sum -c /backup/172.16.1.205/finger.txt  //绝对路径
/backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK
/backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK

$ md5sum -c finger.txt                      //相对路径
>/backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK
/backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK

1.3.6 实现发送邮件

邮件发送流程
image-20201222145214078

开启163邮件代理
image-20201202194639341

image-20201202194513563

编辑邮箱配置文件,添加配置

$ tail -2 /etc/mail.rc             
set from=163邮箱账户 smtp=smtp.163.com
set smtp-auth-user=163邮箱账户 smtp-auth-password=上述截图的授权码 smtp-auth=login

发送邮件

$ echo "邮件发送测试" |mail -s "mail check" qq邮箱账户
$ mail -s  "邮箱测试" qq邮箱账户 < 文件

测试

$ find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt
$ echo "邮件发送测试" |mail -s "邮箱测试" qq邮箱账户 </tmp/check.txt 

PS:使用find命令找到指纹文件,通过xargs将给md5sum处理,'&'代表也将错误信息一起写入到文件

收到的邮件

image-20201222151804078

image-20201222151827551

1.4 编写全网备份脚本

1.4.1 客户端脚本(nfs服务器备份脚本)

[root@nfs /server/scripts]# cat bak.sh 
#!/bin/bash
                                   //设置目录和IP地址的变量
Bak_dir="/backup"             
Ip_info=$(hostname -i)

# create dir                          //创建相应的目录
mkdir -p $Bak_dir/$Ip_info
 
# tar system file                     //打包系统的文件
tar -cPhf /$Bak_dir/$Ip_info/data_backup.tar.gz_$(date +F%-weeek%w) /var/spool/cron/root /etc/rc.local /server/scripts 

# del 7 ago data info                //删除7天的数据
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null

# create finger file                 //创建指纹文件
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt

# rsync backup push data info       //rsync推送数据到服务端
rsync -az /$Bak_dir/$Ip_info rsync_backup@172.16.1.203::backup --password-file=/etc/rsync.password

1.4.2 客户端脚本(web服务器备份脚本)

[root@nginx scritps]# cat web_bak.sh
#!/bin/bash

Bak_dir="/backup"
Ip_info=$(hostname -i)

# create dir 
mkdir -p $Bak_dir/$Ip_info

# tar system file
cd /
#!/bin/bash

Bak_dir="/backup"
Ip_info=$(hostname -i)

# create dir 
mkdir -p $Bak_dir/$Ip_info

# tar system file
tar -cPhf /$Bak_dir/$Ip_info/web_backup.tar.gz_$(date +%F-week%w) /usr/share/nginx/html
tar -cPhf /$Bak_dir/$Ip_info/log_backup.tar.gz_$(date +%F-week%w) /var/log/nginx

# del 7 ago data info
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null

# create finger file
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt

# rsync backup push data info
rsync -az /$Bak_dir/$Ip_info rsync_backup@172.16.1.203::backup --password-file=/etc/rsync.password

1.4.3 备份服务器端脚本

[root@rsync /server/scripts]# cat server.sh 
#!/bin/bash
//保留每个星期天的数据,将180天以前的数据删除
# The server hold back each week 7 data info and hold back 6 months data info
find /backup -type f -mtime +180 ! -name "*week7" 2>/dev/null 

# check finger info                      //校验指纹信息
find /backup -type f -name "finger*"|xargs md5sum -c &>/tmp/check.txt

# send mail in for myself qq-mail         //发送邮件到自己邮箱
mail -s "check backup info for $(date +%F)" QQ邮箱账号 </tmp/check.txt

image-20210111213447106

1.5 实现定时全网数据备份(定制任务)

1.5.1 客户端定时任务

//nfs服务器

$ crontab -e
# backup data
0 0 * * * /bin/sh /server/scripts/bak.sh

//web服务器

$ crontab -e
# backup data
0 0 * * * /bin/sh /server/scripts/web_bak.sh

1.5.2 服务端

$ crontab -e
# check backup data
0 5 * * * /bin/sh /server/scripts/server.sh

运维小白
1 声望1 粉丝