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

附录 E 对不支持群集的应用程序的要求

不支持群集的普通应用程序必须满足一些要求才能具有高可用性 (HA)。分析应用程序的适用性一节中列出了这些要求。本附录提供了有关该列表中各项要求的详细信息。

将应用程序的资源配置到资源组中可以使该应用程序具有高可用性。该应用程序的数据将存储在具有高可用性的全局文件系统中,这样即使某个服务器失败也可以由其他未失败的服务器存取这些数据。有关群集文件系统的信息,请参见Sun Cluster 概念指南(适用于 Solaris OS)

为了网络上的客户机可进行网络存取,在逻辑主机名资源(与数据服务资源包含在同一个资源组内)中配置了逻辑网络 IP 地址。数据服务资源和网络地址资源共同进行故障转移,这样该数据服务的网络客户机可以存取其新主机上的数据服务资源。

多主机数据

具有高可用性的全局文件系统的设备组分布在多个主机上,这样即使某个物理主机崩溃,其他某个未崩溃主机也可以存取该设备。对于要具有高可用性的应用程序,其数据必须具有高可用性,因此应用程序的数据必须驻留在全局 HA 文件系统中。

全局文件系统装载在作为独立实体创建的设备组上。您可以选择将一些设备组用作已装载的全局文件系统,而将其他设备组作为数据服务(例如 HA Oracle)的原始设备。

应用程序可能具有指向数据文件位置的命令行开关或换配置文件。如果该应用程序使用硬链接的路径名,您可以将该路径名更改为指向全局文件系统中的文件的符号链接,而无需更改应用程序代码。有关使用符号链接的详细介绍,请参见将符号链接用于多主机数据放置

在最糟糕的情况下,您不得不修改应用程序的源代码,以提供一些用于指向实际数据位置的机制。您可以通过运行附加命令行开关来执行此操作。

Sun Cluster 支持使用卷管理器中所配置的 UNIX® UFS 文件系统和 HA 原始设备。进行安装和配置时,系统管理员必须指定哪些 资源用于 UFS 文件系统,哪些用于原始设备。通常,原始设备只供数据库服务器和多媒体服务器使用。

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

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

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

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

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

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

主机名

您必须确定数据服务是否始终需要知道运行该服务的服务器的主机名。如果回答是肯定的,那么可能需要将该数据服务修改为使用逻辑主机名(即配置为与应用程序资源驻留在同一资源组的逻辑主机名资源的主机名),而不是使用物理主机的名称。

在数据服务的某些客户机服务器协议中,服务器将在发送给客户机的消息中把自己的主机名返回给客户机。对于这样的协议,客户机依赖于所返回的这个主机名,因为联系服务器时要使用该主机名。为了使所返回的主机名可以在故障转移或转移后可用,该主机名应该是该资源组的逻辑主机名,而不是物理主机的名称。在这种情况下,您必须修改该数据服务的代码,以将逻辑主机名返回到客户机。

多地址主机

术语“多地址主机”描述的是位于多个公共网络上的主机。这样的主机具有多个主机名和 IP 地址。其中每个网络都对应一个“主机名 - IP 地址”对。Sun Cluster 允许某一个主机位于任意数量的网络上,包括仅位于一个网络上(非多地址情况)。因为物理主机名具有多个“主机名 - IP 地址”对,所以每一个资源组可以具有多个“主机名 - IP 地址”对,分别与每个公共网络相对应。当 Sun Cluster 将资源组从一个物理主机移动到另一个物理主机时,也将同时移动该资源组的整组“主机名 - IP 地址”对。

将按照包含在该资源组中的逻辑主机名资源配置“主机名 - IP 地址”对组。这些网络地址资源是由系统管理员在创建和配置资源组时指定的。Sun Cluster 数据服务 API 中包含用来查询这些“主机名 - IP 地址”对的工具。

大多数针对 Solaris 操作系统编写的现有数据服务守护程序已经正确地处理了多地址主机。许多数据服务通过绑定到 Solaris 通配符地址 INADDR_ANY 的方式来进行其所有网络通信。绑定操作自动引发数据服务处理所有网络接口的全部 IP 地址。INADDR_ANY 有效地绑定到当前为计算机配置的所有 IP 地址上。通常不需要为了处理 Sun Cluster 逻辑网络地址而更改使用 INADDR_ANY 的数据服务守护程序。

绑定到 INADDR_ANY 与绑定到特定的 IP 地址

即使使用的是非多地址主机,Sun Cluster 逻辑网络地址概念也使计算机可以具有多个 IP 地址。对于计算机来说,会有一个 IP 地址与它自己的物理主机相对应,而其他 IP 地址则与其当前控制的每个网络地址(逻辑主机名)资源相对应。当计算机控制某个网络地址资源时,它将动态获取其他 IP 地址。当它不再控制某个网络地址资源时,也将动态释放 IP 地址。

就有些数据服务而言,如果将其绑定到 INADDR_ANY,它们将无法在 Sun Cluster 环境中正常使用。随着资源组处于受控制或不受控制状态,这些数据服务必须动态更改资源组所绑定的这组 IP 地址。完成重新绑定操作的策略之一是使这些数据服务的启动和停止方法终止并重新启动该数据服务的守护程序。

Network_resources_used 资源特性允许最终用户配置特定的一组网络地址资源(应用程序将要绑定到该资源上)。对于需要此功能的资源类型,必须在该资源类型的 RTR 文件中声明 Network_resources_used 特性。

当 RGM 使资源组联机或脱机时,它将按照特定顺序进行安装、卸载和向上/向下配置网络地址,这与它何时调用数据服务资源方法有关。请参见决定使用哪种 StartStop 方法

数据服务的 Stop 方法返回时,该数据服务必定已停止使用资源组的网络地址。同样,Start 方法返回时,该数据服务必定已开始使用该网络地址。

如果数据服务绑定到 INADDR_ANY 上而未绑定到单个 IP 地址上,则调用数据服务资源方法的顺序与调用网络地址方法的顺序不存在对应关系。

如果该数据服务的停止和启动方法通过终止和启动该数据服务的守护程序完成了它们的工作,则该数据服务将在适当的时间停止和开始使用网络地址。

客户机重试

对于网络客户机,故障转移或转移操作类似于逻辑主机崩溃,随后进行快速重新引导的过程。理想情况是将客户机服务器协议设计为执行若干次重试操作。如果应用程序和协议已处理了单个服务器崩溃和重新引导的情况,那么它们将处理该资源组被接管或转移的情况。一些应用程序可能选择无休止的重试。较复杂的应用程序将通知用户正在进行长时间重试,用户可以选择是否继续进行。