Oracle® Solaris Cluster 参考手册

退出打印视图

更新时间: 2014 年 7 月,E51743-01
 
 

scds_fm_action (3HA)

名称

scds_fm_action - 探测完成后采取操作函数

用法概要

cc [flags…] –I /usr/cluster/include file –L /usr/cluster/lib 
  –l dsdev#include <rgm/libdsdev.h> scha_err_t 
  scds_fm_action(scds_handle_t handle, int probe_status, 
  long elapsed_milliseconds);

描述

scds_fm_action() 函数结合使用数据服务的 probe_status 和过去的故障历史记录,来采取以下操作之一:

  • 重新启动应用程序。

  • 故障转移资源组。

  • 不执行任何操作。

使用输入 probe_status 参数的值指明故障的严重级别。例如,您可能会将连接到应用程序过程中出现的故障视为完全故障,而将断开连接过程中出现的故障视为部分故障。对于后一种情况,您需要为 probe_status 指定一个介于 0 到 SCDS_PROBE_COMPLETE_FAILURE 之间的值。

DSDL 将 SCDS_PROBE_COMPLETE_FAILURE 定义为 100。无论部分探测是成功还是失败,均使用介于 0SCDS_PROBE_COMPLETE_FAILURE 之间的值。

DSDL 将 SCDS_PROBE_IMMEDIATE_FAILOVER 定义为 201。除非 Failover_mode 属性设置为 RESTART_ONLYLOG_ONLY,否则,此探测状态将触发资源组的即时故障转移。要强制实施即时故障转移而不首先尝试重新启动,请使用特殊的 SCDS_PROBE_IMMEDIATE_FAILOVER 值。有关 Failover_mode 属性的更多信息,请参见 r_properties(5)

通过将资源的 Retry_interval 属性定义的时间间隔中的 probe_status 输入参数的值相加,对 scds_fm_action() 的连续调用可以计算故障历史记录。任何早于 Retry_interval 的故障历史记录都会从内存中清除,并且做出重新启动或故障转移决策时不再使用这些记录。

scds_fm_action() 函数使用以下算法选择要采取的操作:

重新启动

如果累积的故障历史记录达到 SCDS_PROBE_COMPLETE_FAILURE,则 scds_fm_action() 会通过先调用资源的 STOP 方法然后调用 START 方法来重新启动资源。它会忽略为资源类型定义的任何 PRENET_STARTPOSTNET_STOP 方法。

除非已设置资源,否则将通过调用 scha_resource_setstatus 将该资源的状态设置为 SCHA_RSSTATUS_DEGRADED ()

如果尝试重新启动操作因资源的 START STOP 方法发生故障而失败,则会随 GIVEOVER 选项一起调用 scha_control() 以将资源组故障转移到其他节点。如果 scha_control() 调用成功,则资源组将故障转移到其他群集节点,对 scds_fm_action() 的调用从不返回。

重新启动成功时,会清除故障历史记录。仅当该故障历史记录再次累积到 SCDS_PROBE_COMPLETE_FAILURE 时,才会再次尝试重新启动。

故障转移

当对 scds_fm_action() 的连续调用尝试执行的重新启动次数达到为资源定义的 Retry_count 值时,会尝试通过一起调用 scha_control()GIVEOVER 选项来执行故障转移。

除非已设置资源,否则将通过调用 scha_resource_setstatus 将该资源的状态设置为 SCHA_RSSTATUS_FAULTED ()

如果 scha_control() 调用失败,则 scds_fm_action() 维护的整个故障历史记录都会被清除。

如果 scha_control() 调用成功,则资源组将故障转移到其他群集节点,对 scds_fm_action() 的调用从不返回。

通过将 probe_status 值指定为 SCDS_PROBE_IMMEDIATE_FAILOVER,探测可以触发即时故障转移尝试而不执行任何重新启动。

无操作

如果累积的故障历史记录维持在 SCDS_PROBE_COMPLETE_FAILURE 以下,则无须采取任何操作。此外,如果 probe_status 的值为 0,则表明无论故障历史记录如何,都将成功执行服务检查并且不采取任何操作。

除非已设置资源,否则将通过调用 scha_resource_setstatus() 将该资源的状态设置为 SCHA_RSSTATUS_OK

参数

支持以下参数:

handle

scds_initialize(3HA) 返回的句柄。

probe_status

您指定的介于 0 与 SCDS_PROBE_COMPLETE_FAILURESCDS_PROBE_IMMEDIATE_FAILOVER 之间的表示数据服务状态的一个数字。

  • 0 表明最近的数据服务检查已成功。

  • SCDS_PROBE_COMPLETE_FAILURE 意味着完全故障,表明服务已完全出现故障。您还可以提供介于 0 与 SCDS_PROBE_COMPLETE_FAILURE 之间的某个值,表明服务只是部分故障。

  • SCDS_PROBE_IMMEDIATE_FAILURE 将触发资源组的故障转移而不执行任何重新启动,除非 Failover_mode 属性设置为 RESTART_ONLYLOG_ONLY。有关 Failover_mode 属性的更多信息,请参见 r_properties(5)

elapsed_milliseconds

完成数据服务检查所需的时间(毫秒)。保留该值供将来使用。

返回值

scds_fm_action() 函数返回以下值:

0

该函数成功。

非零值

该函数失败。

错误

SCHA_ERR_NOERR

未采取任何操作或者已成功执行重新启动。

SCHA_ERR_FAIL

尝试执行故障转移但没有成功。

SCHA_ERR_NOMEM

系统内存不足。

文件

/usr/cluster/include/rgm/libdsdev.h

头文件

/usr/cluster/lib/libdsdev.so

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
ha-cluster/developer/api
接口稳定性
Evolving(发展中)

另请参见

scds_fm_sleep(3HA)scds_initialize(3HA)scha_calls(3HA)scha_control(3HA)scds_fm_print_probes(3HA)scha_resource_setstatus(3HA)attributes(5)