文件存储 NAS 通过 NFS 协议实现网络访问和存储资源共享。本文介绍 NFS 协议的基本概念、版本、数据和元数据一致性。
NFS(Network File System),即网络文件系统,允许客户端计算机上的用户像访问本地存储一样通过计算机网络访问文件。
目前主流使用的 NFS 版本为 NFSv3 和 NFSv4,其中,NFSv4 版本细分为 NFSv4.0、NFSv4.1 和 NFSv4.2。关于 NFSv3 和 NFSv4 差异说明如下:
说明
关于 NFSv3 和 NFSv4 协议的详细介绍,请参见 NFS Version 3 Protocol Specification 和 Network File System (NFS) version 4 Protocol。
差异点 | NFSv3 | NFSv4 |
---|---|---|
特性 | NFSv3 引入 TCP 协议;NFSv3 服务器端 nfsd 是无状态的服务 ,依赖 rpc.mountd,rpc.statd, locked 等服务提供挂载和文件锁功能。 | NFSv4 是一种有状态的协议,自身实现了文件锁和获取文件系统根节点功能,不需要 NLM 和 MOUNT 进程协助。 |
请求 | NFSv3 支持异步写操作;增加了ACCESS请求,用于检查用户的访问权限。 | NFSv4 只提供了两个请求 NULL 和 COMPOUND,所有的操作都整合进了 COMPOUND 中,客户端可以根据实际请求将多个操作封装到一个 COMPOUND 请求中,增加了灵活性。 |
安全性 | NFSv3 不支持数据加密或 Kerberos 身份验证,但可以采用标准的 RPC AUTH_SYS 机制验证挂载后的客户端对具体文件的权限。 | NFSv4 协议支持 RPCSEC-GSS 身份认证,增加了安全性。 |
兼容性 | NFSv3 支持各种操作系统和硬件平台。 | NFSv4 需要更高版本的内核支持,因此在某些旧版本的操作系统和硬件上可能无法运行。 |
NFS 协议定义了客户端和服务器之间的通信规范,使得客户端能够通过网络访问和操作远程文件系统,不同规格的文件系统支持的 NFS 协议版本不同,具体说明如下:
为了确保文件在不同客户端之间数据一致性,NFS 提供了弱缓存一致性的保证,满足文件共享的需求。
基于内核缓存超时的最终一致性
NFS 客户端会缓存从服务器获取的数据信息和元数据信息,并在一定时间内认为缓存的数据有效。下一次 NFS 客户端对相同文件发起请求时,如果发现缓存项在有效期内,则会直接读取缓存信息(例如文件的属性、文件内容、目录下的文件列表等);当缓存超时无效时,则会再次向服务器获取文件信息,使其与服务器的数据保持一致。关于缓存超时一致性的更多信息,请参见 NFS。
说明
基于文件 close/open 的 CTO 一致性
基于缓存超时机制,当两个及以上的客户端同时读写相同的文件时,客户端 A 的修改在客户端 B 不一定能立即看到。因此,为了提升数据一致性,NFS 还提供了基于文件的 CTO (close-to-open)一致性保证,确保文件的打开和关闭操作之间的数据一致性,保证在重新打开文件时能够看到最新的数据和元数据。即当一个客户端打开文件,随后执行文件关闭操作,之后其他客户端只要重新打开该文件,都能访问到最新的写入数据。