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 [email protected]:/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.对特殊情况的检测处理
小尾巴:
如果你觉得文章写得不错,希望看到更多类似的好文章,可以点个赞,我将更加努力写出更多好文章.
你的小小鼓励,是我前进的最大动力!