NFS共享存储与数据备份
NFS共享存储与数据备份
0.需求
注意:统一用户
1.web01和web02可以上传图片
2.nfs用户数据每天凌晨1点做备份
3.校验数据的完整性
4.nfs用户数据实时同步到backup的/data/目录下,做nfs的备机
1.环境
主机名 | WanIP | LanIP | 角色 | 部署应用 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nfs客户端 | httpd,php,nfs |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客户端 | htppd,php,nfs |
nfs | 10.0.0.31 | 172.16.1.31 | nfs服务端,rsync客户端 | nfs,rsync |
backup | 10.0.0.41 | 172.16.1.41 | rsync服务端,nfs备机 | rsync,nfs |
2.先使用nfs客户端搭建网站
1.安装apache和php:
yum install -y apache php
2.下载代码到站点目录中
3.解压代码:
unzip kaoshi_modify.zip
4.让apache和nfs统一使用用户www uid和gid为666:
创建用户及用户组:groupadd www -g 666
useradd www -u 666 -g 666
5.修改apache的配置文件,将用户和用户组改成www:
vim /etc/httpd/conf/httpd.conf
6.将站点目录的属主和属组改成www:
chown www:www /var/www/html
7.启动apache服务:
systemctl start httpd
8.检查进程:
ps -ef|grep httpd
9.端口检查:
ntestat -lntup|grep httpd
10.打开浏览器访问
11.上传文件
12.查看站点目录下是否有user_data目录,查看该目录下是否有上传的文件,并查看它们的属主与属组是否是www用户
3.部署共享存储
1.先安装nfs服务:
centos5,centos6:yum install -y nfs rpcbind
centos7:yum install -y nfs-utils
2.配置NFS服务:vim /etc/exports
# 共享目录 允许访问NFS服务端的网段(权限)
/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666,all_squash)
3.创建www用户:
groupadd www -g 666
useradd www -u 666 -g 666
4.创建共享目录并修改共享目录的属主与属组为nfs指定的匿名用户:
mkdir /data
chown www:www /data
5.关闭防火墙和selinux:
systemctl stop firewalld
setenforce 0
6.启动服务并加入开机自启
systemctl start nfs
systemctl enable nfs
7.检查进程:ps -ef|grep nfs
8.检查配置文件是否生效:cat /var/lib/nfs/etab
9.在客户端挂载nfs服务端的目录:
mount -t nfs 172.16.1.31:/data /var/www/html/user_data
10.上传文件查看服务端是否能够获取到文件
11.将第二台客户端挂载到服务端上,查看是否能够共享到文件
4.nfs用户数据实时同步——服务端
1.先安装rsync:yum install -y rsync
2.配置rsync的配置文件:vim /etc/rsyncd.conf,加入下段内容
# 服务的用户
uid = www
# 服务的用户组
gid = www
# 该服务的监听端口
port = 873
# 不以root身份运行,传输数据不使用系统用户
fake super = yes
# 禁锢目录,不允许获取到root权限
use chroot = no
# 最大连接数
max connections = 200
# 超时时间
timeout = 600
# 忽略错误信息
ignore errors
# 设置成可读可写,关闭只读功能
read only = false
# 不允许查看模块信息
list = false
# 匿名用户
auth users = rsync_backup
# 匿名用户的密码文件
secrets file = /etc/rsync.passwd
# 日志文件
log file = /var/log/rsyncd.log #####################################
# 模块名
[backup]
# 模块的描述信息
comment = welcome to oldboyedu backup!
# 备份存放的目录
path = /backup
# 模块名
[user_data]
# 模块的描述信息
comment = sync_data!
# 数据同步文件的存放路径
path = /user_data
3.创建配置文件中的系统用户:
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
4.创建服务端的密码文件:
1.vim /etc/rsync.passwd
rsync_backup:123
2.echo 'rsync_backup:123'>/etc/rsync.passwd
5.修改密码文件的权限为600:
chmod 600 /etc/rsync.passwd
6.创建同步数据目录:
mkdir /user_data
7.修改目录的属主和属组:
chown -R www:www /backup/
8.启动rsync服务并加入开机自启:
systemctl start rsyncd
systemctl enable rsyncd
9.检查服务进程和服务端口:
ps -ef|grep [r]sync
netstat -lnutp|grep 873
4.1.客户端操作
1.安装rsync:yum install -y rsync
2.客户端创建密码文件(客户端的密码文件只需要写密码):
1.vim /etc/rsync.passwd
123
2.echo '123'>/etc/rsync.passwd
3.修改客户端的密码文件的权限:
chmod 600 /etc/rsync.passwd
4.推数据检测服务端是否能够接受到数据:
rsync -avz /tmp rsync_backup@172.16.1.41::backup --password- file=/etc/rsync.passwd
5.也可以使用环境变量免交互输入密码:
export RSYNC_PASSWORD=123
rsync -avz /tmp rsync_backup@172.16.1.41::backup
6.安装inotify:yum install -y inotify-tools
7.编写脚本:
[root@nfs ~]# vim rsyn-inotify.sh
# /bin/bash
dir="/data"
inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
rsync -avz $dir/ rsync_backup@172.16.1.41::user_data --password-file=/etc/rsync.passwd
done &
8.执行脚本
9.上传文件查看备机上有没有同步数据
5.备份数据——服务端
1.先创建bcakup目录:mkdir /backup
2.修改目录的属主和属组:chown —R www:www /backup
5.1客户端
# 编写脚本发送到服务端
[root@nfs ~]# vim backup.sh
# /bin/bash
bak="/client_backup"
host_name=`hostname`
IP=`ifconfig eth1 |awk 'NR==2{print $2}'`
date_time=`date +%F`
export RSYNC_PASSWORD=123
# 1.创建客户端的备份目录
mkdir -p $bak
chown -R www:www $bak
# 2.进入备份目录,压缩备份文件
cd / && tar -zcf \
$bak/${host_name}_${IP}_${date_time}.tar.gz data
# 3.生成校验文件
cd $bak && \
md5sum ${host_name}_${IP}_${date_time}.tar.gz > ${host_name}_${IP}_${date_time}.md5
# 4.推送数据到rsync服务端
rsync -avz $bak/ rsync_backup@172.16.1.41::backup
# 5.保留七天的文件
find $bak -type f ! -mtime -7|xargs rm -f
# 6.做定时任务
[root@nfs ~]# crontab -e
#Usage:date_backup By:jl Date:2022/5/19
00 01 * * * /bin/sh /root/backup.sh &> /dev/null
5.3 服务端
# 查看是否收到文件:
[root@backup ~]# ll /backup/
total 8
-rw-r--r--. 1 www www 68 May 19 17:19 nfs_172.16.1.31_2022-05-19.md5
-rw-r--r--. 1 www www 1052 May 19 17:19 nfs_172.16.1.31_2022-05-19.tar.gz
2.2.配置邮件
2.1:安装发邮件服务:yum install -y mailx
2.2:修改配置文件:vim/etc/mail.rc
set bsdcompat
set from=发送邮件的邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=发送邮件的邮箱
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
4.编写脚本:
bak="/backup"
host_name=`hostname`
date_time=`date +%F`
# 进入到接收文件目录并校验文件的结果发送到管理员的邮箱中
cd ${bak} && \
md5sum -c *${date_time}.md5|mail -s "${date_time}_数据备份校验" 管理员邮箱
服务端只保留180天的备份数据
find $bak -type f ! -mtime -180 |xargs rm -f
5.执行脚本查看邮箱是否能够接受到信息
[root@backup ~]# sh backup.sh
6.收到信息后编写定时任务:
[root@backup ~]# crontab -l
#Usage:date_backup By:jl Date:2022/5/19
01 01 * * * /bin/sh /root/backup.sh &> /dev/null
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异