Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


15.3.4 HAモニタの環境設定

実行系および待機系でHAモニタの環境設定をしてください。HAモニタの環境設定方法については,マニュアル「HAモニタ Linux(R)(x86)編」の「システムの構築」を参照してください。

ここでは,HAモニタの環境設定をする際に留意することについて説明します。

〈この項の構成〉

(1) sysdefファイルの指定

HAモニタのsysdefファイルに指定するオペランドのうち,次のオペランドについては,指定値が決まっています。

上記のオペランドの詳細については,マニュアル「HAモニタ Linux(R)(x86)編」の「HAモニタの環境設定(sysdef)」を参照してください。

(2) serversファイルの指定

HAモニタのserversファイルに指定するオペランドのうち,次のオペランドについては,指定値が決まっています。

上記のオペランドの詳細については,マニュアル「HAモニタ Linux(R)(x86)編」の「サーバ対応の環境設定(servers)」を参照してください。

(3) コマンド用環境変数定義およびコマンドの作成

HAモニタとの連携のために,コマンド用環境変数定義と次のコマンドを作成してください。

$ADBDIR/sample/scripts下に,コマンド用環境変数定義,および上記のコマンドのひな形があります。ひな形を基にコマンドを作成してください。

(a) コマンド用環境変数定義の作成

$ADBDIR/sample/scripts/coldstandby.envがひな形です。このひな形をコピーして,次の個所を修正してください。

  • 環境変数ADBMGR

    HADB管理者(OSユーザ)のユーザ名を指定してください。

(b) サーバの起動コマンドの作成

$ADBDIR/sample/scripts/coldstandby_act.shがひな形です。このひな形をコピーして,次の個所を修正してください。

  • source文

    source文の引数に,コマンド用環境変数定義を指定したファイルの絶対パスを指定してください。

(c) サーバの停止コマンドの作成

$ADBDIR/sample/scripts/coldstandby_term.shがひな形です。このひな形をコピーして,次の個所を修正してください。

  • source文

    source文の引数に,コマンド用環境変数定義を指定したファイルの絶対パスを指定してください。

(d) サーバの監視コマンドの作成

$ADBDIR/sample/scripts/coldstandby_patrol.shがひな形です。このひな形をコピーして,次の個所を修正してください。

  • source文

    source文の引数に,コマンド用環境変数定義を指定したファイルの絶対パスを指定してください。

(4) 各ファイルの指定例

次のファイルの指定例を示します。

ここで説明する指定例は,「図15-1 コールドスタンバイ構成でのシステム構成例」のシステム構成を前提としています。

(a) sysdefファイルの指定例

■サーバマシンhadb01(実行系)のsysdefファイルの指定例
environment  name hadb01,
             address 1,                 ...1
             patrol 60,
             lan path11,                ...2
             lanport HAmon1;            ...3
function     pathpatrol 240,
             connect_retry 5:200,
             monbegin_restart nouse,
             termcmd_at_abort nouse;

[説明]

  1. この系のリセット優先度を指定します。この系は,実行系のため,リセット優先度をいちばん高くする必要があるので1を指定します。

  2. HAモニタの監視パスとして使用するLANのホスト名を指定します。IPアドレス176.16.0.11に対応するホスト名path11を指定します。

  3. HAモニタの監視パスとして使用するLANのサービス名を指定します。サービスはポート番号7777を使用します。

■サーバマシンhadb02(待機系)のsysdefファイルの指定例
environment  name hadb02,
             address 2,                 ...1
             patrol 60,
             lan path21,                ...2
             lanport HAmon1;            ...3
function     pathpatrol 240,
             connect_retry 5:200,
             monbegin_restart nouse,
             termcmd_at_abort nouse;

[説明]

  1. この系のリセット優先度を指定します。この系は,待機系のため,2を指定します。

  2. HAモニタの監視パスとして使用するLANのホスト名を指定します。IPアドレス176.16.0.12に対応するホスト名path21を指定します。

  3. HAモニタの監視パスとして使用するLANのサービス名を指定します。サービスはポート番号7777を使用します。

(b) serversファイルの指定例

ここで説明している例は,ファイルシステムにext4を使用していることを前提としています。ext4以外のファイルシステムを使用する場合は,OSのmountコマンドのオプションがここで説明している例とは異なります。

