1、什么是NFS?

全称:Network File System 网络文件系统
通过网络存储和组织文件的一种方法或机制

2、为什么要用它?

前端所有的应用服务器接受到用户上传的图片、文件、视频,都会统一的放到后端的存储上NFS存储服务器上面。

3、Nfs工作流程

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_centos

图片来自于网络

4、NFS工作原理

启动NFS服务,而且还需要启动很多端口。
NFS功能,需要很多服务。每个服务都有端口,而且经常变化。
如何让客户端找到这些端口呢?就需要一个管理者(rpc服务)
NFS服务:
1)NFS服务(有很多进程和端口),把自己的端口告诉RPC。
2)RPC服务(对外固定端口111)
客户端请求NFS服务,先找RPC 111,查到NFS的端口,发给客户端。

5、安装nfs

Nfs环境部署

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_客户端_02

Nfs 服务端安装启动

1、nfs-utils:nfs服务主程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。

2、rpcbind : CentOS7.6/7下面 RPC主程序。NFS可视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS服务之前必须先启动rpcbind服务才行。

查看是否安装:rpm –qa nfs-utils rpcbind

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_客户端_03


查看没返回,表示没有安装nfs服务

3、安装:

服务端和客户端都要安装:

yum install –y nfs-utils rpcbind

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_客户端_04


查看安装结果

[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.68.el7.x86_64
rpcbind-0.2.0-49.el7.x86_64

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_服务器_05


启动RPC服务

[root@nfs01 /]# systemctl start rpcbind
[root@nfs01 /]# systemctl enable rpcbind
[root@nfs01 /]# systemctl status rpcbind

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_RPC_06


查看有没有注册的端口

[root@nfs01 /]# rpcinfo -p 127.0.0.1
   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

启动NFS

[root@nfs01 /]# systemctl start nfs
[root@nfs01 /]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

在此查看注册端口

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_服务器_07

查看进程

[root@test ~]# ps –ef| egrep "nfs|rpc"

nfs udp能挂载tcp挂载卡 nfs挂载使用哪些端口_nfs udp能挂载tcp挂载卡_08


NFS配置文件,服务器端NFS01

[root@nfs01 ~]# cat /etc/exports
[root@nfs01 ~]# man exports
EXAMPLE
 # sample /etc/exports file
 / 					master(rw) trusty(rw,no_root_squash)
 /projects 		proj*.local.domain(rw)
 /usr 				*.local.domain(ro) @trusted(rw)
 /home/joe 		pc001(rw,all_squash,anonuid=150,anongid=100)
 /pub 				*(ro,insecure,all_squash)
 /srv/www 			-sync,rw server @trusted @external(ro)
 /foo 				2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
 /build 			buildhost[0-9].local.domain(rw)
 待共享目录       访问的主机(权限)

1)待共享的目录 存东西的目录 取东西的目录例如:/data
2)访问的主机
192.168.206.134(web1) 单个主机
192.168.206.0/24 网段
192.168.206.* 网段
master 主机名
3)()权限
rw 可读写 read write
ro 可读 read only
sync 写到磁盘才算完成,安全 慢
async 异步写到缓冲区,快 不安全

6、实践

[root@nfs01 /]# vim /etc/exports
[root@nfs01 /]# cat /etc/exports
/data 192.168.206.0/24(rw,sync)
[root@nfs01 /]#

创建目录

mkdir –p /data

目录授权

[root@nfs01 /]# mkdir /data
[root@nfs01 /]# ls -ld /data/
drwxr-xr-x 2 root root 6 Apr 11 14:25 /data/
[root@nfs01 /]#chown -R nfsnobody.nfsnobody /data
[root@nfs01 /]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 /]# ls -ld /data/
drwxr-xr-x 2 nfsnobody nfsnobody 6 Apr 11 14:25 /data/

NFS默认用户nfsnobody

[root@nfs01 /]# 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

重启NFS

[root@nfs01 ~]# systemctl reload nfs

生产场景必须要实现平滑重启。

[root@nfs01 ~]# exportfs –r

上述二者等价,选一个即可。
检查是否成功

[root@nfs01 /]# showmount -e 192.168.206.133
Export list for 192.168.206.133:
/data 192.168.206.0/24

共享目录出来了
服务端本地挂载:

[root@nfs01 /]# mount -t nfs 192.168.206.133:/data /mnt
[root@nfs01 /]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               476M     0  476M   0% /dev
tmpfs                  487M     0  487M   0% /dev/shm
tmpfs                  487M  7.8M  479M   2% /run
tmpfs                  487M     0  487M   0% /sys/fs/cgroup
/dev/sda3               18G  2.1G   16G  12% /
/dev/sda1             1014M  132M  883M  13% /boot
tmpfs                   98M     0   98M   0% /run/user/0
192.168.206.133:/data   18G  2.1G   16G  12% /mnt

[root@nfs01 /]# touch /mnt/nfs.txt
[root@nfs01 /]# ls /mnt/
nfs.txt

换到web01挂载
1)安装

yum install -y nfs-utils rpcbind 
rpm -qa nfs-utils rpcbind

2)启动

[root@web1 ~]# systemctl start rpcbind
[root@web1 ~]# systemctl enable rpcbind

3)检查

[root@web1 ~]# ps -ef|egrep "nfs|rpc"
rpc        1860      1  0 14:33 ?        00:00:00 /sbin/rpcbind -w
root       1887   1500  0 14:34 pts/0    00:00:00 grep -E --color=auto nfs|rpc

4)查看NFS服务器提供得共享目录

[root@web1 ~]# showmount -e 192.168.206.133
Export list for 192.168.206.133:
/data 192.168.206.0/24

5)挂载测试

[root@web1 ~]# mount -t nfs 192.168.206.133:/data /mnt
[root@web1 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               476M     0  476M   0% /dev
tmpfs                  487M     0  487M   0% /dev/shm
tmpfs                  487M  7.7M  479M   2% /run
tmpfs                  487M     0  487M   0% /sys/fs/cgroup
/dev/sda3               18G  2.1G   16G  12% /
/dev/sda1             1014M  132M  883M  13% /boot
tmpfs                   98M     0   98M   0% /run/user/0
192.168.206.133:/data   18G  2.1G   16G  12% /mnt 
[root@web1 ~]# touch /mnt/nfs1.txt
[root@web1 ~]# ls /mnt/
nfs1.txt  nfs.txt

7、结论

NFS(Network File System,网络文件系统)是分布式计算机系统的一个组成部分,可实现在异构网络上共享和装配远程文件系统。本章介绍了NFS服务器的工作原理,安装配置NFS服务器的方法.