目录
1 NFS介绍
1.1 NFS架构概述
1.2 组成部分
1.3 工作流程
1.4 总结
2 NFS部署
2.1 server(服务端)配置详细方法
2.2 client(客户端)配置详细方法
1 NFS介绍
- NFS,全称Network File System,即网络文件系统,是一种分布式文件系统协议。
- 它允许用户在网络上共享文件,就像访问本地存储一样。
- NFS 主要用于 Unix/Linux 环境,但也可以通过第三方软件在 Windows 上实现支持。
- NFS 的核心优势在于,它能够让多台机器、多个操作系统共享彼此的数据,从而实现数据的集中管理和高效访问。
- 在实际应用中,NFS 广泛应用于各种需要高性能文件访问的场景,如企业级数据存储、云计算环境等。
1.1 NFS架构概述
NFS架构主要由三部分组成:NFS服务器、客户端和传输协议。
这些组件共同工作,实现文件在网络中的共享和访问。
1.2 组成部分
- NFS服务器
- 核心作用:
- NFS架构的核心部分,负责管理远程文件系统并将其共享给网络中的客户端。
- 主要进程:
- nfsd:
- NFS的守护进程,监听在2049/tcp和2049/udp端口上,用于理解客户端发起的RPC请求,并将其转交给本地内核,而后存储在指定的文件系统上。
- mountd:
- 用于验证客户端是否在允许访问此NFS文件系统的客户端列表中,若验证通过则允许访问(发放一个令牌,持令牌去找nfsd)。
- idmapd:
- 实现用户帐号的集中映射,把所有的帐号都映射为NFSNOBODY,但在访问时能以本地用户的身份去访问。
- portmapper:
- NFS服务器的RPC服务,监听于111/TCP和111/UDP套接字上,用于管理远程过程调用(RPC),并告诉客户端NFS服务的端口号。
- nfsd:
- 配置文件:
- NFS的主配置文件是
/etc/exports
,在此文件中可以定义NFS系统的输出目录(即共享目录)、访问权限和允许访问的主机等参数。
- NFS的主配置文件是
- 核心作用:
- 客户端
- 核心作用:
- 访问远程文件系统的设备,可以是计算机、手机或其他智能设备。
- 客户端通过挂载远程文件系统,使得用户可以像访问本地文件一样访问远程文件。
- 主要操作:
- 客户端在访问NFS服务器上的文件时,会通过RPC向服务器发送请求。这些请求包括文件的读写、修改等操作。
- 核心作用:
- 传输协议
- 核心作用:
- NFS使用TCP/IP协议进行通信,并基于RPC(Remote Procedure Call,远程过程调用)协议来传输数据和控制信息。
- RPC协议:
- RPC协议是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。它假定某些传输协议(如TCP或UDP)的存在,为通信程序之间携带信息数据。
- 核心作用:
1.3 工作流程
- 客户端发起请求:
- 客户端需要访问NFS服务器上的文件时,通过RPC协议向服务器发送请求。
- 服务器处理请求:
- NFS服务器收到请求后,由portmapper进程告诉客户端nfsd服务的端口号。
- 客户端通过该端口号向nfsd发送具体的文件访问请求。
- 验证与权限检查:
- mountd进程验证客户端是否有权限访问请求的文件或目录。
- 验证通过后,nfsd进程执行请求的操作(如读写文件)。
- 执行操作并返回结果:
- nfsd进程将操作结果返回给客户端。
- 客户端收到结果后,可以继续进行后续的文件访问操作。
1.4 总结
NFS架构通过NFS服务器、客户端和传输协议(主要是TCP/IP和RPC)的紧密协作,实现了文件在网络中的高效共享和访问。这种架构不仅提高了数据访问的灵活性和便捷性,还通过RPC协议确保了数据传输的可靠性和安全性。在实际应用中,NFS广泛应用于Unix/Linux系统之间的文件共享,特别是在需要高性能文件访问的场景中。
2 NFS部署
2.1 server(服务端)配置详细方法
- 配置源仓库
[root@rehel9 ~]# cat /etc/yum.repos.d/rhel9.repo [rhel9_AppStream]name=AppStreambaseurl=file:///opt/iso/AppStreamgpgcheck=1gpgkey=file:///opt/iso/RPM-GPG-KEY-redhat-release[rhel9_BaseOS]name=BaseOSbaseurl=file:///opt/iso/BaseOSgpgcheck=1gpgkey=file:///opt/iso/RPM-GPG-KEY-redhat-release[root@rehel9 ~]# ls /opt/iso/AppStream BaseOS RPM-GPG-KEY-redhat-beta RPM-GPG-KEY-redhat-release
- 建立源数据库缓存
[root@rehel9 ~]# dnf clean all && dnf makecache正在更新 Subscription Management 软件仓库。12 文件已删除AppStream 239 MB/s | 5.8 MB 00:00 BaseOS 227 MB/s | 1.7 MB 00:00 元数据缓存已建立。
- 查找NFS服务包
[root@rehel9 ~]# dnf search nfs正在更新 Subscription Management 软件仓库。上次元数据过期检查:0:02:34 前,执行于 2024年07月01日 星期一 15时26分58秒。===================================================== 名称 和 概况 匹配:nfs ======================================================libnfsidmap.i686 : NFSv4 User and Group ID Mapping Librarylibnfsidmap.x86_64 : NFSv4 User and Group ID Mapping Librarylibstoragemgmt-nfs-plugin.x86_64 : Files for NFS local filesystem support for libstoragemgmtnfs-utils.x86_64 : NFS utilities and supporting clients and daemons for the kernel NFS servernfs-utils-coreos.x86_64 : Minimal NFS utilities for supporting clientsnfs4-acl-tools.x86_64 : The nfs4 ACL toolspcp-pmda-nfsclient.x86_64 : Performance Co-Pilot (PCP) metrics for NFS Clientssssd-nfs-idmap.x86_64 : SSSD plug-in for NFSv4 rpc.idmapd========================================================= 名称 匹配:nfs ==========================================================texlive-mfnfss.noarch : Packages to typeset oldgerman and pandora fonts in LaTeXtexlive-psnfss.noarch : Font support for common PostScript fonts
- 安装nfs服务
[root@rehel9 ~]# dnf install nfs-utils.x86_64 -y[root@rehel9 ~]# rpm -qa | grep nfslibnfsidmap-2.5.4-10.el9.x86_64nfs-utils-2.5.4-10.el9.x86_64sssd-nfs-idmap-2.6.2-2.el9.x86_64
- 配置共享文件
[root@rehel9 ~]# cat >> /etc/exports << EOF> /media *(rw)> /rehel 192.168.210.0/24(rw)> EOF[root@rehel9 ~]# chmod 777 /media/[root@rehel9 ~]# chmod 777 /rehel/
- 查看服务状态
[root@rehel9 ~]# systemctl list-unit-files | grep nfsproc-fs-nfsd.mount static -var-lib-nfs-rpc_pipefs.mount static -nfs-blkmap.service disabled disablednfs-idmapd.service static -nfs-mountd.service static -nfs-server.service disabled disablednfs-utils.service static -nfsdcld.service static -nfs-client.target enabled disabled[root@rehel9 ~]# systemctl enable nfs-server.service --nowCreated symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.[root@rehel9 ~]# systemctl list-unit-files | grep nfsproc-fs-nfsd.mount static -var-lib-nfs-rpc_pipefs.mount static -nfs-blkmap.service disabled disablednfs-idmapd.service static -nfs-mountd.service static -nfs-server.service enabled disablednfs-utils.service static -nfsdcld.service static -nfs-client.target enabled disabled
- 配置防火墙策略
[root@rehel9 ~]# firewall-cmd --list-allpublic (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@rehel9 ~]# rpcinfo -p | grep nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl [root@rehel9 ~]# firewall-cmd --permanent --add-service=nfssuccess[root@rehel9 ~]# firewall-cmd --permanent --add-port=2049/tcpsuccess[root@rehel9 ~]# firewall-cmd --permanent --add-source=192.168.210.0/24 success[root@rehel9 ~]# firewall-cmd --reloadsuccess[root@rehel9 ~]# firewall-cmd --list-allpublic (active) target: default icmp-block-inversion: no interfaces: ens160 sources: 192.168.210.0/24 services: cockpit dhcpv6-client nfs ssh ports: 2049/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@rehel9 ~]# setenforce 0[root@rehel9 ~]# getenforce Permissive
2.2 client(客户端)配置详细方法
- 安装nfs-utlis
[root@locahost ~]# dnf update -y[root@locahost ~]# yum install nfs-utils.x86_64 -y[root@locahost ~]# rpm -qa | grep nfslibnfsidmap-2.5.4-25.el9.x86_64nfs-utils-2.5.4-25.el9.x86_64sssd-nfs-idmap-2.9.4-6.el9_4.x86_64
- 查看服务状态
[root@locahost ~]# systemctl list-unit-files --type=service | grep nfsnfs-blkmap.service disabled disablednfs-idmapd.service static -nfs-mountd.service static -nfs-server.service disabled disablednfs-utils.service static -nfsdcld.service static -[root@locahost ~]# systemctl enable nfs-server.service --nowCreated symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.[root@locahost ~]# systemctl list-unit-files --type=service | grep nfsnfs-blkmap.service disabled disablednfs-idmapd.service static -nfs-mountd.service static -nfs-server.service enabled disablednfs-utils.service static -nfsdcld.service static -
- 设置防火墙状态
[root@locahost ~]# rpcinfo -p | grep nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl[root@locahost ~]# firewall-cmd --permanent --add-service=nfssuccess[root@locahost ~]# firewall-cmd --permanent --add-port=2049/tcpsuccess[root@locahost ~]# firewall-cmd --permanent --add-source=192.168.210.0/24success[root@locahost ~]# firewall-cmd --reload success[root@locahost ~]# firewall-cmd --list-allpublic (active) target: default icmp-block-inversion: no interfaces: ens160 sources: 192.168.210.0/24 services: cockpit dhcpv6-client nfs ssh ports: 2049/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
- 挂在共享目录到本地
[root@locahost ~]# mount 192.168.210.129:/media /mnt[root@locahost ~]# mount 192.168.210.129:/rehel /media
- 查看磁盘空间
[root@locahost ~]# df -ThFilesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 3.8G 0 3.8G 0% /devtmpfs tmpfs 3.8G 0 3.8G 0% /dev/shmtmpfs tmpfs 1.5G 9.7M 1.5G 1% /run/dev/sda4 xfs 96G 13G 83G 14% //dev/sda2 xfs 495M 238M 258M 48% /boot/dev/sda1 vfat 200M 7.0M 193M 4% /boot/efitmpfs tmpfs 766M 104K 766M 1% /run/user/0192.168.210.134:/rhome/alice nfs4 96G 13G 83G 14% /home/alice
- 查看时都可用
#cliten(客户端)[root@locahost ~]# mkdir /{mnt/txt,media/txt}[root@locahost ~]# touch /{mnt/txt/abc_1.txt,media/txt/abc_2.txt}[root@locahost ~]# ls /{mnt/txt/,media/txt}/media/txt:abc_2.txt/mnt/txt/:abc_1.txt#service(服务端)[root@rehel9 ~]# ls /{rehel,media}/media:txt/rehel:txt