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@服務器Node的ip #傳輸秘鑰,免密登錄
五、配置增量備份
首先,我們來看一下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.對特殊情況的檢測處理
小尾巴:
如果你覺得文章寫得不錯,希望看到更多類似的好文章,可以點個贊,我將更加努力寫出更多好文章.
你的小小鼓勵,是我前進的最大動力!