■サーバマシンhadb01(実行系)のserversファイルの指定例
server name  /home/adbmanager/server,                   ...1
       alias HADB,
       acttype monitor,
       disk /dev/vg_hadb01:/dev/vg_hadb02,              ...2
       lan_updown use,
       fs_name /dev/vg_hadb01/hadb_db:/dev/vg_hadb02/hadb_workarea,     ...3
       fs_mount_dir /home/adbmanager/db:/mnt/workarea,                  ...4
       fs_mount_opt "-t ext4 -o defaults,noatime,_netdev":"-t ext4 -o defaults,noatime,_netdev",  ...5
       actcommand "/home/adbmanager/scripts/coldstandby_act.sh",        ...6
       termcommand "/home/adbmanager/scripts/coldstandby_term.sh",      ...7
       patrolcommand "/home/adbmanager/scripts/coldstandby_patrol.sh",  ...8
       servexec_retry 2,
       waitserv_exec yes,
       ip_neck use,
       uoc_neck nouse,
       vg_neck use:nouse,                               ...9
       fs_neck use:nouse,                               ...10
       initial online;                                  ...11

[説明]

  1. サーバディレクトリの絶対パスを指定します。

  2. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムがあるVGの絶対パスを指定します。

  3. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムを構築したLVの絶対パスを指定します。

  4. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムをマウントするマウントポイントの絶対パスを指定します。

  5. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムをマウントするためのmountコマンドのオプションを指定します。

  6. コールドスタンバイ構成で使用するサーバの起動コマンドの絶対パスを指定します。

  7. コールドスタンバイ構成で使用するサーバの停止コマンドの絶対パスを指定します。

  8. コールドスタンバイ構成で使用するサーバの監視コマンドの絶対パスを指定します。

  9. DBディレクトリがあるVGにはuse,作業用一時ファイルがあるVGにはnouseを指定します。

  10. DBディレクトリがあるファイルシステムにはuse,作業用一時ファイルがあるファイルシステムにはnouseを指定します。

  11. 実行系とするため,onlineを指定します。

■サーバマシンhadb02(待機系)のserversファイルの指定例
server name  /home/adbmanager/server,                   ...1
       alias HADB,
       acttype monitor,
       disk /dev/vg_hadb01:/dev/vg_hadb02,              ...2
       lan_updown use,
       fs_name /dev/vg_hadb01/hadb_db:/dev/vg_hadb02/hadb_workarea,     ...3
       fs_mount_dir /home/adbmanager/db:/mnt/workarea,                  ...4
       fs_mount_opt "-t ext4 -o defaults,noatime,_netdev":"-t ext4 -o defaults,noatime,_netdev",  ...5
       actcommand "/home/adbmanager/scripts/coldstandby_act.sh",        ...6
       termcommand "/home/adbmanager/scripts/coldstandby_term.sh",      ...7
       patrolcommand "/home/adbmanager/scripts/coldstandby_patrol.sh",  ...8
       servexec_retry 2,
       waitserv_exec yes,
       ip_neck use,
       uoc_neck nouse,
       vg_neck use:nouse,                               ...9
       fs_neck use:nouse,                               ...10
       initial standby;                                 ...11

[説明]

  1. サーバディレクトリの絶対パスを指定します。

  2. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムがあるVGの絶対パスを指定します。

  3. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムを構築したLVの絶対パスを指定します。

  4. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムをマウントするマウントポイントの絶対パスを指定します。

  5. DBディレクトリ,および作業用一時ファイルを格納するディレクトリのファイルシステムをマウントするためのmountコマンドのオプションを指定します。

  6. コールドスタンバイ構成で使用するサーバの起動コマンドの絶対パスを指定します。

  7. コールドスタンバイ構成で使用するサーバの停止コマンドの絶対パスを指定します。

  8. コールドスタンバイ構成で使用するサーバの監視コマンドの絶対パスを指定します。

  9. DBディレクトリがあるVGにはuse,作業用一時ファイルがあるVGにはnouseを指定します。

  10. DBディレクトリがあるファイルシステムにはuse,作業用一時ファイルがあるファイルシステムにはnouseを指定します。

  11. 待機系とするため,standbyを指定します。

(c) コマンド用環境変数定義ファイルの指定例

この例では,コマンド用環境変数定義を/home/adbmanager/scripts/coldstandby.envに格納しています。指定内容は,実行系と待機系で同じにしてください。

