首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NFS与AFS缓存验证

NFS与AFS缓存验证
EN

Server Fault用户
提问于 2016-01-10 15:53:37
回答 1查看 791关注 0票数 0

NFS客户端通过计算Tc< t来重新验证访问上的缓存块。如果失败,它将向NFS服务器发送getattr调用,请求获得相关文件的上一次修改后的标记。

AFS在周期性时间T、打开或重新启动时重新验证其缓存文件。

当这些重新验证调用在网络中丢失时会发生什么?当我们假设使用NFS进行硬安装时,NFS客户端块是等待getattr调用的答复,还是我们能够跳过这一检查,以便继续工作?

对于AFS,它是阻止等待验证,还是我们可以继续工作?

EN

回答 1

Server Fault用户

发布于 2016-04-06 01:15:48

OpenAFS和AuriStorFS采用的AFS缓存一致性模型与您在问题中描述的略有不同。

存储在/afs下的每个对象都有两个

  1. 数据:文件流、目录内容、挂载点目标或符号链接目标。
  2. 元数据:大小、创建者、所有者、组、unix模式、链接计数、时间戳、父id、锁状态、访问控制列表和*数据版本号“

对象的*数据版本号“每次修改对象的数据时都会增加,但在元数据更改时不会增加。

客户端(也称为缓存管理器)可以缓存对象的数据和元数据,但只有在从文件服务器获得*回调承诺的情况下才能考虑它的最新情况。正是回调承诺的生存期决定了缓存管理器必须将FetchStatus RPC发送到文件服务器的频率。只要回调承诺没有过期,缓存管理器就可以自由使用缓存数据。如果文件服务器向缓存管理器发出回调RPC命令,则承诺被撤销,缓存管理器需要获取更新的状态信息。

原始Andrew和OpenAFS中从文件服务器到缓存管理器的回调通道未经身份验证。因此,它不能用于传输实际数据或元数据更改。缓存管理器必须通过它自己的连接获取它,该连接可能是经过身份验证和加密的。AuriStorFS和早期AFS变体之间的区别之一是使用安全的回调通道。

一旦缓存管理器获得了最新的元数据,它就可以将当前数据版本号与缓存的数据版本进行比较。如果版本没有更改,则缓存的数据仍然有效。否则,必须从缓存中丢弃过期数据,并获取更新的数据。

AFS缓存一致性模型的一个特性是将文件系统视为序列化消息传递平台。如果机器A正在积极使用某个文件,而机器B希望修改该文件,然后向机器A发送带外消息以读取更新后的文件,则文件更新必须在带外消息之前到达。通过确保在修改文件的RPC完成对颁发者的RPC之前,所有回调承诺都被打破,从而保证了此属性。

您提出了当客户端和文件服务器之间的连接失败时会发生什么情况的问题。文件服务器将尝试在一段时间内发送回调RPC,但不会无限期阻止。相反,它将为无法到达的客户端排队一条延迟回调消息,并向发行人完成RPC。下次当失去连接的客户端与文件服务器联系时,它的所有操作都将被阻塞,直到所有延迟的回调都被传递。

在连接丢失期间,客户端可以尝试与另一个维护数据副本的文件服务器通信。如果没有,并且访问的卷是硬挂载的,那么客户机将无限期地阻塞。如果不是硬挂载,那么发出的任何网络RPC都会超时,故障将返回到发布应用程序。

我希望这能令人满意地描述AFS系列文件系统的行为。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/748028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档