NFS+Rsync增量备份方案

NFS+Rsync数据备份方案

一、NFS/Rsync简介

二、备份方案架构图

三、自建NFS服务器

四、挂载NFS

五、配置增量备份

六、增量备份恢复

一、NFS/Rsync简介

网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。Rsync是Linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、Rsync主机同步。

本文详细记录如何通过这两个工具实现服务器文件和文件夹的全量/增量备份的方法。

二、备份方案架构图

Jumpserver通过挂载NFS共享目录,对Node服务器内容进行备份,备份存放的内容就在挂载NFS共享目录的本地目录上.

挂载NFS共享文件夹 备份内容为/data/nginx

配置增量备份脚本

配置SSH免密登录Node

三、自建NFS服务器

NFS服务器上执行

yum install nfs-utils rpcbind -y #安装NFS相关软件

mkdir /NFS #创建NFS共享目录

echo "/NFS *(rw,no_root_squash,sync)">> /etc/exports #共享该NFS共享目录。建议加上no_root_squash,否则会导致同步时报错(待确认)

systemctl start rpcbind #开启rpcbind服务

systemctl start nfs #开启nfs服务

showmount -e 127.0.0.1  #验证NFS共享目录是否共享成功如下则说明共享成功

Export list for 127.0.0.1:

/NFS *

四、挂载NFS

在需要挂载NFS的服务器上执行

此处为Jumpserver服务器

yum install nfs-utils rpcbind -y #安装NFS相关软件

mkdir /NFS1 #创建文件夹用来挂载NFS

mount -t nfs NFS服务器ip:/NFS /NFS1 #NFS共享目录/NFS挂载到本地/NFS1

df -Th #查看是否挂载成功

ssh-keygen #创建秘钥

ssh-copy-id root@服务器Nodeip #传输秘钥,免密登录

五、配置增量备份

首先,我们来看一下Node备份目录/data/nginx结构

[root@VM_0_16_centos ~] tree /data/
/data/
`-- nginx
    |-- mail
    |-- note.txt
    |-- web
    |   `-- web.txt
    `-- www
        |-- book
        |   `-- book.txt
        |-- food
        `-- shop
            `-- shop.txt
7 directories, 4 files
[root@VM_0_16_centos ~]#

增量备份目录解释

命名规则:xxx.0为完全备份,xxx.x为最近x次的增量备份,滚动循环覆盖旧备份。

[root@VM_0_2_centos ~]# tree /NFS1/
/NFS1/
`-- backups #备份文件根目录
    `-- 129.204.176.102 #根据主机划分
        `-- daily #每次的备份文件放在这里
            |-- nginx.0 #同步备份文件夹,即完全备份
            |   |-- mail
            |   |-- web
            |   |   `-- web.txt
            |   `-- www
            |       |-- book
            |       |-- food
            |       `-- shop
            |           `-- shop.txt
            |-- nginx.1 #最新的增量备份。里面是完全备份后变化的文件
            |   `-- note.txt
            |-- nginx.2 #较早的增量备份,数字越大,代表备份越旧
            |   `-- www
            |       `-- book
            |           `-- book.txt
            |-- nginx.3
            |   `-- web
            |       `-- web.txt
            `-- nginx.4
18 directories, 5 files

Jumpserver配置增量备份脚本

[root@VM_16_6_centos ~]# cat rsync.sh #脚本内容

#!/bin/bash
BackupSource=$1 #远程目标
BackupRoot=$2 #增量备份路径
BackupName=$3 #备份的名字
BackupNum=$4                   #保留多少个增量备份(用于每周归档文件)
checkDir() { #检查目录 $1 是否存在,不存在则创建
    if [ ! -d "${BackupRoot}/$1" ] ; then
        mkdir -p "${BackupRoot}/$1"
    fi
}
for i in `seq $(($BackupNum - 1)) -1 1`      #处理增量备份目录的滚动覆盖
    do
        if [ -d "${BackupRoot}/daily/$BackupName.$i" ] ; then
            /bin/rm -rf "${BackupRoot}/daily/$BackupName.$((i + 1))"
            mv "${BackupRoot}/daily/$BackupName.$i" "${BackupRoot}/daily/$BackupName.$((i + 1))"
        fi
    done
checkDir "daily" #检查目录是否存在
checkDir "daily/${BackupName}.0/" #检查全量备份(包含所有最新内容的备份目录)
checkDir "daily/${BackupName}.1/" #检查增量备份目录是否存在,不存在则创建
rsync -av --delete -b --backup-dir=${BackupRoot}/daily/${BackupName}.1 $BackupSource ${BackupRoot}/daily/${BackupName}.0

运行该脚本时,需要输入四个参数

同步命令格式./rsync.sh BackupSource BackupRoot  BackupName BackupNum

BackupSource远程目标

BackupRoot本地备份存放路径,命令执行成功后会在该目录下生产对应的备份文件

BackupName备份名称

BackupNum保留的增量备份数量,超过这个数量后,旧备份会被新备份替换

举例:

./rsync.sh root@129.204.176.102:/data/nginx/ /NFS1/backups/129.204.176.102/  nginx 5

六、增量备份恢复

增量备份恢复步骤:

当我们需要恢复增量备份时,需要先从数字最大的备份进行恢复,依次递减,直到我们需要恢复的增量备份点。

进行恢复备份时,将以下脚本放在存放备份文件的服务器上运行

[root@VM_16_6_centos ~]# cat rsyncrecover.sh #脚本内容
#!/bin/bash
OlderDir="$1" #增量备份目录
BackupRoot="$2" #全量备份目录
BackupName="$3" #输入你的备份名
BackupNum="$4" #总的增量备份数量(用于递归)
where="$5" #输入你想要恢复的备份
for i in `seq $BackupNum -1 $where` #从最旧的备份开始,一直恢复到想要的那个备份位置
do
rsync -av  $OlderDir$BackupName.$i/    $BackupRoot$BackupName.0
done

增量备份恢复命令格式:

./rsyncrecover.sh 增量备份路径 完全备份路径 备份名称 最大增量备份数量 恢复点

执行增量备份恢复脚本时,只需要输入相应参数即可

举例

./rsyncrecover.sh /NFS1/backups/129.204.176.102/daily/ /NFS1/backups/129.204.176.102/daily/ nginx 4 2

执行成功后,完全备份路径下的内容就会变成我们想要恢复的内容

 

PS

后续需完善问题

1.备份日志处理

2.备份文件命名规范

3.归档备份配置

4.定时任务

5.对特殊情况的检测处理

 

小尾巴:

如果你觉得文章写得不错,希望看到更多类似的好文章,可以点个赞,我将更加努力写出更多好文章.
你的小小鼓励,是我前进的最大动力!

posted on 2020-03-15 09:48  标配的小号  阅读(1422)  评论(0编辑  收藏  举报

导航