■コマンド用環境変数定義ファイルの指定例
# The environment variables for HADB
export ADBMGR=adbmanager                     ...1
export ADBDIR=/home/adbmanager/server        ...2
export ADBINFODIR=/home/adbmanager/adbinfo   ...3

[説明]

  1. HADB管理者(OSユーザ)のユーザ名adbmanagerを指定します。

  2. サーバディレクトリの絶対パスを指定します。

  3. トラブルシュート情報ファイルを格納するディレクトリの絶対パスを指定します。

(d) サーバの起動コマンドファイルの指定例

この例では,サーバの起動コマンドを/home/adbmanager/scripts/coldstandby_act.shに格納しています。指定内容は,実行系と待機系で同じにしてください。

■サーバの起動コマンドファイルの指定例
# Sample of the actcommand for HADB
 
SU=/bin/su
ECHO=/bin/echo
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/coldstandby.env       ...1
 
# Execute adbstart command
$SU - $ADBMGR -c "$ECHO y|$ADBDIR/bin/adbstart"
 
# always 0 return
exit 0

[説明]

  1. source文には,コマンド用環境変数定義ファイルの絶対パス/home/adbmanager/scripts/coldstandby.envを指定します。

(e) サーバの停止コマンドファイルの指定例

この例では,サーバの停止コマンドを/home/adbmanager/scripts/coldstandby_term.shに格納しています。指定内容は,実行系と待機系で同じにしてください。

■サーバの停止コマンドファイルの指定例
# Sample of the termcommand for HADB
 
STS_ACTIVE="ACTIVE"
STS_STOP="STOP"
STS_STARTING="STARTING"
STS_STOPPING="STOPPING"
STS_ABORT="ABORT"
STS_QUIESCE="QUIESCE"
STS_OFFLINE="OFFLINE"
STS_CHGMODE="CHGMODE"
STS_STOPWAIT="STOPWAIT"
STS_COREDUMP="COREDUMP"
STS_FORCE="FORCE"
STS_MAINTNCE="MAINTNCE"
 
AWK=/bin/awk
ECHO=/bin/echo
PS=/bin/ps
KILL=/bin/kill
GREP=/bin/grep
SU=/bin/su
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/coldstandby.env      ...1
 
# Execute adbstop command 
GET_STS=`$SU - $ADBMGR -c "$ADBDIR/bin/adbls -d srv 2>/dev/null" | $GREP -v SVID | $AWK '{ if ($1 ~ /[0-9]+/) { print $2 } else { print $1 } }'`
 
case "$1" in
"-e" )
        # Normal stop operations of active system.
        # (when the monend command is executed.)
        if [ "$GET_STS" = "$STS_ACTIVE"   -o "$GET_STS" = "$STS_STARTING" -o \
             "$GET_STS" = "$STS_STOPPING" -o "$GET_STS" = "$STS_QUIESCE"  -o \
             "$GET_STS" = "$STS_OFFLINE"  -o "$GET_STS" = "$STS_CHGMODE"  -o \
             "$GET_STS" = "$STS_STOPWAIT" -o "$GET_STS" = "$STS_MAINTNCE" ]
        then
            $SU - $ADBMGR -c "$ECHO y|$ADBDIR/bin/adbstop --force"
            if [ $? -ne 0 -a $? -ne 4 ]
            then
                ADB_ID=`$SU - $ADBMGR -c "$PS x" | $GREP $ADBDIR/bin/adbsrvd | $GREP -v $GREP | $AWK '{print $1}'`
                if [ "$ADB_ID" != "" ]
                then
                    $SU - $ADBMGR -c "$KILL $ADB_ID"
                fi
            fi
        fi
 
        ;;
"-w" )
        # Plan stop operations of active system.
        # (when the monswap command is executed.)
        if [ "$GET_STS" = "$STS_ACTIVE"   -o "$GET_STS" = "$STS_STARTING" -o \
             "$GET_STS" = "$STS_STOPPING" -o "$GET_STS" = "$STS_QUIESCE"  -o \
             "$GET_STS" = "$STS_OFFLINE"  -o "$GET_STS" = "$STS_CHGMODE"  -o \
             "$GET_STS" = "$STS_STOPWAIT" -o "$GET_STS" = "$STS_MAINTNCE" ]
        then
            $SU - $ADBMGR -c "$ECHO y|$ADBDIR/bin/adbstop --force"
            if [ $? -ne 0 -a $? -ne 4 ]
            then
                ADB_ID=`$SU - $ADBMGR -c "$PS x" | $GREP $ADBDIR/bin/adbsrvd | $GREP -v $GREP | $AWK '{print $1}'`
                if [ "$ADB_ID" != "" ]
                then
                    $SU - $ADBMGR -c "$KILL $ADB_ID"
                fi
            fi
        fi
 
        ;;
