zoukankan      html  css  js  c++  java
  • 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.对特殊情况的检测处理

    小尾巴:

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

  • 相关阅读:
    文件管理后章
    文件管理前章
    文本处理三剑客
    匿名函数以及应用、三元表达式
    认识docker以及常用操作
    字符编码
    赋值与深浅拷贝
    Python基本运算符
    LVM配置
    Linux磁盘管理
  • 原文地址:https://www.cnblogs.com/biaopei/p/12496078.html
Copyright © 2011-2022 走看看