Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

将符号链接用于多主机数据放置

有些时候,应用程序会对数据文件的路径名采用硬链接的方式,而没有用于覆盖硬链接路径名的机制。 为避免修改应用程序代码,您可以适时地使用符号链接。

例如,假设该应用程序使用硬链接的路径名 /etc/mydatafile 命名其数据文件, 那么您可以将文件的路径更改为符号链接(其值指向逻辑主机的某一个文件系统中的文件)。 例如,您可以使其成为指向 /global/phys-schost-2/mydatafile 的符号链接。

该应用程序或其管理过程之一修改了该数据文件的名称及目录后,再这样使用该符号链接将会发生问题。 例如,假设该应用程序执行更新,方法是首先创建新的临时文件 /etc/mydatafile.new, 然后通过使用 rename(2) 系统调用(或 mv(1) 程序)重命名临时文件以获取实际的文件名。 通过创建临时文件,然后再对其进行重命名,数据服务试图确保其数据文件的目录始终保持正确的格式。

遗憾的是 rename(2) 操作将破坏符号链接。 现在,命名为 /etc/mydatafile 的文件是一个正规文件,并且与 /etc 目录位于相同的文件系统中,而不是位于群集的全局文件系统中。 因为 /etc 文件系统是每个主机专用的,所以进行故障切换或转移之后,该数据不再可用。

这种情况下的根本问题是现有应用程序不支持符号链接,并且在编写时没有考虑到符号链接的问题。 要使用符号链接将数据存取重定向到逻辑主机的文件系统,该应用程序实现必须以不会删除符号链接的方式运行。 因此,符号链接并不能完全解决将数据放置在群集全局文件系统中的问题。