Hitachi

高信頼化システム監視機能 HAモニタ AIX(R)編


6.9.3 サーバの監視コマンドの作成

サーバの監視コマンドは,プログラムの状態を監視するコマンドです。HAモニタでは,サーバの監視コマンドを作成することによって,サーバ障害時にサーバの再起動や自動系切り替えができます。

ここでは,サーバの監視コマンドが呼び出されるタイミング,およびサーバの監視コマンドの作成方法について説明します。サーバの監視方法の説明については,「3.2.1 モニタモードのサーバの監視(実行サーバの場合)」を参照してください。

〈この項の構成〉

(1) サーバの監視コマンドが呼び出されるタイミング

作成したサーバの監視コマンドは,HAモニタがスーパユーザの権限で実行します。

サーバの監視コマンドは,実行系で実行サーバが起動完了したあとに起動されます。

(2) サーバの監視コマンドの作成方法(サーバ対応の環境設定のptrlcmd_exオペランドで指定する場合)

次に示す項目を満たすように,サーバの監視コマンドを作成してください。

EXITコードごとの処理の流れを次に示します。

EXITコードに0を指定した場合(正常),実行間隔(サーバ対応の環境設定のptrlcmd_ex_interオペランドの指定値)ごとに監視コマンドを起動します。モニタモードのサーバの障害監視(EXITコードに0を指定した場合)を次の図に示します。

図6‒14 モニタモードのサーバの障害監視(EXITコードに0を指定した場合)

[図データ]

EXITコードに1~9を指定した場合(監視失敗,業務エラー,および判断不可),リトライオーバによって,サーバ障害と判断します。実行間隔(サーバ対応の環境設定のptrlcmd_ex_interオペランドの指定値)に1を足した回数分,監視に失敗するとリトライオーバとなります。モニタモードのサーバの障害監視(EXITコードに1~9を指定した場合)を次の図に示します。この図は,サーバ対応の環境設定のptrlcmd_ex_retryオペランドの指定値を2とした場合の例です。

図6‒15 モニタモードのサーバの障害監視(EXITコードに1~9を指定した場合)

[図データ]

EXITコードに10~19,または20~29を指定した場合(障害),監視コマンドを再実行しないで,実行サーバのサーバ障害と判断します。モニタモードのサーバの障害監視(EXITコードに10~19,または20~29を指定した場合)を次の図に示します。

図6‒16 モニタモードのサーバの障害監視(EXITコードに10~19,または20~29を指定した場合)

[図データ]

サーバ対応の環境設定のptrlcmd_ex_tmoutオペランドに指定した時間が経過してもリターンしない場合,業務アプリケーションのスローダウンまたはハングアップとして検知し,実行サーバのサーバ障害と判断します。モニタモードのサーバの障害監視(サーバ対応の環境設定のptrlcmd_ex_tmoutオペランドに指定した時間が経過してもリターンしない場合)を次の図に示します。

図6‒17 モニタモードのサーバの障害監視(サーバ対応の環境設定のptrlcmd_ex_tmoutオペランドに指定した時間が経過してもリターンしない場合)

[図データ]

作成したサーバの監視コマンドを,サーバ対応の環境設定のptrlcmd_exオペランドに指定してください。また,次のサーバ対応の環境設定のオペランドも指定してください。

サーバの監視コマンドによってサーバ障害を検知した場合の,サーバログの確認については,「7.3 サーバログの確認」を参照してください。

サーバの監視コマンドのサンプルファイルを,HAモニタサンプルファイル用ディレクトリの下にpatrol_ex.shというファイル名で格納していますので,必要に応じて利用してください。

#!/bin/sh
#******************************************************************************
#*                                                                            *
#*    AIX HA Monitor                                                          *
#*    This is a sample of the patrol command.                                 *
#*    This is specified in the ptrlcmd_ex operand.                            *
#*    (For monitor mode server)                                               *
#*    Attention: This can not be specified in the patrolcommand operand.      *
#*                                                                            *
#*    All Rights Reserved. Copyright (C) 2017, Hitachi, Ltd.                  *
#*                                                                            *
#******************************************************************************
set -x
# The object program to monitor
PROGRAM=/home/xxxx/yyyy

# The definition of command
PS=/bin/ps
GREP=/bin/grep

# Is the object program to monitor operating ?
EXIST=`$PS -efl | $GREP $PROGRAM | $GREP -v grep`

# When the object program to monitor is not operating,
# the variable EXIST is empty.
if [ "$EXIST" = "" ]
         then
         # This patrol command terminates, because the object program
         # to monitor is not operating.
         exit 10
fi

# Please describe commands and processes that can confirm that applications and tasks are running.
# For example, a command that throws a request to an application and receives a response,
# If it is a database, describe SQL to access the database.
# The end result (EXIT code) is returned according to the command execution result.
# For details, refer to the manual.
#
# ex)
#        Describe the SQL to access the database.
#        if [ "$?" -ne "0" ]
#        then
#                  exit 1
#        fi

exit 0

「EXIST=`$PS -efl | $GREP $PROGRAM | $GREP -v grep`」は,サーバの監視コマンド内でプログラムのプロセスがあるかどうかを確認します。プロセスの確認には,OSのpsコマンドの出力などを使用します。

「Describe the SQL to access the database.」には,アプリケーションや業務が動いていることを確認できるコマンドや処理を記載してください。例えば,アプリケーションに要求を投げて応答をもらうようなコマンドや,データベースであれば,データベースにアクセスするSQLを記載します。コマンドの実行結果によって,終了結果(EXITコード)を返却します。終了結果(EXITコード)については,「表6-8 監視対象の業務の状態に応じて指定できる終了結果(EXITコード)」を参照してください。

(3) サーバの監視コマンドの作成方法(サーバ対応の環境設定のpatrolcommandオペランドで指定する場合)

次に示す項目を満たすように,サーバの監視コマンドを作成してください。

作成したサーバの監視コマンドを,サーバ対応の環境設定のpatrolcommandオペランドに指定してください。

サーバの監視コマンドのサンプルファイルを,HAモニタサンプルファイル用ディレクトリの下にpatrol.shというファイル名で格納していますので,必要に応じて利用してください。

Bシェルによる監視コマンドの作成例を示します。

#!/bin/sh
# The object program to monitor
PROGRAM=/home/xxxx/yyyy
 
# The definition of command
PS=/bin/ps
GREP=/bin/grep
 
# Main loop
while true
do
    # Is the object program to monitor operating ?
    EXIST=`$PS -efl | $GREP $PROGRAM | $GREP -v grep`
 
    # When the object program to monitor is not operating,
    # the variable EXIST is empty.
    if [ "$EXIST" = "" ]
    then
        # This patrol command terminates, because the object program
        # to monitor is not operating.
        exit
    fi
 
    # The monitoring is continued, because the object program
    # to monitor is operating.
    sleep 5
done

前述のコーディング例では,サーバの監視コマンド内でループを持ち,そのループ内でプログラムのプロセスがあるかどうかを確認します。プロセスの確認には,OSのpsコマンドの出力などを使用します。プログラムのプロセスがあればループを継続し,プロセス生存の確認を続行します。