35.搭建NFS服务器

本文详细介绍了NFS服务端的配置过程,包括安装NFS和RPC服务,配置NFS共享目录,以及客户端的挂载方法。同时,讨论了NFS的工作原理,如RPC的作用和NFS的端口管理。文章还提到了权限设置、故障排查及NFS的优缺点,以及如何通过autofs实现触发式共享文件和客户端挂载的优化策略。
摘要由CSDN通过智能技术生成

NFS概述-配置NFS服务器

1、NFS服务端概述:

NFS,是Network File System的简写,即网络文件系统。nfs主要是linux系统之间使用,samba是liunx与windows之间共享存储, NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,如图 4-18 所示。
file://c:\users\admini~1\appdata\local\temp\tmpsy2cxr\1.png
图 4-18 NFS网络文件系统拓扑图

2、NFS工作原理

2.2什么是RPC,(Remote Procedure Call)

​ 因为NFS支持的功能相当多,而不同的功能都会使用不同的进程来启动,每启动一个进程就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,CentOS6.x以上版本的随机端口都是较大的

​ 因为端口不固定,这样一来就会造成NFS客户端与NFS服务端的通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介,流程如下图所示

image-20220815200241694

Rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器:

Rpc.mount:主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。

它会读取NFS的配置文件/etc/exports来对比客户端权限

Portmap:主要功能是进行端口映射工作

2.3.NFS实现原理:

1.用户进程访问NFS客户瑞,使用不同的函数对数据进行处理

2.NFS客户端通过TCP/IP的方式传递给NFS服务揣。

3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射。

4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。

5.Rpc.mount进程判断客户端是否有对应的权限进行验证。

6.idmap进程实现用户映射和压缩

7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

注意:rpc是一个远程过程调用,那么使用nfs必须有rpc服务

3、安装NFS:
[root@exrcise1 ~]# yum -y install 	nfs-utils	rpcbind(portmap是centos5的讲法)	#使用Yum安装NFS。



3.1.启动rpc服务
[root@exrcise1 ~]# systemctl start rpcbind		#启动rpcbind 。

[root@exrcise1 ~]# systemctl enable rpcbind

3.2.检查rpc服务状态
[root@exrcise1 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
3.3.启动NFS服务
[root@exrcise1 ~]# systemctl start nfs 	#启动NFS。
[root@exrcise1 ~]# systemctl  enable nfs	#设置NFS开机自动启动。 
[root@exrcise1 ~]# rpcinfo -p
[root@exrcise1 ~]# netstat -antpu | grep 2049		#再次查看端口监听状态
tcp        0      0 0.0.0.0:2049           0.0.0.0:*         LISTEN     -
tcp        0      0 :::2049                :::*              LISTEN     +


3.4.修改配置文件
[root@exrcise1 ~]# cat /etc/exports		#NFS的主配置文件(一开始为空文件)。

[root@exrcise1 ~]# vim /etc/exports
/opt/nfstest  			192.168.245.*(rw)
表示共享的目录			   开放网段,*代表所有网段		(rw)表示访问权限。
#网段地址与权限之间没有空格
[root@exrcise1 ~]# systemctl restart nfs	#修改配置文件后重启服务

3.5.显示服务端可配置项
语法:	showmount -e NFS服务器IP         
[root@exrcise1 ~]# which showmount
/usr/sbin/showmount
[root@exrcise1 ~]# rpm -qf /usr/sbin/showmount
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@exrcise1 ~]# showmount -e 192.168.245.130
Export list for 192.168.245.130:
/opt/nfstest 192.168.245.*


3.6.客户端挂载方法:
mount -t nfs 	nfs服务端IP:/路径/   /本地路径


