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.對特殊情況的檢測處理

 

小尾巴:

如果你覺得文章寫得不錯,希望看到更多類似的好文章,可以點個贊,我將更加努力寫出更多好文章.
你的小小鼓勵,是我前進的最大動力!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM