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

Start 方法

RGM 将对所选群集节点调用资源类型实现的 Start 回调方法,以启动该资源。通过命令行传送资源组名称、资源名称和资源类型名称。Start 方法应执行在群集节点上启动数据服务资源时所需的操作。这些操作通常涉及检索资源特性、定位应用程序特定的可执行文件和/或配置文件以及使用相应的命令行参数启动该应用程序。

使用 DSDL,资源配置已经由 scds_initialize() 实用程序检索。应用程序的启动操作可以包含在函数 svc_start() 中。可以调用另一个函数 svc_wait() 来检验是否确实启动了应用程序。Start 方法的简化代码为:


int
main(int argc, char *argv[])
{
   scds_handle_t handle;

   if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) {
   return (1);   /* Initialization Error */
   }
   if (svc_validate(handle) != 0) {
   return (1);   /* Invalid settings */
   }
   if (svc_start(handle) != 0) {
   return (1);   /* Start failed */
   }
   return (svc_wait(handle));
}

该启动方法实现调用 svc_validate() 来验证资源配置。如果失败,可能是因为资源配置和应用程序配置不匹配,也可能是因为当前与系统相关的这个群集节点上存在问题。例如,当前此群集节点上可能没有提供该资源所需的全局文件系统。在这种情况下,在此群集节点上尝试启动该资源是无用的,最好是让 RGM 在其他节点上启动该资源。请注意,无论如何,对 svc_validate() 的上述假设要足够保守(以便它仅对群集节点上该应用程序绝对需要的资源进行检查),否则该资源在所有群集节点上的启动都将失败,从而会处于 START_FAILED 状态。有关对此状态的说明,请参见 scswitch(1M)Sun Cluster 数据服务规划和管理指南(适用于 Solaris OS)

如果资源在节点上成功启动,则 svc_start() 函数必须返回 0。如果启动函数遇到了问题,则它必须返回一个非零值。此函数失败后,RGM 将尝试在其他群集节点上启动该资源。

为了尽可能充分地利用 DSDL,svc_start() 函数可以使用 scds_pmf_start() 实用程序在进程管理工具 (PMF) 控制之下启动该应用程序。此实用程序还将利用 PMF 的失败回调操作功能(请参见 pmfadm( 1M) 中的 -a 操作标志)来实现进程失败检测。