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 Data Services Planning and Administration Guide for Solaris OS》

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

要尽量利用 DSDL,svc_start() 函数可以调用 scds_pmf_start() 实用程序以启动进程监视器工具 (PMF) 下的应用程序。此实用程序还使用 PMF 的故障回调操作功能来检测进程故障。有关更多信息,请参见 pmfadm(1M) 手册页中 -a 操作参数的说明。