什么是NFS?
NFS全称为网络文件系统,即Network File System。NFS基于UDP/IP
协议,采用远程过程调用RPC机制,是当前主流异构平台共享文件系统。
NFS分为客户端和服务端,客户端可以透明地读取远端服务器上的文件,就像读取本地文件一样。
实现原理
NFS的服务端对外提供服务的端口是随机的,要实现在网络间进行文件传输,首先rpcbind
服务对外开放111端口,服务端向其注册端口信息,客户端通过111端口获取NFS的端口信息,从而通过随机端口进行文件传输。
环境说明
操作系统 | IP地址 | |
---|---|---|
服务端 | Ubuntu | 192.168.3.128 |
客户端 | CentOS | 192.168.3.202 |
安装服务端
在Ubuntu
操作系统下使用apt
命令安装服务端。
apt install nfs-kernel-server
安装nfs-kernel-server
时,会同时安装rpcbind
软件包。
安装完成后两个服务已经是运行状态。
root@ubuntu:~# systemctl status rpcbind
● rpcbind.service - RPC bind portmap service
Loaded: loaded (/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-28 15:19:21 UTC; 1min 8s ago
TriggeredBy: ● rpcbind.socket
Docs: man:rpcbind(8)
Main PID: 14522 (rpcbind)
Tasks: 1 (limit: 4575)
Memory: 1.2M
CGroup: /system.slice/rpcbind.service
└─14522 /sbin/rpcbind -f -w
root@ubuntu:~# systemctl status nfs-server.service
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: active (exited) since Thu 2022-04-28 15:19:28 UTC; 1min 12s ago
Main PID: 15229 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 4575)
Memory: 0B
CGroup: /system.slice/nfs-server.service
服务端配置
在配置前需要手动创建共享目录:
mkdir -p /data/nfs
通过/etc/exports
配置文件进行共享目录及客户端地址的配置,其格式为:
共享目录 [客户端1(参数项)] [客户端2(参数项)]
常用的参数项为:
参数项 | 参数项说明 |
---|---|
ro | 只读 |
rw | 读写 |
sync | 数据同时写入共享内存和硬盘 |
async | 数据先写入内存,不直接写入硬盘 |
配置示例:
/data/nfs 192.168.3.0/24(ro) 172.16.0.0/24(rw)
修改配置文件后无需重启nfs服务,通过exportfs
命令重新加载生效。
通过showmount -e
命令可以看到共享目录已经挂载。
root@ubuntu:/data/nfs# showmount -e
Export list for localhost:
/data/nfs 192.168.3.0/24
安装客户端
在CentOS
操作系统下,使用yum install
命令安装rpcbind
和nfs-utils
软件包。
yum install -y rpcbind nfs-utils
查看服务端共享目录
在客户端通过showmount -e
命令可以查看服务端已经挂载的共享目录。
[root@k8s-node system]# showmount -e 192.168.3.128
Export list for 192.168.3.128:
/data/nfs 192.168.3.0/24
客户端挂载共享目录
客户端需要挂载服务端共享的目录,才能在本地访问远程服务端的目录。
在挂载前需要手动创建本地目录:
mkdir -p /data/nfs
挂载共享目录:
mount -t nfs 192.168.3.128:/data/nfs /data/nfs
验证
在服务端/data/nfs
目录下创建文件:
echo 'Hello' > /data/nfs/test
此时在客户端的/data/nfs
目录下可以看到文件内容:
[root@localhost nfs]# cat /data/nfs/test
Hello