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 数据库仍然不可用。