阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

NFS部署实战及原理介绍

162次阅读
没有评论

共计 3854 个字符,预计需要花费 10 分钟才能阅读完成。

NFS 简介

NFS(Network File System)的缩写,它的主要功能是:通过网络、让不同的机器、不同的 OS 可以共享彼此的文件

NFS 服务器可以允许 NFS 客户端将远端 NFS 服务器的共享目录挂载到自己的 NFS 客户端,这样客户端就好比有在本地有一块磁盘一样,只不过是网络磁盘而已。

挂载结构图

NFS 部署实战及原理介绍

如上图,当我们在 NFS 服务器设置好一个共享目录 /data/share 后,其他的有权限访问 NFS 服务器的 NFS 客户端就可以讲这个目录挂载到自己的本地,并且能看到服务端 /data/share 下的所有数据

NFS 是通过网络来进行 Server 端和 Client 端之间的数据传输,既然走网络,双方肯定都要有端口, 哪 NFS Server 怎么知道使用哪个端口来进行数据传输,NFS 其实会随机选择端口来进行数据传输。那 NFS 客户端又是如何知道 NFS 服务端到底是使用哪个端口呢?其实 NFS 服务器是通过远程过程调用 RPC(Remote Procedure Call)协议来实现的,所以,RPC 管理服务端的 NFS 端口分配,客户端要传数据,那么客户端的 RPC 会先跟服务端的 RPC 去要服务器的端口,要到端口后,再建立连接,然后传输数据,见下图

NFS 客户端 /NFS 服务端、RPC 关系图

NFS 部署实战及原理介绍NFS 部署实战及原理介绍

通信过程:

1. 首先服务器端启动 RPC 服务,并开启 111 端口

2. 服务器端启动 NFS 服务,并向 RPC 注册端口信息

3. 客户端启动 RPC 服务,向服务端的 RPC 服务请求服务端的 NFS 端口

4. 服务端的 RPC 服务反馈 NFS 端口信息给客户端。

5. 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输。

机器清单

主机名

IP 地址

操作系统版本

备注

node100

172.20.20.100

CentOS 7.6 x64

NFS 服务端

node200

172.20.20.200

 

NFS 客户端

实验环境

CentOS:CentOS Linux release 7.6.1810 (Core)

2 台都操作

配置主机名:

# cat >> /etc/hosts << EOF

172.20.20.100 node100

172.20.20.200 node200

EOF

 

 

NFS 服务端操作

# rpm -qa nfs-utils rpcbind

# yum install nfs-utils rpcbind

建立目录

# mkdir  -p /data/share

# chmod 666 /data/share/

# cat >> /etc/exports << EOF

/data/share 172.20.20.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

EOF

# mkdir -p /data/share/soft/

启动 RPC 服务

# systemctl start rpcbind.service

[root@node100 ~]# ps -ef|grep rpcbind

rpc       15712      1  0 03:41 ?        00:00:00 /sbin/rpcbind -w

root      15714   8035  0 03:41 pts/0    00:00:00 grep –color=auto rpcbind

[root@node100 ~]# rpcinfo  -p localhost

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 服务

# service nfs start

[root@node100 ~]# rpcinfo  -p localhost

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

100024    1   udp  40044  status

100024    1   tcp  34946  status

100005    1   udp  20048  mountd

100005    1   tcp  20048  mountd

100005    2   udp  20048  mountd

100005    2   tcp  20048  mountd

100005    3   udp  20048  mountd

100005    3   tcp  20048  mountd

100003    3   tcp   2049  nfs

100003    4   tcp   2049  nfs

100227    3   tcp   2049  nfs_acl

100003    3   udp   2049  nfs

100003    4   udp   2049  nfs

100227    3   udp   2049  nfs_acl

100021    1   udp  37957  nlockmgr

100021    3   udp  37957  nlockmgr

100021    4   udp  37957  nlockmgr

100021    1   tcp  43494  nlockmgr

100021    3   tcp  43494  nlockmgr

100021    4   tcp  43494  nlockmgr

是否加载配置 /etc/exports

[root@node100 ~]# showmount  -e localhost

Export list for localhost:

/data/share 172.20.20.0/24

在 NFS 客户端安装

# yum install nfs-utils

[root@node200 ~]# showmount  -e 172.20.20.100

Export list for 172.20.20.100:

/data/share 172.20.20.0/24

在 NFS 客户端进行测试

# mkdir /root/soft/

# mount 172.20.20.100:/data/share/soft /root/soft

[root@node200 soft]# df -Th

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs        36G  1.1G   35G   4% /

devtmpfs                       devtmpfs  224M     0  224M   0% /dev

tmpfs                          tmpfs     235M     0  235M   0% /dev/shm

tmpfs                          tmpfs     235M  5.6M  229M   3% /run

tmpfs                          tmpfs     235M     0  235M   0% /sys/fs/cgroup

/dev/sda1                      xfs       897M  127M  771M  15% /boot

tmpfs                          tmpfs      47M     0   47M   0% /run/user/0

172.20.20.100:/data/share/soft nfs4       36G  1.1G   35G   4% /root/soft

遇到的问题

[root@node200 ~]# showmount  -e  172.20.20.100

clnt_create: RPC: Port mapper failure – Unable to receive: errno 113 (No route to host)

因为 iptables 没有添加规则所致,解决方法:

一是关闭防火墙,这样不×××全。另一个可以向 iptables 中添加 nfs 的所有端口

这里使用第一种方法:

systemctl stop firewalld.service

service iptables stop

相关参数说明:

参数

说明

ro

只读访问

rw

读写访问

sync

所有数据在请求时写入共享

async

nfs 在写入数据前可以响应请求

secure

nfs 通过 1024 以下的安全 TCP/IP 端口发送

insecure

nfs 通过 1024 以上的端口发送

wdelay

如果多个用户要写入 nfs 目录,则归组写入(默认)

no_wdelay

如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置

hide

在 nfs 共享目录中不共享其子目录

no_hide

共享 nfs 目录的子目录

subtree_check

如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)

no_subtree_check

不检查父目录权限

all_squash

共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录

no_all_squash

保留共享文件的 UID 和 GID(默认)

root_squash

root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)

no_root_squash

root 用户具有根目录的完全管理访问权限

anonuid=xxx

指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID

anongid=xxx

指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3854字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中