"-c" )
        # Retry operations of active system.
        # (Before the act_command is resterted.)
            $SU - $ADBMGR -c "adbinfoget -l -o $ADBINFODIR"
 
        ;;
esac
 
# stop HADB
if [ "$GET_STS" = "$STS_STARTING" ]
then
  ADB_ID=`$SU - $ADBMGR -c "$PS x" | $GREP $ADBDIR/bin/adbsrvd | $GREP -v $GREP | $AWK '{print $1}'`
  $SU - $ADBMGR -c "$KILL $ADB_ID"
  
  exit 0
fi
 
# Wait for end of HADB
while [ "$GET_STS" = "$STS_ACTIVE"   -o "$GET_STS" = "$STS_STARTING" -o \
        "$GET_STS" = "$STS_STOPPING" -o "$GET_STS" = "$STS_QUIESCE"  -o \
        "$GET_STS" = "$STS_OFFLINE"  -o "$GET_STS" = "$STS_CHGMODE"  -o \
        "$GET_STS" = "$STS_STOPWAIT" -o "$GET_STS" = "$STS_COREDUMP" -o \
        "$GET_STS" = "$STS_MAINTNCE" ]
do
    GET_STS=`$SU - $ADBMGR -c "$ADBDIR/bin/adbls -d srv 2>/dev/null" | $GREP -v SVID | $AWK '{ if ($1 ~ /[0-9]+/) { print $2 } else { print $1 } }'`
    sleep 1
done
 
exit 0

[説明]

  1. source文には,コマンド用環境変数定義ファイルの絶対パス/home/adbmanager/scripts/coldstandby.envを指定します。

(f) サーバの監視コマンドファイルの指定例

この例では,サーバの監視コマンドを/home/adbmanager/scripts/coldstandby_patrol.shに格納しています。指定内容は,実行系と待機系で同じにしてください。

■サーバの監視コマンドファイルの指定例
#!/bin/sh
 
# Sample of the patrolcommand for HADB
 
AWK=/bin/awk
GREP=/bin/grep
PS=/bin/ps
PGREP=/usr/bin/pgrep
PKILL=/usr/bin/pkill
SU=/bin/su
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/coldstandby.env    ...1
 
# Get adbsrvd process id
CHKPID=`$SU - $ADBMGR -c "$PS x" | $GREP $ADBDIR/bin/adbsrvd | $GREP -v $GREP | $AWK '{print $1}'`
if [ "$CHKPID" = "" ]
then
  exit 0
fi
 
# Execute adbmonitor command for active system
$SU - $ADBMGR -c "$ADBDIR/bin/adbmonitor -n" &
PID=$!
 
# Trap SIGTERM and terminate adbmonitor
trap "$PKILL -P $PID" 15
 
## Wait process terminated
CPID=""
CHKPID=`$PS aux | $AWK -v PID=$PID '{ if ($2 == PID) { print $2 } }'`
while [ "$CHKPID" != "" ]
do
 
  ## Get adbmonitor process id
  if [ "$CPID" = "" ]
  then
    CPID=`$PGREP -P $PID`
  fi
  
  ## Wait
  if [ "$CPID" != "" ]
  then
    CHKCPID=`$PS aux | $AWK -v CPID=$CPID '{ if ($2 == CPID) { print $2 } }'`
    while [ "$CHKCPID" != "" ]
    do
      sleep 1
      CHKCPID=`$PS aux | $AWK -v CPID=$CPID '{ if ($2 == CPID) { print $2 } }'`
    done
  fi
  
  sleep 1
  CHKPID=`$PS aux | $AWK -v PID=$PID '{ if ($2 == PID) { print $2 } }'`
done
 
exit 0

[説明]

  1. source文には,コマンド用環境変数定義ファイルの絶対パス/home/adbmanager/scripts/coldstandby.envを指定します。

(5) HAモニタの起動設定

OSの起動時に,自動的にHAモニタが起動するように設定してください。設定方法については,マニュアル「HAモニタ Linux(R)(x86)編」の「システムの起動からサーバの起動までを自動化する」を参照してください。