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。无论部分探测是成功还是失败,均使用介于 0 与 SCDS_PROBE_COMPLETE_FAILURE 之间的值。
DSDL 将 SCDS_PROBE_IMMEDIATE_FAILOVER 定义为 201。除非 Failover_mode 属性设置为 RESTART_ONLY 或 LOG_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_START 或 POSTNET_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。
支持以下参数:
从 scds_initialize(3HA) 返回的句柄。
您指定的介于 0 与 SCDS_PROBE_COMPLETE_FAILURE 或 SCDS_PROBE_IMMEDIATE_FAILOVER 之间的表示数据服务状态的一个数字。
值 0 表明最近的数据服务检查已成功。
值 SCDS_PROBE_COMPLETE_FAILURE 意味着完全故障,表明服务已完全出现故障。您还可以提供介于 0 与 SCDS_PROBE_COMPLETE_FAILURE 之间的某个值,表明服务只是部分故障。
值 SCDS_PROBE_IMMEDIATE_FAILURE 将触发资源组的故障转移而不执行任何重新启动,除非 Failover_mode 属性设置为 RESTART_ONLY 或 LOG_ONLY。有关 Failover_mode 属性的更多信息,请参见 r_properties(5)
完成数据服务检查所需的时间(毫秒)。保留该值供将来使用。
scds_fm_action() 函数返回以下值:
该函数成功。
该函数失败。
未采取任何操作或者已成功执行重新启动。
尝试执行故障转移但没有成功。
系统内存不足。
头文件
库
有关下列属性的说明,请参见 attributes(5):
|
scds_fm_sleep(3HA)、scds_initialize(3HA)、scha_calls(3HA)、scha_control(3HA)、scds_fm_print_probes(3HA)、scha_resource_setstatus(3HA)、attributes(5)