挂载NFS服务的共享设备:
[root@exrcise2 ~]# mount -t nfs 192.168.245.130:/opt/nfstest/ /opt/
[root@exrcise2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  4.0G  5.2G  44% /
tmpfs                 996M   80K  996M   1% /dev/shm
/dev/sda1             485M   39M  421M   9% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt
192.168.245.130:/opt/nfstest/  9.7G  4.0G  5.3G  43% /opt

3.7.实现开机自动挂载NFS服务共享设备:
[root@exrcise2 ~]# vim /etc/fstab		
192.168.245.130:/opt/nfstest /opt/web1           nfs     defaults        0 0

   

3.8.验证写入权限:
[root@exrcise2 ~]# touch /opt/a.txt		#在NFS共享设备上创建文件。
touch: 无法创建"/opt/a.txt": 权限不够

3.9.解决方法:
设置访问权限一般包含2部分
(1) 服务本身权限
(2) 目录访问权限

nfs默认使用nfsnobody用户,需要安装nfs才有的
[root@master opt]#  grep nfs /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin


10. 修改权限
[root@exrcise1 ~]# chmod 777 -R /opt/nfstest/		#生产上一般不允许这样操作[root@exrcise1 ~]# chown nfsnobody.nfsnobody -R /opt/nfstest/

11. 再次验证写入权限:
[root@exrcise2 ~]# touch /opt/a.txt
[root@exrcise2 ~]# ll !$
ll /opt/a.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 524 2016 /opt/a.txt



实例1:常见报错

[root@exercise2 ~]# mount -t nfs 192.168.245.130:/opt/nfstest /opt
mount: 文件系统类型错误、选项错误、192.168.245.130:/opt/nfstest 上有坏超级块、
缺少代码页或助手程序,或其他错误
(对某些文件系统(如 nfs、cifs) 您可能需要
一款 /sbin/mount.<类型> 助手程序)
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。

原因:主要还是因为没有安装nfs才导致系统无法识别-t nfs

解决方案:yum install -y nfs-utils

4.服务端共享参数
ro只读
rw读写
sync同步读写,资料同步写入到内存与硬盘当中
async异步读写,资料会先暂存于内存当中,再隔段时间写入硬盘,这样可以应对更高的访问量,但有可能会丢失数据
root_squash客户端,root用户访问,映射成如nfsnobody用户的权限。(默认)
no_root_squash客户端,root用户访问,映射成nfs服务器的root用户权限。
all_squash无论什么用户访问,都映射成nfsnobody用户的权限。(常用)
no_all_squash无论什么普通用户访问,都不会映射成nfsnobody用户的权限(默认)
anonuid配置all_squash使用,指定NFS的用户UID,但必须存在系统里
anongid配置all_squash使用,指定NFS的用户GID,但必须存在系统里
4.1.NFS支持动态装载配置文件:

[root@exrcise1 ~]# systemctl reload nfs

相当于

[root@exrcise1 ~]# exportfs -rv #重新读取配置文件不中断服务。

[root@exrcise1 ~]# man exports #查看帮助手册

4.2.查看默认挂载参数

[root@exrcise1 opt]# cat /var/lib/nfs/etab
/opt/nfstest 192.168.245.*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

例1:sync与async的区别

image-20220816162825928

例2:root_squash与no_all_squash

注:所有访问者创建的文件所有者与所属组都是本身,一般配合rw只读

image-20220816164649835

例3:all_squash

注:所有访问者创建的文件所有者与所属组都是nfsnobody,一般配合ro只读

image-20220816175403143

例4:anonuid与anongid

[root@home3 web2]# useradd -u 888 -g 888 ljr
useradd:“888”组不存在
[root@home3 web2]# groupadd -g 888 ljr
[root@home3 web2]# useradd -u 888 -g 888 ljr
[root@home3 web2]# id ljr
uid=888(ljr) gid=888(ljr) 组=888(ljr)

[root@home3 web2]# ll
总用量 0
-rw-r--r-- 1 ljr ljr 0 8月  16 17:34 b1.txt
-rw-rw-r-- 1 ljr ljr 0 8月  16 17:34 b2.txt
-rw-r--r-- 1 ljr ljr 0 8月  16 17:36 b3.txt

4.3.NFS配置权限设置常用参数关系图解:
image-20220815220337235
5.客户端挂载
5.1.查看默认挂载参数

[root@exrcise1 nfstest]# cat /proc/mounts

5.2.强制卸载
[root@exercise2 opt]# umount /opt
umount.nfs4: /opt: device is busy
[root@exercise2 opt]# umount -lf  /opt


5.3.故障案例:

背景:因为一些原因(磁盘故障),整个磁盘(文件系统)变为只读,创建文件,提示Read-only file system

排查:查询具体哪个分区只读,排查出是分区只读

解决:mount -o rw,remount 分区

[root@exercise2 opt]# mount -o ro -t nfs 192.168.245.130:/opt/nfstest /opt
[root@exercise2 opt]# grep /opt /proc/mounts
192.168.245.130:/opt/nfstest /opt nfs4 **ro**,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.245.131,local_lock=none,addr=192.168.245.130 0 0

[root@exercise2 opt]# mount -o rw,remount /opt		#以读写的形式重新挂载
[root@exercise2 opt]# grep /opt /proc/mounts
192.168.245.130:/opt/nfstest /opt nfs4 **rw**,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.245.131,local_lock=none,addr=192.168.245.130 0 0
6、NFS优缺点分析:
6.1、NFS优点:

1、简单容易掌握
2、方便快速部署简单维护容易
3、所有数据都能看得见

6.2、NFS缺点:

1、局限性是存在单点故障,多机器挂载服务器时,如果NFSserver宕机了所有客户端都不能访问共享目录,连接管理维护麻烦。
##### 我们可以通过rsync来进行数据的同步。或者是通过负载均衡的高可用方案。 ######

2、在高并发的场合,NFS 效率性能有限( 一般应用于千万级PV 以下 访问量。)
3、服务器共享文件的客户端认证是基于IP和主机名的 , 安全性一般(但用于内网则问题不大)
4、NFS数据是明文的,对数据完整性不做验证(一般是存放于内网,提供内网的服务器使用。所以安全性相对不是一个问题)

6.3、生产应用场景:

1.中小型网站(2000万pv以下)线上应用,都有用武之地。门户网站也会有其他方面的应用。

2.更加大型的并发访问量站点,需要更加高级的存储架构(nas,GlusterFS,HDFS),甚至专用的硬件存储设施(CDN机房)来配合完成。

3.可以将静态数据尽可以往前端推,减少后端存储压力,还可以将存储里的静态资源通过CDN缓存(jpg\png\mp4\avi\css\js)

7、nfs+autofs实现触发式共享文件

所谓触发挂载,简单来说就是用到的时候,就自动挂载,用不到的时候就不挂载。而且一般在自动挂载后5分钟不使用,将会自动卸载。触发挂载依赖于autofs服务,autofs是一个后台程序,当使用某文件时,自动支持该系统,不使用则不支持。

7.1、安装auto服务
[root@master2 opt]# yum install -y autofs

[root@master2 opt]# vim /etc/autofs.conf #查看主配置文件

#
# Define default options for autofs.
#
[ autofs ]
#
# master_map_name - default map name for the master map.
#
#master_map_name = auto.master
#
# timeout - set the default mount timeout in secons. The internal
#           program default is 10 minutes, but the default installed
#           configuration overrides this and sets the timeout to 5
#           minutes to be consistent with earlier autofs releases.
#
timeout = 3			#此配置表示不使用挂载点后的3s就会卸载,默认是300s
。。。。。。。。

7.2、新建父目录
[root@master2 opt]# mkdir test
7.3、编辑/etc/auto.master

#
# Sample auto.master file
# This is a 'master' automounter map and it has the following format:
# mount-point [map-type[,format]:]map [options]
# For details of the format look at auto.master(5).
#
/misc   /etc/auto.misc
/opt/test /etc/auto.nfs      #/opt/test为触发挂载的父目录,/etc/auto.nfs为要挂载的配置文件

7.4、新建自动触发挂载文件

[root@master2 test]# vim /etc/auto.nfs
autotest   192.168.245.204:/opt/nfstest   # autotest 为触发挂载的子目录

7.5、重启服务
[root@master2 opt]# systemctl restart autofs

7.6、验证是否能自动挂载

[root@master2 opt]# cd test
[root@master2 test]# ll
总用量 0
[root@master2 test]# cd autotest
[root@master2 autotest]# ll
总用量 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 2月  15 14:34 a2.txt
root@master2 autotest]# df -h 
文件系统                      容量  已用  可用 已用% 挂载点
/dev/sda3                      18G  1.1G   17G    6% /
devtmpfs                      479M     0  479M    0% /dev
tmpfs                         489M     0  489M    0% /dev/shm
tmpfs                         489M  6.7M  482M    2% /run
tmpfs                         489M     0  489M    0% /sys/fs/cgroup
/dev/sda1                     197M   97M  100M   50% /boot
tmpfs                          98M     0   98M    0% /run/user/0
/dev/sr0                      4.3G  4.3G     0  100% /mnt
192.168.245.204:/opt/nfstest   18G  4.7G   14G   26% /opt/test/autotest
退出使用目录,等待3秒后
[root@master2 autotest]# cd /opt
[root@master2 opt]# df -h 
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        18G  1.1G   17G    6% /
devtmpfs        479M     0  479M    0% /dev
tmpfs           489M     0  489M    0% /dev/shm
tmpfs           489M  6.7M  482M    2% /run
tmpfs           489M     0  489M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            98M     0   98M    0% /run/user/0
/dev/sr0        4.3G  4.3G     0  100% /mnt
8.NFS客户端挂载优化(mount -o 参数)。
8.1.安全优化
suid,nosuid当挂载的文件系统上有任何SUID的程序时,可以使用nosuid取消SUID的功能
rw,ro可以指定文件系统是只读或可写
exec,noexec是否具有执行文件的权限?一般选择noexec
user,nouser是否允许用户进行文件系统的挂载与卸载功能?如果要保护文件系统,最好不要提供给用户这个功能
auto,noauto这个auto指的是“mount -a ”时会不会被挂载的项目,如果不需要这个分区随时被挂载,设置为noauto
8.2.性能优化
async异步同步,此参数会提高I/O性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合。一般生产环境,不推荐使用)。
noatime取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用
nodiratime取消更新文件系统上的directory inode访问时间,高并发环境,推荐显式应用该选项,提高系统性能。
intr可以中断不成功的挂载。
rsize/wsize读取(rsize)/写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内存,这个值可以设置大一点,比如说65535(bytes),提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。
8.3.NFS内核优化建议

