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) を参照してください
その後、scds_fm_action() を呼び出すことにより、probe_status 入力パラメータの値とリソースの Retry_interval プロパティーによって定義された時間間隔が足し合わされ、障害履歴が計算されます。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 メソッドの失敗により再起動の試行に失敗した場合、scha_control() が GIVEOVER オプションで呼び出され、リソースグループが別のノードにフェイルオーバーされます。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)