在服务器 CentOS 上部署 NFS(网络文件系统)

NFS(Network File System)是一种在计算机网络上通过网络协议访问文件系统的分布式文件系统。它允许计算机之间通过网络共享文件和目录,并使得在远程主机上的文件就像本地文件一样访问。

通讯原理

1. 与RPC的关系

NFS(Network File System)具有多种功能,每个功能使用不同的程序和端口进行数据传输。由于端口不固定,客户端需要知道服务器端的相关端口才能建立连接。RPC(Remote Procedure Call)的作用是统一管理NFS端口,其对外的通用端口是111。RPC负责记录NFS功能对应的端口信息,使得客户端知道应该在哪些端口上进行数据传输。

2. 通讯过程

  1. 首先服务器端启动RPC服务,并开启111端口
  2. 服务器端启动NFS服务,并向RPC注册端口信息
  3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
  4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
  5. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

3. 用到的端口

  • NFS Server (Port 2049): 仍然是主要的 NFS 服务端口。
  • RPC Portmapper (Port 111): 同样用于 NFSv4,但它的作用相对较小,因为 NFSv4 不像 NFSv2 和 NFSv3 一样依赖于 Portmapper。
  • RPCBIND (Port 111): 在 NFSv4 中,RPCBIND 所做的工作类似于 Portmapper。它帮助客户端查找远程过程调用(RPC)服务的端口号。
  • Mountd (Port 20048): 用于挂载和卸载文件系统。
  • Nlockmgr (Port 4045): 用于文件锁定。
  • Rquota (Port 875): 提供磁盘配额信息。

服务端部署

在启动 NFS 服务之前,需保证已启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。

1. 安装nfs
# 安装 nfs
yum install nfs-utils rpcbind
# 启动并设置开机自启
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfs                    # centos7
systemctl start nfs-server && systemctl enable nfs-server      # centos8
2. 在配置文件中添加共享目录,语法格式参见下方说明
# 编辑 /etc/exports 文件
vim /etc/exports
# 在文件中添加要共享的目录和权限
/path/to/share client_ip(rw,sync,no_subtree_check)
3. 重新加载配置文件
exportfs -a
# 重启服务
systemctl restart nfs

客户端部署

1. 安装nfs
yum install nfs-utils rpcbind
# 启动并设置开机自启
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfs                    # centos7
systemctl start nfs-server && systemctl enable nfs-server      # centos8
2. 设置开机自动挂载nfs
# 编辑文件
vim /etc/fstab
# 添加挂载目录
server_ip:/path/to/share /local/mount/point nfs defaults 0 0
# 保存文件后执行,使立即生效
mount -a

/etc/exports 语法说明

# cat /etc/exports
/data/public 10.10.0.0/16(rw,sync,no_subtree_check)

1)、授权网段或主机
a. 可以写网段:10.10.0.0/16
b. 可以写主机名:client.lab.com
c. 可以写域:*.lab.com
d. 可以所有,用【*】表示

2)、访问权限配置
ro    -> 表示只读
rw    -> 表示读写

3)、数据写入硬盘模式
async     -> 异步写入,将数据先保存在内存缓冲区中,必要时才写入磁盘
sync      -> 同步写入,将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

4)、客户端使用的端口
insecure     -> 允许客户端从大于1024的tcp/ip端口连接服务器;
secure      -> 限制客户端只能从小于1024的tcp/ip端口连接服务器;

5)、账户映射
首次安装完:nfs-utils 包后,会自动添加用户:nfsnobody,可以查看文件:/etc/passwd

root_squash(默认)     -> 如客户端登陆操作的是root用户,nfs服务器会将来访的root用户映射为匿名用户或用户组:nfsnobody ,如果是rw权限,就要求nfsnobody 对共享的目录有rw权限;
no_root_squash        -> 来访的root用户保持root帐号权限;
all_squash          -> 无论访问共享目录的用户身份如何,其权限将被镇压为匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份
no_all_squash(默认)   -> 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组: nfsnobody;

anonuid        -> 匿名用户UID设置值,可自行设置,但必须在/etc/passwd中存在;在多台客户端共享一个nfs目录时,可通过此参数使得不同的客户端写入的数据保持相同的用户权限
anongid        -> 匿名用户组

6)、其它参数
wdelay(默认)        -> 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;
no_wdelay           -> 若有写操作则立即执行,应与sync配合使用;
subtree_check(默认)     -> 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
no_subtree_check       -> 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
分享到:
本文链接:https://blog.renzicu.com/2023/11/455.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
THE END
二维码
打赏
文章目录
关闭
目 录