通过使用客户端故障转移,NFS 客户机可以识别出使相同数据可用的多个服务器,并且在当前服务器不可用时可以切换到备用服务器。如果发生以下情况之一,则文件系统就会变得不可用。
如果文件系统连接到的服务器崩溃
如果服务器过载
如果出现网络故障
在上述情况下执行的故障转移通常对用户是透明的。因此,故障转移可以随时进行,而不会中断客户机上正在运行的进程。
故障转移要求采用只读方式挂载文件系统。文件系统必须相同,故障转移才能成功进行。有关使文件系统相同的因素的说明,请参见什么是复制的文件系统?。静态文件系统或不经常被更改的文件系统是故障转移的最佳候选系统。
您不能对同一 NFS 挂载同时使用 CacheFS 和客户端故障转移。系统针对每个 CacheFS 文件系统存储了额外信息。故障转移期间不能更新此信息,因此挂载文件系统时只能使用这两个功能之一。
需要为每个文件系统建立的副本数目取决于许多因素。理想的情况是,应该至少具有两个服务器。每个服务器都应该支持多个子网。此设置比每个子网上具有唯一一个服务器更好。该过程要求检查列出的每个服务器。 因此,列出的服务器越多,每个挂载的速度就越慢。
要完全领会该过程,需要了解两个术语。
故障转移-从支持复制的文件系统的服务器列表中选择服务器的过程。通常,使用已排序列表中的下一个服务器,除非该服务器无法做出响应。
重映射-即使用新的服务器。在正常使用中,客户机在远程文件系统上存储每个活动文件的路径名。在重映射期间,系统将评估这些路径名以在新的服务器上找出这些文件。
为了实现故障转移,当其中每个文件大小都相同且文件大小或文件类型与原始文件系统相同时,可以将这样的文件系统称为副本。不考虑权限、创建日期和其他文件属性。如果文件大小或文件类型不同,则重映射将失败,且该过程将挂起,直到旧的服务器可用为止。在 NFS 版本 4 中,该行为是不同的。请参见NFS 版本 4 中的客户端故障转移。
可以使用 rdist、cpio 或其他文件传输机制来维护复制的文件系统。由于更新复制的文件系统会导致不一致,因此,为实现最佳效果应考虑以下预防措施:
在安装新版本的文件之前,先重命名旧版本的文件
在夜间运行更新,此时客户机使用率较低
使更新始终很小
将副本数目降到最少
某些软件包需要对文件进行读取锁定。为防止这些产品被破坏,允许对只读文件系统进行读取锁定,但是读取锁定仅对客户端是可见的。这些锁定在重映射后不会发生变化,因为服务器不“知晓”有关锁定的信息。由于文件不会发生更改,因此您不需要在服务器端锁定文件。
在 NFS 版本 4 中,如果由于文件大小不同或文件类型不同而无法建立副本,则将发生以下情况。
文件被标记为停用。
列显警告。
应用程序收到系统调用故障信息。
如果重新启动应用程序并再次尝试访问该文件,则应该会成功。
在 NFS 版本 4 中,您不会再收到因不同大小的目录而导致的复制错误。在以前的 NFS 版本中,这种情况被视为错误且会阻碍重映射过程。
此外,在 NFS 版本 4 中,如果目录读取操作未成功,则将由列出的下一个服务器执行该操作。在以前的 NFS 版本中,未成功的读取操作将导致重映射失败且该过程挂起,直到原始服务器可用为止。