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 操作标志)来实现进程失败检测。