下面是优化选项说明。

/proc/sys/net/core/rmem_default:该文件指定了接收套接字缓冲区大小的默认值(以字节为单位),默认设置:124928。

/proc/sys/net/core/mem_max:该文件指定了接收套接字缓冲区大小的最大值(以字节为单位),默认设置:124928。

/proc/sys/net/core/wmem_default:该文件指定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:124928。

/proc/sys/net/core/wmem_max:该文件指定了发送套接字缓冲区大小的最大值(以字节为单位),默认设置:124928。

[root@exercise2 opt]# head /proc/sys/net/core/[rw]mem_{default,max}
> /proc/sys/net/core/rmem_default <
212992

> /proc/sys/net/core/wmem_default <
212992

> /proc/sys/net/core/rmem_max <
212992

> /proc/sys/net/core/wmem_max <
212992

上述文件对应的具体内核优化命令如下:

cat >>/etc/sysct1.conf<<EOF

net.core.wmem default =8388608

net.core.rmem default 8388608

net.core.rmem max 16777216

net.core.wmem max 16777216

EOF

挂载选项用法,如图 4-21 所示:
[root@exrcise2 ~]# mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072,intr 192.168.1.63:/opt/nfstest /opt
file://c:\users\admini~1\appdata\local\temp\tmpsy2cxr\4.png
图 4-21 挂载选项用法

或者写到挂载文件/etc/fstab里:
192.168.1.63:/opt/nfstest /mnt nfs noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0

t.core.wmem default =8388608

net.core.rmem default 8388608

net.core.rmem max 16777216

net.core.wmem max 16777216

EOF

挂载选项用法,如图 4-21 所示:
[root@exrcise2 ~]# mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072,intr 192.168.1.63:/opt/nfstest /opt
[外链图片转存中…(img-6VcBOtcb-1672671059337)]
图 4-21 挂载选项用法

或者写到挂载文件/etc/fstab里:
192.168.1.63:/opt/nfstest /mnt nfs noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值