nfs简介
NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。
简单概括:
定义:网络文件存储系统
作用:NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务
工作机制:nfs是基于rpc来实现网络文件系统共享的
rpc简介
RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
注意:
- nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能
- nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上
- nfs服务只能基于IP进行
- NFS 也是 NAS存储设备必然支持的一种协议,但是因为没有用户认证机制,而且数据在网络上明文传输,安全性很差,所以一般只能在局域网中使用
安装 nfs-utils、rpcbind 软件包
环境介绍:
system:龙蜥8.6
kernel:4.19.91-26.an8.x86_64
NFS 服务端需要安装 rpcbind 和 nfs-utils
NFS 客户端只需要安装 nfs-utils
nfs端口号2049
RPC端口号111
$ rpm -qa nfs-utils rpcbind #检查是否安装,无结果返回即未安装
安装nfs服务:
cnetos、Anolis安装命令:
# 服务端
$ yum install -y nfs-utils rpcbind
# 客户端
$ yum install -y nfs-utils
Ubuntu安装命令:
# 服务端
apt install nfs-kernel-server
# 客户端
apt install nfs-common
# 配置NFS存储共享⽬录并授权
mkdir -p /opt/nfs/rancher && chmod -R 777 /opt/nfs/rancher
# 开放nfs共享目录权限
echo "/opt/nfs/rancher 192.168.xxx.xxx(rw,sync,insecure,no_subtree_check,no_root_squash)" >> /etc/exports
# 加载nfs开放目录并查看
exportfs -ar && more /etc/exports
# 启动 RPC 服务
systemctl start rpcbind
或
service rpcbind start
# 查看 NFS 服务项 rpc 服务器注册的端口列表
[root@nfs ftp]# 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-server start
或
service nfs-server start
# 启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表
[root@nfs nfs]# 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 35561 status
100024 1 tcp 41417 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
100021 1 udp 52559 nlockmgr
100021 3 udp 52559 nlockmgr
100021 4 udp 52559 nlockmgr
100021 1 tcp 36035 nlockmgr
100021 3 tcp 36035 nlockmgr
100021 4 tcp 36035 nlockmgr
# 检查服务端看下是否正确加载了设置的 /etc/exports 配置
[root@nfs nfs]# showmount -e localhost
Export list for localhost:
/opt/nfs/rancher 192.168.***.0/24
NFS测试
# 在客户端服务器查看服务端设置的共享目录
# showmount -e 服务端ip
[root@docker01 ~]# showmount -e 192.168.116.21
Export list for 192.168.116.21:
/opt/nfs/rancher 192.168.112.0/24
说明,我们可以客户端的文件及文件夹挂载到nfs的服务端的开放目录下
# 客户端创建挂载文件夹
mkdir -p /opt/nfs
# 将客户端的文件夹挂载到nfs服务端并查看挂载状态
[root@docker01 ~]# mount 192.168.116.21:/opt/nfs/rancher /opt/nfs
[root@docker01 ~]# df -h | grep 192.168.116.21
192.168.116.21:/opt/nfs/rancher 92G 3.2G 89G 4% /opt/nfs
至此,客户端文件夹/opt/nfs 已正常挂载至 nfs服务端的/opt/nfs/rancher目录下
# 继续测试
## 在服务器,共享目录(/opt/nfs/rancher)下创建一个nfs.txt文件
[root@nfs rancher]# vi nfs.txt
[root@nfs rancher]# ll
总用量 4
-rw-r--r-- 1 root root 23 4月 28 11:27 nfs.txt
## 客户端查看是否正常读取改文件
[root@docker01 ~]# cd /opt/nfs/
[root@docker01 nfs]# ll
总用量 4
-rw-r--r-- 1 root root 23 4月 28 11:27 nfs.txt
正常读取!
同理,客户端/opt/nfs下的文件在nfs服务端/opt/nfs/rancher同样可正常读取