我正在使用 Pacemaker/OpenAIS 管理运行 NFS v4 的服务器。NFS 配置为使用 TCP。当我将 NFS 服务器迁移到 Pacemaker 集群中的另一个节点时,即使元数据被保留,来自客户端的连接也会“挂起”并最终在 90 秒后超时。90 秒后,旧的挂载点将变得“陈旧”,并且无法再访问挂载的文件。
90 秒的宽限期似乎是服务器配置的一部分,而不是客户端配置的一部分。我在服务器上看到以下消息:
内核:NFSD:开始 90 秒宽限期
如果我在迁移后在客户端节点上重新启动 NFS 客户端(卸载然后重新安装共享),那么我就不会遇到问题,但连接和文件传输仍然中断。
三个问题:
- 90 秒宽限期是什么?它有什么用处?
- 将 NFS 服务器迁移到另一个节点后,如何在不重新启动客户端的情况下防止文件在客户端上过期?
- 是否实际上可以迁移 NFS 服务器而不会导致大文件上传丢失?
答案1
NFS 在服务器上存储了大量客户端的状态。Pacemaker/OpenAIS 无法弥补 NFS 在这方面的不足。宽限期是为了让服务器和客户端重新获取状态。这是协议的一部分。
无论如何,看起来你并没有完全转移客户端状态(比如 /var/lib/nfs 内容)。请参阅这了解想法以及在服务器端需要同步什么状态。
答案2
而使用 NfSv3,您可以为挂载指定 UDP 传输以实现即时故障转移,并且客户端/服务器不会有任何察觉,而 NFSv4 则使它变得更加棘手。最重要的是因为 TCP 是唯一可用的传输,并且 TCP 的本质是不会断开连接并像往常一样继续运行。
您可以缩短传输时间。特别是如果您遵循有关通用服务器状态目录和维护 FSID 的建议。尝试在停止 NFS 之前拉出监听接口,并确保挂载不会被收回 ( exportfs -ua
)。但它永远不会是绝对即时的。
您还应记住,从一台服务器切换后再直接切换回来是不行的。前一台服务器仍会将之前的连接保持在打开状态TIME_WAIT
,并会在最多 20 分钟内拒绝新的连接。
关于这一点的很多细节Heartbeat 维基页面虽然有些老派,但仍然有意义。
答案3
物理磁盘是否在单元之间共享,例如,它是 SAN 磁盘吗?
您是否导出具有固定 fsid 的光盘
/共享*(rw,同步,fsid=6667)
否则:
为 NFS 提供服务的设备的 inode 号、IP、次要号和主要号必须相同,才能保持相同的 NFS 文件句柄。因此,请在设备顶部使用 lvm,并保持 lvm 的次要/主要号同步。
答案4
NFSv4 是一种有状态的协议,这意味着如果双方(客户端、服务器)正在进行通信,他们应该始终了解对方的情况。换句话说,如果服务器在其他地方停止并重新启动,则客户端应该在移动之前断开连接,然后在移动完成时重新连接(我猜 Pacemaker + NFSd != 爱 :-)
也许你应该尝试集群文件系统用于 HA/集群