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

协调资源间的依赖性

有时,某个客户机-服务器数据服务在满足某个客户机请求的同时,也会向其他的客户机-服务器数据服务发出请求。例如,如果当数据服务 A 提供其服务时,数据服务 B 也必须提供其服务,则说明数据服务 A 依赖于数据服务 B。为了满足此要求,Sun Cluster 允许在资源组内配置资源的依赖性。这些依赖性会影响 Sun Cluster 启动和停止数据服务的顺序。有关详细信息,请参见 scrgadm(1M) 手册页。

如果您的资源类型的资源依赖于其他类型的资源,则您需要指导群集管理员正确配置资源和资源组。或者,提供正确配置它们的脚本或工具。如果依赖资源必须和“被依赖”资源在同一节点上运行,则必须在同一资源组中配置这两种资源。

决定是使用显式资源依赖性,还是忽略它们,并用您 HA 数据服务的自身代码轮询其他数据服务的可用性。如果依赖资源和被依赖资源可以在不同节点上运行,则可以在不同的资源组中对它们进行配置。在此情况下,需要进行轮询,这是因为不能跨组配置资源依赖性。

某些数据服务本身不直接存储数据。而是依赖其他后端数据服务存储其所有的数据。这样的数据服务将所有只读和更新请求转送到对后端数据服务的调用中。例如,假设一个将其所有数据都保留在 SQL 数据库(例如 Oracle)中的客户机-服务器日程日历服务。日程日历服务具有自己的客户机-服务器网络协议。例如,它可能已使用 RPC 规范语言(例如 ONC RPC)定义了自己的协议。

在 Sun Cluster 环境中,您可以使用 HA-ORACLE 使后端 Oracle 数据库具有高可用性。然后,就可以编写用于启动和停止日程日历守护进程的简单方法。群集管理员使用 Sun Cluster 注册日程日历资源类型。

如果日程日历应用程序必须与 Oracle 数据库在同一节点上运行,则群集管理员必须在与 HA-ORACLE 资源所在的同一资源组中配置日程日历资源并使其依赖于 HA-ORACLE 资源。使用 scrgadm 中的 Resource_dependencies 属性标记指定该依赖性。

如果 HA-ORACLE 资源可以在与日程日历资源不同的节点上运行,则群集管理员将它们配置到两个不同的资源组中。群集管理员可能会在 Oracle 资源组中配置日历资源组的资源组依赖性。但是,资源组依赖性仅当两个资源组同时在同一节点上启动或停止时才有效。因此,日历数据服务守护进程在启动后可能进行轮询,以等待 Oracle 数据库成为可用的数据库。在此情况下,日历资源类型的 Start 方法通常返回成功消息。但是,如果 Start 方法无限期地处于阻塞状态,它将使其资源组处于繁忙状态。此繁忙状态将阻止对该组进行任何进一步的状态更改(例如编辑、故障转移或切换)。但是,如果日历资源的 Start 方法超时或以非零状态退出,则其超时或非零退出状态可能会导致该资源组在两个或多个节点之间切换,而 Oracle 数据库仍不可用。