NFS
NFS
1.简介
network file system
通过局域网络让不同的主机系统之间可以共享文件和目录,主要通过linux系统进行共享,NFS服务可以提供远程存储服务,一般应用于用于内网小型集群架构中,其远程传输基于RPC(远程过程调用)。其作用为实现多台服务器存储共享以及实现多台服务器之间数据一致性。
2.实现原理:
NFS守护进程
RPC.nfsd
守护进程,管理NFS服务
RPC.mount
管理nfs的文件系统
本地文件操作方式
1.当用户执行mkdir命令,该命令会通过shell解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。
NFS实现原理
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS服务端
3.NFS服务器端收到请求后,会先调用portmap进程进行端口映射
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务器端
5.RPC.mount进程判断客户端是否有对应的权限进行验证
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递到内核,由内核驱动硬件。
rpc是一个远程过程调用,那么使用nfs必须有rpc服务
3.nfs组件
安装NFS服务,需要安装两个软件,分别是:
- RPC主程序:rpcbind
NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。 - NFS主程序:nfs-utils
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。
NFS的相关文件:
- 主要配置文件:/etc/exports
这是 NFS 的主要配置文件了。该文件是空白的,有的系统可能不存在这个文件,主要手动建立。NFS的配置一般只在这个文件中配置即可。 - NFS 文件系统维护指令:/usr/sbin/exportfs
这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享。 - 分享资源的登录档:/var/lib/nfs/*tab
在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。 - 客户端查询服务器分享资源的指令:/usr/sbin/showmount
这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。
4.服务实践
首先服务器端需要启动nfs-server和rpcbind,客户端也需要启动rpcbind。
服务器端:
安装nfs
yum -y install nfs-utils rpcbind
配置
主配置文件/etc/exports,默认空
格式:
共享目录路径 允许访问的nfs客户端(共享权限参数)
共享目录路径: 服务器本地目录路径
允许访问的客户端:
ip or 域名
网段: 172.16.1.0/24 主机: 172.16.1.1/32 域名:*.edu.mage.com
权限:
rw 读写权限 ***
ro 只读权限
root_squash 当nfs客户端以root管理员访问时,映射为nfs服务器的匿名用户
no_root_squash 当nfs客户端以root管理员访问时,映射为nfs服务器的ROOT管理员用户
all_squash 无论nfs客户端使用什么账户访问,均映射为nfs服务器的匿名用户 ***
sync 同时将数据写入内存与硬盘中,保证不丢死数据
async 优先将数据保存到内存中,然后再写入硬盘,这样效率更高,但可能会丢失数据。
async 优先将数据保存到内存中,然后再写入硬盘,这样效率更高,但可能会丢失数据。
anonuid 配置all_aquash使用,指定nfs的用户uid,必须存在系统 ***
anongid 配置all_aquash使用,指定nfs的用户gid,必须存在系统 ***
例子(/etc/exports):
/data 172.16.1.0/24(rw),0.0.0.0/0(ro)
/backup 192.1.1.1/32(rw)
/backuo *.edu.com(rw)
4.创建环境
mkdir /data
chown -R nfsnobody.nfsnobody /data
5.启动服务
systemctl start nfs-server rpcbind
systemctl status nfs-server rpcbind
客户端
客户端挂载
1.安装工具 安装nfs-utils 并启动rpcbind
yum -y install rpcbind nfs-utils
2.客户端使用 showmount -e 查看远程服务器rpc提供的可挂载nfs信息
showmount -e 192.168.1.1
3.在nfs创建一个挂载目录,然后使用mount命令挂载。
mount -t nfs 192.168.65.131:/backup /mnt
挂载时需注意挂载权限。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!