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

RMAPI 回调方法

回调方法是为实现资源类型由 API 提供的主要元素。当群集成员资格发生更改(例如节点引导或崩溃)时,回调方法使 RGM 可以控制群集中的资源。


注 –

回调方法是由具有超级用户权限或具有等效角色权限的 RGM 执行的,因为客户机程序控制了群集系统中的 HA 服务。安装和管理这些具有限制性文件拥有权和权限的方法。具体来讲,就是要赋予这些方法一个特权拥有者(例如 binroot),并使这些方法不可写。


此部分介绍了回调方法参数和退出代码。介绍了以下几种类别的回调方法:


注 –

此部分简要介绍了回调方法,包括何时运行方法和对资源的预期影响。但 rt_callbacks(1HA) 手册页才是回调方法的权威性参考。


可以提供给回调方法的参数

RGM 将运行回调方法,如下所示:

method -R resource-name -T type-name -G group-name

其中 method 是注册为 StartStop 或其他回调方法的程序的路径名。资源类型的回调方法在其注册文件中进行声明。

所有回调方法参数均以带标志的值的形式进行传递,如下所示:

使用变量和访问函数来检索关于资源的信息。

Validate 方法与其他参数(包括对其调用该方法的资源和资源组的属性值)一起调用。

scha_calls(3HA) 手册页包含更多信息。

回调方法退出代码

所有回调方法具有相同退出代码。定义这些退出代码是为了指定方法调用对资源状态的影响。scha_calls(3HA) 手册页对这些退出代码进行了详细介绍。退出代码的两大类别为:

RGM 还可以处理在执行回调方法时出现的异常失败,例如超时和核心转储。

方法实现必须使用每个节点上的 syslog() 来输出失败信息。虽然写入到 stdoutstderr 的输出当前显示在本地节点的控制台上,但这并不保证会将该输出传送给用户。

控制和初始化回调方法

主要的控制和初始化回调方法用于启动和停止资源。其它方法用来执行对资源的初始化和终止代码。

Start

当包含资源的资源组在群集节点上联机后,RGM 将在该节点上运行此方法。此方法激活该节点上的资源。

Start 方法激活的资源启动并在本地节点上可用之前,不应退出 Start 方法。因此,在退出之前,Start 方法应轮询该资源,以确定该资源是否已启动。另外,应为此方法设置足够长的超时值。例如,诸如数据库守护进程之类的特定资源需要较长的时间才能启动,因而要求方法有较长的超时值。

RGM 对 Start 方法失败的响应方式取决于 Failover_mode 属性的设置。

资源类型注册 (RTR) 文件中的 Start_timeout 属性用于为资源的 Start 方法设置超时值。

Stop

当包含资源的资源组在群集节点上脱机后,RGM 将在该节点上运行此必需方法。如果该资源处于激活状态,则此方法可取消激活该资源。

Stop 方法控制的资源完全停止该资源在本地节点上的所有活动并关闭所有文件描述符之前,不应退出 Stop 方法。否则,由于 RGM 假定资源已停止,而实际上该资源仍处于活动状态,可能会导致损坏数据。避免损坏数据的最安全的方法是终止与资源相关的本地节点上的所有进程。

在退出之前,Stop 方法应该轮询该资源,以确定该资源是否停止。另外,应为此方法设置足够长的超时值。例如,诸如数据库守护进程之类的特定资源需要较长的时间才能停止,因而要求方法有较长的超时值。

RGM 响应 Stop 方法失败的方法取决于 Failover_mode 属性的设置。请参见资源属性

RTR 文件中的 Stop_timeout 属性用于为资源的 Stop 方法设置超时值。

Init

当资源成为受管理的资源后,RGM 将运行此可选方法来执行对资源的一次性初始化。当 RGM 的资源组从不受管理状态切换为受管理状态时,或者当在受管理资源组中创建资源时,RGM 将运行此方法。对 Init_nodes 资源属性所标识的节点调用此方法。

Fini

当资源成为不受管理的资源之后,RGM 将运行此可选方法以清理该资源。当 RGM 的资源组切换为不受管理的状态时,或从受管理的资源组中删除资源时,RGM 将运行此方法。对 Init_nodes 资源属性所标识的节点调用此方法。

Boot

当包含资源的资源组已经受 RGM 管理之后,RGM 将运行此可选方法(类似于 Init)以初始化加入了群集的节点上的资源。RGM 将在由 Init_nodes 资源属性标识的节点上运行此方法。由于引导或重新引导节点而使节点加入或重新加入群集时,将调用 Boot 方法。


注 –

InitFiniBoot 方法的失败将导致 syslog() 函数生成错误消息。但是,RGM 对资源的管理不受其他方面的影响。


管理支持方法

对资源进行的管理操作包括设置和更改资源属性。ValidateUpdate 回调方法使资源类型实现可以执行这些管理操作。

Validate

创建资源时,以及群集管理员更新资源或其包含资源组的属性时,RGM 都将调用此可选方法。对资源类型的 Init_nodes 属性所标识的群集节点集调用此方法。Validate 是在应用创建或更新之前调用的。来自任何节点上的方法的失败退出代码都会导致取消创建或更新操作。

仅当群集管理员更改资源或资源组属性时才会调用 Validate,而在 RGM 设置属性时,或者监视器设置 StatusStatus_msg 资源属性时不调用该方法。

Update

RGM 将运行此可选方法以通知正在运行的资源,通知将说明属性已被更改。设置资源或资源组的属性的管理操作成功后,RGM 将运行 Update。对资源处于联机状态的节点调用此方法。方法将使用 API 访问函数以读取可能影响活动资源的属性值并相应调整正在运行的资源。


注 –

Update 方法的失败将导致 syslog() 函数生成错误消息。但是,RGM 对资源的管理不受其他方面的影响。


与网络相关的回调方法

使用网络地址资源的服务可能需要以与网络地址配置相关的特定顺序执行启动或停止步骤。以下可选回调方法 Prenet_startPostnet_stop 用于启用资源类型实现以在配置或取消配置相关网络地址之前和之后执行启动和关闭操作。

Prenet_start

在配置同一资源组中的网络地址之前,调用此可选方法以执行特殊的启动操作。

Postnet_stop

将同一资源组中的网络地址配置为关闭之后,调用此可选方法以执行特殊的关闭操作。

监视器控制回调方法

资源类型实现可以可选包括用于监视资源性能、报告资源的状态或在资源出现故障时采取措施的程序。Monitor_startMonitor_stopMonitor_check 方法支持在资源类型实现中实现资源监视器。

Monitor_start

资源启动后,将调用此可选方法来启动该资源的监视器。

Monitor_stop

在停止资源前,调用此可选方法停止资源的监视器。

Monitor_check

在将资源组重定向到某个节点之前,将调用此可选方法以评定该节点的可靠性。必须实现 Monitor_check 方法,这样该方法才不会与同时运行的其他方法发生冲突。