文章目录
- Nfs应用场景
- NFS实现的原理
- NFS配置文件
- NFS使用选项参数
- NFS存储数据的优缺点
- NFS实验
- 实验要求
- 实验环境
- 实验步骤
- 服务端:
- 安装NFS服务并修改配置文件
- 创建用户并授权
- 启动服务
- 客户端
- 安装nfs工具并启动
- 本地挂载点目录文件
- 创建对应用户
- 查看远端的NFS共享目录是否存在
- 挂载对应的数据目录
- 测试权限
- 设置开机自动挂载
- 怎么进行协助NFS?
- NFS扩展
主要功能就是在局域网内让不同的主机系统可以访问相同的数据资源
实现多台服务器之间数据共享
实现多台服务器之间数据一致性
Nfs应用场景
在集群中会经常进行使用,如下图所示,有了共享的服务器,用户上传的数据都会放到共享存储上,这样不管是负载的请求在那台上都可以访问到
NFS实现的原理
nfsd:基于NFS的守护进程,主要的功能是进行管理客户端是否可以登入服务器
mount:管理nfs文件系统,当客户端登入服务器之后 使用服务器提供的文件之前还需要验证权限
portmap:进行端口映射
1.****用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS****服务端。
3.NFS服务端接收到请求后,会先调用portmap****进程进行端口映射。
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS****服务端。
5.Rpc.mount****进程判断客户端是否有对应的权限进行验证。
6.idmap****进程实现用户映射和压缩
7.最后NFS****服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。
rpc是一个远程过程调用,那么使用nfs必须有rpc服务
NFS配置文件
配置文件为 /etc/exports 默认里面没有任何内容,按照共享目录的路径 允许访问的NFS客户端(共享权限参数) 格式,定义要共享的目录与相应的权限
NFS使用选项参数
参数 参数作用
rw 读写权限
ro 只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid 配置all_squash使用,指定NFS的用户UID,必须存在系统
NFS存储数据的优缺点
优点:NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
NFS文件系统内数据是在文件系统之上的,所有数据都是能看得见。
缺点:存在单点故障, 如果构建高可用维护麻烦
NFS数据明文, 并不对数据做任何校验
客户端挂载无需账户密码, 安全性一般(内网使用)
生产环境建议:
将静态数据尽可能往前端推, 减少后端存储压力
静态资源必须通过CDN缓存(jpg\png\mp4\avi\css\js)
没有缓存或架构本身历史遗留问题太大, 在多存储也无用
NFS实验
实验要求
NFS服务端(A)
NFS客户端(B)
NFS客户端(C)
1.在NFS服务端(A)上共享/data/w(可写)及/data/r(只读)
2.在NFS客户端(B/C)上进行挂载
实验环境
| 服务器系统 | 角色 | ip |
|---|---|---|
| Centos 7.7 | NFS服务端 | 10.0.0.31 |
| Centos 7.7 | NFS客户端1 | 10.0.0.41 |
| Centos 7.7 | NFS客户端2 | 10.0.0.7 |
实验步骤
服务端:
安装NFS服务并修改配置文件
[root@nfs ~]# yum install -y nfs-utilsLoaded plugins: fastestmirror, langpacks Determining fastest mirrors base|3.6kB 00:00:00 epel|4.3kB 00:00:00 extras|2.9kB 00:00:00 nginx-stable|2.9kB 00:00:00 updates|2.9kB 00:00:00 Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version#修改文件[root@nfs ~]# cat /etc/exports/data/r10.0.0.0/24(ro,sync,all_squash,anonuid=666,anongid=666)/data/w10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)创建用户并授权
[root@nfs ~]# groupadd -g 666 www[root@nfs ~]# useradd -u 666 -g www www[root@nfs ~]# id wwwuid=666(www)gid=666(www)groups=666(www)#创建共享目录并授权[root@nfs ~ data]# mkdir /data/{r,w} -p[root@nfs ~ data]# lsr w[root@nfs ~ data]#[root@nfs ~ data]# chown -R www.www /data/[root@nfs ~ data]# ls -ld /data/drwxr-xr-x4www www24Dec1616:45 /data/启动服务
[root@nfs ~]# systemctl restart nfs[root@nfs ~]# systemctl status nfs● nfs-server.service - NFS server and services Loaded: loaded(/usr/lib/systemd/system/nfs-server.service;disabled;vendor preset: disabled)Active: active(exited)since Tue2025-12-1616:48:23 CST;5s ago Process:3593ExecStartPost=/bin/sh -cifsystemctl -q is-active gssproxy;thensystemctl reload gssproxy;fi(code=exited,status=0/SUCCESS)Process:3573ExecStart=/usr/sbin/rpc.nfsd$RPCNFSDARGS(code=exited,status=0/SUCCESS)Process:3571ExecStartPre=/usr/sbin/exportfs -r(code=exited,status=0/SUCCESS)Main PID:3573(code=exited,status=0/SUCCESS)CGroup: /system.slice/nfs-server.service Dec1616:48:23 nfs systemd[1]: Starting NFS server and services... Dec1616:48:23 nfs systemd[1]: Started NFS server and services.客户端
安装nfs工具并启动
客户端1[root@backup ~]# yum install nfs-utils -yLoaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version Nothing todo[root@backup ~]# systemctl restart rpcbind客户端2[root@web01 ~]# yum install nfs-utils -yLoaded plugins: fastestmirror, langpacks Determining fastest mirrors base|3.6kB 00:00:00 epel|4.3kB 00:00:00 extras|2.9kB 00:00:00 nginx-stable|2.9kB 00:00:00 updates|2.9kB 00:00:00 Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version Nothing todo[root@web01 ~]# systemctl restart rpcbind本地挂载点目录文件
客户端1[root@backup ~]# mkdir /data/{r,w} -p客户端2[root@web01 ~]# mkdir /data/{r,w} -p创建对应用户
客户端1[root@backup ~]# groupadd -g 666 www[root@backup ~]# useradd -u 666 -g www www[root@backup ~]# id wwwuid=666(www)gid=666(www)groups=666(www)客户端2[root@web01 ~]# mkdir /data/{r,w} -p[root@web01 ~]# groupadd -g 666 www[root@web01 ~]# useradd -u 666 -g www www[root@web01 ~]# id wwwuid=666(www)gid=666(www)groups=666(www)查看远端的NFS共享目录是否存在
客户端1[root@backup ~]# showmount -e 10.0.0.31Export listfor10.0.0.31: /data/w10.0.0.0/24 /data/r10.0.0.0/24 客户端2[root@web01 ~]# showmount -e 10.0.0.31Export listfor10.0.0.31: /data/w10.0.0.0/24 /data/r10.0.0.0/24挂载对应的数据目录
客户端1[root@backup ~]# mount -t nfs 10.0.0.31:/data/w /data/w[root@backup ~]# mount -t nfs 10.0.0.31:/data/r /data/r[root@backup ~]# df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 974M0974M0% /dev tmpfs 991M0991M0% /dev/shm tmpfs 991M9.9M 981M1% /run tmpfs 991M0991M0% /sys/fs/cgroup /dev/mapper/centos-root 47G5.4G 42G12% / /dev/sda1 1014M 171M 844M17% /boot tmpfs 199M0199M0% /run/user/010.0.0.31:/data/w 47G5.4G 42G12% /data/w10.0.0.31:/data/r 47G5.4G 42G12% /data/r 客户端2[root@web01 ~]# mount -t nfs 10.0.0.31:/data/w /data/w[root@web01 ~]# mount -t nfs 10.0.0.31:/data/r /data/r[root@web01 ~]# df -ThFilesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 974M0974M0% /dev tmpfs tmpfs 991M0991M0% /dev/shm tmpfs tmpfs 991M9.8M 981M1% /run tmpfs tmpfs 991M0991M0% /sys/fs/cgroup /dev/mapper/centos-root xfs 47G5.4G 42G12% / /dev/sda1 xfs 1014M 171M 844M17% /boot tmpfs tmpfs 199M0199M0% /run/user/010.0.0.31:/data/w nfs4 47G5.4G 42G12% /data/w10.0.0.31:/data/r nfs4 47G5.4G 42G12% /data/r测试权限
测试/data/r读的权限
客户端1[root@backup r]# lstest.txt[root@backup r]# cat test.txthello this is nfs[root@backup r]# touch edutouch: cannottouch‘edu’: Read-onlyfilesystem测试/data/w写的权限
[root@web01 w]# touch test1.txt[root@web01 w]# lstest1.txt[root@web01 w]#设置开机自动挂载
写到fstab里面实现开机自动挂载
客户端1[root@backup r]# echo "10.0.0.31:/data/r /data/r nfs defaults 0 0" >>/etc/fstab[root@backup r]# echo "10.0.0.31:/data/w /data/w nfs defaults 0 0" >>/etc/fstab[root@backup r]# mount -a客户端2[root@web01 w]# echo "10.0.0.31:/data/r /data/r nfs defaults 0 0" >>/etc/fstab[root@web01 w]# echo "10.0.0.31:/data/w /data/w nfs defaults 0 0" >>/etc/fstab[root@web01 w]# mount -a怎么进行协助NFS?
//卸载nfs
#1.正常卸载
[root@backup ~]# umount /data/w/
#2.强制卸载
[root@backup ~]# umount -lf /data/w/
NFS扩展
无需重启NFS服务平滑加载配置文件 服务端[root@nfs w]# echo "/data/p 10.0.0.0/24(ro)" >> /etc/exports[root@nfs w]# cat /etc/exports/data/r10.0.0.0/24(ro,sync,all_squash,anonuid=666,anongid=666)/data/w10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)/data/p10.0.0.0/24(ro)[root@nfs w]# exportfs -rvexporting10.0.0.0/24:/data/p exporting10.0.0.0/24:/data/w exporting10.0.0.0/24:/data/r nfs客户端挂载参数 客户端挂载 mount.nfs4 -o noatime,nodiratime,noexec,nodev,nosuid10.0.0.31:/data/r /data/r/ nfs客户端永久挂载参数10.0.0.31:/data/r /data/r nfs defaults,noatime,nodiratime,noexec,nodev,nosuid00