目录
NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现。
RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
如下图,当我们在nfs服务器设置好一个共享目录/data后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data目录,其实就是服务器端的/data目录。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口来进行数据的传输。
①首先服务器端启动RPC服务,并开启111端口
②服务器端启动NFS服务,并向RPC注册端口信息
③客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
④服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
⑤客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
b.简单容易上手
c.方便部署非常快速,维护十分简单
a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
b.在高并发下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦
软件包:nfs-utils(NFS主程序,包括服务器和客户端相关工具,CentOS8 最小化安装时默认没有安装)
相关软件包:rpcbind(必须,RPC主程序),tcp_wrappers
Kernel支持:nfs.ko
端口:2049(nfsd), 其它端口由portmap(111)分配
NFS服务主要进程:
rpc.nfsd | 最主要的NFS进程,管理客户端是否可登录 |
rpc.mountd | 挂载和卸载NFS文件系统,包括权限管理 |
rpc.lockd | 非必要,管理文件锁,避免同时写出错 |
rpc.statd | 非必要,检查文件一致性,可修复文件 |
说明:CentOS 6 开始portmap进程由rpcbind代替 |
日志:/var/lib/nfs/
NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
格式说明:
以#开始的行为注释
主机格式:
anonymous:表示使用*通配所有客户端
单个主机:ipv4,ipv6,FQDNIP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16wildcards:主机名通配,例如:*.kgc.com,IP不可以
netgroups:NIS域的主机组,@group_name
常见参数
默认选项(ro,sync,root_squash,no_all_squash)
ro,rw | 只读和读写 |
async | 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性 |
sync(1.0.0后为默认) | 同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高 |
root_squash | (默认)远程root映射为nfsnobody,UID为65534, ? CentOS8 为nobody,CentOS 7以前的版本为nfsnobody |
no_root_squash | 远程root映射成NFS服务器的root用户 |
all_squash | 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody |
no_all_squash? | (默认)保留共享文件的UID和GID |
anonuid和anongid | 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用 |
exportfs:可用于管理NFS导出的文件系统
常见选项:
-v? ? ?#查看本机所有NFS共享
-r? ? ?#重读配置文件,并共享目录
-a?? ?#输出本机所有共享
-au? #停止本机所有共享
常见用法:
showmount -e hostname ?
[root@centos7 ~]#showmount -e 10.0.0.8
Export list for 10.0.0.8:
/data/wordpress *
客户端NFS挂载
NFS相关的挂载选项:man 5 nfs
fg? ? ? ? ? ? ?#(默认)前台挂载
bg? ? ? ? ? ? #后台挂载
hard? ? ? ? #(默认)持续请求
soft? ? ? ? ?#非持续请求
intr? ? ? ? ? #和hard配合,请求可中断
rsize? ? ? ?#和wsize 一次读和写数据最大字节数,rsize=32768
_netdev? #无网络连接不挂载
vers? ? ? ? #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0
1.检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
2.创建共享目录
vim /etc/exports //NFS的配置文件,默认文件内容为空(无任何共享)
/opt 192.168.80.0/24(rw,sync,no_root_squash)
//设置/opt为共享目录,允许192.168.48.0网段的IP地址主机访问
3.启动服务
systemctl start rpcbind //一定要先开启rpcbind服务
systemctl start nfs //如服务已启动,更改完配置信息后需要重启服务
①检查并安装软件
②创建共享目录
③启动服务
④查看服务器的共享目录及网段
⑤查看服务器的nfs详细信息
①检查并安装软件,开启服务
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl start rpcbind
systemctl start nfs
②将共享目录挂载到本地
mount -t nfs 192.168.80.111:/opt /mnt
①进入服务器/opt文件夹下创建文件
②客户端进入挂载文件夹/mnt,查看