Sun Cluster 3.0 12/01 データサービス開発ガイド

障害モニターデーモンの設計

DSDL を使用したリソースタイプ実装の障害モニターデーモンには、通常、次の役割があります。

DSDL ユーティリティーの設計では、障害モニターデーモンの主要ループは次のようになっています。

DSDL を使って実装された障害モニターでは、

ほとんどの場合、アプリケーション固有の状態検査アクションは、スタンドアロンの別個のユーティリティー (たとえば、svc_probe()) として実装してから、この汎用的なメインループに統合できます。


for (;;) {
	 	/ * 正常な検証と検証の間の thorough_probe_interval 
		*  だけスリープする。*/
		(void) scds_fm_sleep(scds_handle,
		scds_get_rs_thorough_probe_interval(scds_handle));
		/* 使用するすべての ipaddress を検証する。次の各要素を繰り返し検証する。
		* 1. 使用するすべてのネットリソース
		* 2. 特定のリソースのすべての ipaddresses
		* 検証する ipaddress ごとに
		* 障害履歴を計算する。 */
		probe_result = 0;
/* すべてのリソースを繰り返し調べて、
* svc_probe()  の呼び出しに使用する各 IP アドレスを取得する。 */
for (ip = 0; ip < netaddr->num_netaddrs; ip++) {	
		/* 状態を検証する必要があるホスト名とポート	
		* を取得する。
		*/
		hostname = netaddr->netaddrs[ip].hostname;
		port = netaddr->netaddrs[ip].port_proto.port;
		/*	
		* HA-XFS は 1 つのポートしかサポートしないため、
		* ポート配列の最初のエントリから	
		* ポート値を取得する。
		*/
		ht1 = gethrtime();   /* 検証開始時刻を保存する。*/
		probe_result = svc_probe(scds_handle, 
		               hostname, port, timeout);
		/*	
		* サービス検証履歴を更新し、		
		* 必要に応じてアクションを実行する。
		* 検証終了時刻を保存する。
		*/
		ht2 = gethrtime();
		/* ミリ秒に変換する。 */
		dt = (ulong_t)((ht2 - ht1) / 1e6);
						
		/*		
		* 障害履歴を計算し、
		* 必要に応じてアクションを実行する。
		*/	
		(void) scds_fm_action(scds_handle,
		probe_result, (long)dt);
		}            /* 各ネットリソース */	
		}       /* 検証を続ける。 */