关于运维:rsync全网备份

28次阅读

共计 5782 个字符,预计需要花费 15 分钟才能阅读完成。

一、全网备份

1.1 我的项目环境筹备

主机名 外网 IP 内网 IP 服务器
backup 10.0.0.203 172.16.1.203 rsync 服务器
nfs-1 10.0.0.204 172.16.1.204 nfs 服务器
web-1 10.0.0.205 172.16.1.205 web 服务器

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"  
$ 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.205::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 创立)

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

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

$ 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/10.0.0.203 rsync_backup@10.0.0.205::backup --password-file=/etc/rsync_password  

留神:10.0.0.203 前面不要加斜杠,否则只有文件传输过来,目录没有传输

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

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

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

1.3.6 实现发送邮件

邮件发送流程

开启 163 邮件代理

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

$ 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 解决,'&' 代表也将错误信息一起写入到文件

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@10.0.0.205::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@10.0.0.205::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

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

正文完
 0