网络文件系统:NFS 锁管理与性能分析
在 Linux 系统中,存在多种内核锁仲裁方法,如整文件租约、共享模式(类似于 Windows 共享模式)和强制锁等。若应用程序依赖这些方法进行锁仲裁,需使用 NFS 版本 4。接下来,我们将探讨一种能让多个服务器共享锁信息的方法:网络锁管理器(Network Lock Manager,NLM)。
网络锁管理器(NLM)
NFS 最初旨在管理对单个数据存储设备的分布式访问,并通过单独的程序提供协作式锁仲裁方法。由于文件系统和锁机制是分开实现的,NFS 开发者认为他们提供了一种通用的网络锁仲裁方式,可与任何网络文件系统配合使用。不过,网络锁管理器(NLM)主要被 NFSv3 服务器和客户端广泛用作锁仲裁方法。NFSv4 协议虽不使用单独的守护进程或协议进行锁定,但许多概念是相同的,因此我们将通过讨论 NFSv3 的 NLM 来介绍 NFS 锁定。
NLM 由两个守护进程 statd 和 lockd 组成。这两个守护进程需在 NFS 服务器和所有客户端上持续运行,以确保各方对锁定状态和锁的所有者达成一致。
statd:也称为 rpc.statd,在集群的每个节点上运行。当节点在持有 NFS 服务器上的锁时崩溃,重启后,rpc.statd 程序会通知 NFS 服务器该节点已恢复正常运行。NFS 客户端上的 statd 会在首次尝试锁定 NFS 服务器上的文件时,将每个 NFS 服务器的名称写入本地磁盘。当 NFS 服务器收到客户端重启后的通知时,会认为该节点上持有锁的所有进程已停止运行,并释放这些锁。statd 有时也被描述为网络状态监视器(NSM)的一种实现。 <