NFS

NFS

Network File System, 网络文件系统

应用场景:为web服务(集群)提供后端存储

特点:用于Linux系统(系统默认安装该服务),没有用户认证机制,明文传送,一般在局域网使用,支持多节点同时挂载并发写入,没有冲突解决机制(由使用该服务的程序解决)

RPC

Remote Procedure Call Protocol ,远程过程调用协议

1.工作原理

由于NFS服务对应的端口不固定,所以需要RPC 来统一管理NFS服务的端口 ,RPC端口为111

(1)当NFS服务启动后,会随机地使用一些端口,然后NFS向RPC去注册这些端口

(2)RPC记录NFS服务所使用的端口

(3)客户端通过端口111连接服务器RPC服务,来获取服务端NFS端口

(4)客户端通过NFS实际端口进行数据传输

2.安装

rpcbind 负责NFS的数据传输
nfs-utils 控制共享哪些文件,权限管理

服务端安装RPC工具: # yum install rpcbind

安装NFS:# yum install nfs-utils

安装ACl工具: # yum install nfs4-acl-tools (非必须)

3.配置

配置文件路径 /etc/exports

配置文件内容格式:共享目录 共享主机(共享选项)

#共享目录   共享主机(共享选项)
/share1    *(rw,sync,all_squash)
/share2       192.168.0.0/24(rw)
/share6  192.168.0.0/24(rw) 192.168.1.0/24(ro) #多个
共享主机作用
192.168.0.0/24特定网段
192.168.0.123特定主机
*.tigeru.cn某个域名下所有主机
共享选项作用
ro只读
rw读写
sync实时同步,直接写入磁盘
async异步,先缓存在内存中再同步到磁盘
anonuid设置访问nfs服务的用户Uid ,该用户需要在系统中存在
anongid设置访问nfs服务的用户gid
root_squash默认选项,客户端root用户创建的文件的属主和属组在服务端都变为nfsnobody,<br/>客户端其他人创建的文件,在服务端是他自己,client端是nobody ?????? 待验证
no_root_squash客户端root用户创建的文件属主和属组还是root,其他人服务端是它自己uid,client端是nobody
all_squash不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody

更多:# man 5 exports

4.使用

  • 服务端

(1)创建共享目录,并修改属主属组为 nfsnobody *

(2)根据需求修改配置文件 /etc/exports

(3)启动RPC服务# service rpcbindstart 再启动NFS服务# service nfs start

  • 客户端

查看NFS服务器共享的目录:# showmount -e IP地址

挂载NFS服务器:# mount.nfs IP地址:共享目录 本地挂载点

取消挂载:# umount 挂载点

5.问题及解决

  • 取消挂载提示失败

可能原因:有进程正在使用

#1.查看占用挂载点文件的进程
fuser -m -v /挂载点 
#2.通过PID杀死对应进程
Last modification:January 30th, 2019 at 10:53 pm