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

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

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

将应用程序的资源配置到资源组中可以使该应用程序具有高可用性。将应用程序的数据置于高可用性群集文件系统上,可以在一个服务器出现故障时,通过其他未发生故障的服务器继续访问这些数据。有关群集文件系统的信息,请参见《Sun Cluster 概念指南(适用于 Solaris OS)》

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

本附录包括以下主题:

多主机数据

具有高可用性的群集文件系统的设备被托管在多个主机上,这样即使某个物理主机崩溃,其它某个未崩溃的主机也可以继续访问该设备。要使应用程序具有高可用性,其数据必须具有高可用性。因此,应用程序的数据必须位于可以从多个群集节点访问的文件系统中。Sun Cluster 支持的高可用性文件系统的示例包括 HA 文件系统、故障转移文件系统 (Failover File System, FFS) 和使用 Oracle Real Application Clusters 的环境中的 QFS 共享文件系统。

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

应用程序可能包含指向数据文件位置的命令行切换或配置文件。如果应用程序使用硬链接路径名,则您可以更改指向群集文件系统中某个文件的符号链接的路径名,而无需更改应用程序代码。有关使用符号链接的详细讨论,请参见将符号链接用于多主机数据放置

在最坏的情况下,必须修改应用程序的源代码以提供指向实际数据位置的机制。您可以通过创建其他命令行参数来实现此机制。

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

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

有时候,应用程序数据文件的路径名为硬链接,且不具有覆盖硬链接路径名的机制。为避免修改应用程序代码,您可以适时地使用符号链接。

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

该应用程序或其管理过程之一修改了该数据文件的名称及目录后,再这样使用该符号链接将会发生问题。例如,假定应用程序通过先创建一个新临时文件 /etc/mydatafile.new 来执行更新。然后,该应用程序通过使用 rename() 系统调用(或 mv 命令)来重命名该临时文件以使其具有真实文件名。通过创建临时文件并将其重命名为真实文件名,数据服务尝试确保其数据文件的内容始终完好。

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

潜在的问题是现有应用程序不支持符号链接,并且无法写入以处理符号链接。要使用符号链接将数据访问重定向到逻辑主机的文件系统,该应用程序实现必须以不会删除符号链接的方式运行。因此,对于在群集的文件系统中放置数据的问题,符号链接不是彻底的解决方法。

主机名

您必须确定数据服务是否始终需要知道运行该服务的服务器的主机名。如果是,则可能需要修改数据服务以使用逻辑主机名,而不使用物理主机名。在这种情况下,逻辑主机名是配置到与应用程序资源位于同一资源组的逻辑主机名资源中的主机名。

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

多地址主机

术语多地址主机的意思是一个主机位于多个公共网络上。这样的主机具有多个主机名和 IP 地址。它针对每个网络具有一个主机名(IP 地址对)。Sun Cluster 允许某一个主机位于任意数量的网络上,包括仅位于一个网络上(非多地址情况)。就像物理主机名具有多个主机名(IP 地址对)一样,每个资源组也可以具有多个主机名(IP 地址对),一个公共网络一个。当 Sun Cluster 将资源组从一个物理主机移至另一物理主机时,该资源组的完整主机名(IP 地址对)组也将一同移动。

该资源组的主机名(IP 地址对)组将被配置为包含在资源组中的逻辑主机名资源。创建和配置资源组时,群集管理员将指定这些网络地址资源。Sun Cluster Data Service API 包含查询这些主机名(IP 地址对)的功能。

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

绑定到 INADDR_ANY 地址而非特定的 IP 地址

即使使用的是非多地址主机,Sun Cluster 逻辑网络地址概念也使计算机可以具有多个 IP 地址。计算机具有自身作为物理主机的一个 IP 地址,并针对其当前主控的每个网络地址(逻辑主机名)资源具有其他 IP 地址。当计算机控制某个网络地址资源时,它将动态获取其它 IP 地址。当它不再控制某个网络地址资源时,也将动态释放 IP 地址。

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

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

当 RGM 使资源组联机或脱机时,RGM 将遵循与 RGM 调用函数调用数据服务资源方法的时间相关的特定顺序探测网络地址、取消对网络地址的探测或将网络地址配置为打开或关闭。请参见确定使用哪种 StartStop 方法

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

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

如果数据服务的停止和启动方法通过中止和重新启动数据服务的守护进程实现了它们的作用,则可以在恰当的时刻使用网络地址停止或启动数据服务。

客户机重试

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