Hitachi

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


14.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/multinode.envがひな形です。このひな形をコピーして,次の個所を修正してください。

  • 環境変数ADBMGR

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

  • 環境変数ADBALIAS

    HAモニタのserversファイルのaliasオペランドの指定値を指定してください。

(b) ユーザコマンドの作成

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

  • source文

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

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

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

  • source文

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

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

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

  • source文

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

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

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

  • source文

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

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

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

ここで説明する指定例は,「図14-1 マルチノード機能を使用した場合のシステム構成例」のシステム構成を前提としています。

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

■マスタノードhadb01のsysdefファイルの指定例
environment  name hadb01,
             address 1,           ...1
             patrol 30,           ...2
             lan path11,          ...3
             lanport HAmon1;      ...4
function     pathpatrol 240,
             connect_retry 5:200,
             monbegin_restart nouse,
             multistandby use,
             usrcommand /home/adbmanager/scripts/multinode_user.sh,  ...5
             termcmd_at_abort nouse;

[説明]

  1. このノードのリセット優先度を指定します。このノードは,マスタノードのため,リセット優先度をいちばん高くする必要があるので1を指定します。

  2. patrolオペランドには,30以下の値を指定してください。

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

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

  5. マルチノード機能で使用するユーザコマンドの絶対パスを指定します。

■スレーブノードhadb02のsysdefファイルの指定例
environment  name hadb02,
             address 2,         ...1
             patrol 30,         ...2
             lan path21,        ...3
             lanport HAmon1;    ...4
function     pathpatrol 240,
             connect_retry 5:200,
             monbegin_restart nouse,
             multistandby use,
             usrcommand /home/adbmanager/scripts/multinode_user.sh,  ...5
             termcmd_at_abort nouse;

[説明]

  1. このノードのリセット優先度を指定します。このノードは,マスタノードの次にリセット優先度を高くしたいため,2を指定します。

  2. patrolオペランドには,30以下の値を指定してください。

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

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

  5. マルチノード機能で使用するユーザコマンドの絶対パスを指定します。

■スレーブノードhadb03のsysdefファイルの指定例
environment  name  hadb03,
             address 3,         ...1
             patrol 30,         ...2
             lan path31,        ...3
             lanport HAmon1;    ...4
function     pathpatrol 240,
             connect_retry 5:200,
             monbegin_restart nouse,
             multistandby use,
             usrcommand /home/adbmanager/scripts/multinode_user.sh,  ...5
             term_at_abort  nouse;

[説明]

  1. このノードのリセット優先度を指定します。このノードは,スレーブノードhadb02の次にリセット優先度を高くしたいため,3を指定します。

  2. patrolオペランドには,30以下の値を指定してください。

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

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

  5. マルチノード機能で使用するユーザコマンドの絶対パスを指定します。

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

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

■マスタノードhadb01のserversファイルの指定例
server name  /home/adbmanager/server,  ...1
       alias HADB,
       acttype monitor,
       disk /dev/vg_hadb,              ...2
       lan_updown use,
       fs_name /dev/vg_hadb/sys_hadb,                                   ...3
       fs_mount_dir /home/adbmanager/db/ADBSYS,                         ...4
       fs_mount_opt "-t ext4 -o defaults,noatime,_netdev",              ...5
       actcommand "/home/adbmanager/scripts/multinode_act.sh",          ...6
       termcommand "/home/adbmanager/scripts/multinode_term.sh",        ...7
       patrolcommand "/home/adbmanager/scripts/multinode_patrol.sh",    ...8
       servexec_retry 0,
       waitserv_exec yes,
       ip_neck use,
       uoc_neck nouse,
       vg_neck use,
       fs_neck use,
       initial online;   ...9

[説明]

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

  2. システムディレクトリのファイルシステムがあるVGの絶対パスを指定します。

  3. システムディレクトリのファイルシステムを作成したLVの絶対パスを指定します。

  4. システムディレクトリのファイルシステムをマウントするマウントポイントの絶対パスを指定します。

  5. システムディレクトリのファイルシステムをマウントするためのmountコマンドのオプションを指定します。

  6. マルチノード機能で使用するサーバの起動コマンドの絶対パスを指定します。

  7. マルチノード機能で使用するサーバの停止コマンドの絶対パスを指定します。

  8. マルチノード機能で使用するサーバの監視コマンドの絶対パスを指定します。

  9. マスタノードとするため,onlineを指定します。

■スレーブノードhadb02のserversファイルの指定例
server name /home/adbmanager/server,   ...1
       alias HADB,
       acttype monitor,
       disk /dev/vg_hadb,              ...2
       lan_updown use,
       fs_name /dev/vg_hadb/sys_hadb,                                   ...3
       fs_mount_dir /home/adbmanager/db/ADBSYS,                         ...4
       fs_mount_opt "-t ext4 -o defaults,noatime,_netdev",              ...5
       actcommand "/home/adbmanager/scripts/multinode_act.sh",          ...6
       termcommand "/home/adbmanager/scripts/multinode_term.sh",        ...7
       patrolcommand "/home/adbmanager/scripts/multinode_patrol.sh",    ...8
       servexec_retry 0,
       waitserv_exec yes,
       ip_neck use,
       uoc_neck nouse,
       vg_neck use,
       fs_neck use,
       initial standby,  ...9
       standbypri 1;     ...10

[説明]

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

  2. システムディレクトリのファイルシステムがあるVGの絶対パスを指定します。

  3. システムディレクトリのファイルシステムを作成したLVの絶対パスを指定します。

  4. システムディレクトリのファイルシステムをマウントするマウントポイントの絶対パスを指定します。

  5. システムディレクトリのファイルシステムをマウントするためのmountコマンドのオプションを指定します。

  6. マルチノード機能で使用するサーバの起動コマンドの絶対パスを指定します。

  7. マルチノード機能で使用するサーバの停止コマンドの絶対パスを指定します。

  8. マルチノード機能で使用するサーバの監視コマンドの絶対パスを指定します。

  9. スレーブノードとするため,standbyを指定します。

  10. マスタノードの切り替えが発生した際,新たにマスタノードにするノードの優先順位を指定します。このノードの優先順位をいちばん高くしたいため,1を指定します。

■スレーブノードhadb03のserversファイルの指定例
server name /home/adbmanager/server,   ...1
       alias HADB,
       acttype monitor,
       disk /dev/vg_hadb,              ...2
       lan_updown use,
       fs_name /dev/vg_hadb/sys_hadb,                                   ...3
       fs_mount_dir /home/adbmanager/db/ADBSYS,                         ...4
       fs_mount_opt "-t ext4 -o defaults,noatime,_netdev",              ...5
       actcommand "/home/adbmanager/scripts/multinode_act.sh",          ...6
       termcommand "/home/adbmanager/scripts/multinode_term.sh",        ...7
       patrolcommand "/home/adbmanager/scripts/multinode_patrol.sh",    ...8
       servexec_retry 0,
       waitserv_exec yes,
       ip_neck use,
       uoc_neck nouse,
       vg_neck use,
       fs_neck use,
       initial standby,  ...9
       standbypri 2;     ...10

[説明]

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

  2. システムディレクトリのファイルシステムがあるVGの絶対パスを指定します。

  3. システムディレクトリのファイルシステムを作成したLVの絶対パスを指定します。

  4. システムディレクトリのファイルシステムをマウントするマウントポイントの絶対パスを指定します。

  5. システムディレクトリのファイルシステムをマウントするためのmountコマンドのオプションを指定します。

  6. マルチノード機能で使用するサーバの起動コマンドの絶対パスを指定します。

  7. マルチノード機能で使用するサーバの停止コマンドの絶対パスを指定します。

  8. マルチノード機能で使用するサーバの監視コマンドの絶対パスを指定します。

  9. スレーブノードとするため,standbyを指定します。

  10. マスタノードの切り替えが発生した際,新たにマスタノードにするノードの優先順位を指定します。このノードの優先順位は,ノードhadb02の次にしたいため,2を指定します。

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

この例では,コマンド用環境変数定義を/home/adbmanager/scripts/multinode.envに格納しています。指定内容はすべてのノードで同じにしてください。

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

[説明]

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

  2. HAモニタのserversファイルのaliasオペランドの指定値であるHADBを指定します。

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

(d) ユーザコマンドファイルの指定例

この例では,ユーザコマンドを/home/adbmanager/scripts/multinode_user.shに格納しています。指定内容はすべてのノードで同じにしてください。

■ユーザコマンドファイルの指定例
# Sample of the usrcommand for HADB
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/multinode.env     ...1
 
##################################################################
#  Main
##################################################################
 
KIND_ONLINE="online"
KIND_STANDBY="standby"
SERV_START="-s"
SERV_END="-e"
SERV_PLANEND="-p"
SERV_ABORT="-a"
SERV_ABORT_NS="-o"
SERV_FAULT="-f"
SERV_HOSTDOWN="-h"
SERV_PLANSWAP="-w"
STATUS_START="start"
STATUS_END="end"
STATUS_SBYEND="sbyend"
 
 
patrol_sby_exe()
{
       $ADBDIR/bin/patrol_sby_exe       ...2
}
 
patrol_sby_term()
{
       $ADBDIR/bin/patrol_sby_term      ...3
}
 
stop_sby()
{
       $ADBDIR/bin/stop_sby             ...4
}
 
# Processing of the server
if [ "$2" = "$ADBALIAS" ]
then
       if [ "$4" = "$KIND_ONLINE" ]
       then
                case "$5" in
                "$SERV_START" )
                         ;;
                "$SERV_END" )
                         ;;
                "$SERV_PLANEND" )
                         ;;
                "$SERV_ABORT" )
                         ;;
                "$SERV_ABORT_NS" )
                         ;;
                "$SERV_PLANSWAP" )
                         ;;
                esac
       else
                case "$5" in
                "$SERV_START" )
                         [ "$6" = "$STATUS_START" ] &&  patrol_sby_exe &
                         ;;
                "$SERV_END" )
                         [ "$6" = "$STATUS_START" -o "$6" = "$STATUS_SBYEND" ] && stop_sby
                         ;;
                "$SERV_PLANEND" )
                         [ "$6" = "$STATUS_START" ] && patrol_sby_term
                         ;;
                "$SERV_ABORT" )
                         [ "$6" = "$STATUS_START" ] && patrol_sby_term
                         [ "$6" = "$STATUS_SBYEND" ] && stop_sby
                         ;;
                "$SERV_FAULT" )
                         [ "$6" = "$STATUS_START" ] && stop_sby
                         ;;
                "$SERV_HOSTDOWN" )
                         [ "$6" = "$STATUS_START" ] &&  patrol_sby_term
                         ;;
                "$SERV_PLANSWAP" )
                         [ "$6" = "$STATUS_START" ] &&  patrol_sby_term
                         ;;
                esac
       fi
fi
 
exit 0

[説明]

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

  2. スレーブノードの監視を開始するためのコマンドを指定します。

  3. スレーブノードの監視を終了するためのコマンドを指定します。

  4. スレーブノードを停止するためのコマンドを指定します。

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

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

■サーバの起動コマンドファイルの指定例
# Sample of the actcommand for HADB
 
SU=/bin/su
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/multinode.env       ...1
 
# Execute adbchgnodetype command 
$SU - $ADBMGR -c "$ADBDIR/bin/adbchgnodetype --master -n $ADBALIAS"
exit $?

[説明]

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

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

この例では,サーバの停止コマンドを/home/adbmanager/scripts/multinode_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
GREP=/bin/grep
SU=/bin/su
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/multinode.env      ...1
 
# Execute adbstop command 
while :
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 } }'`
 
case "$1" in
"-e" )
        # Normal stop operations of master node.
        # (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 "$ADBDIR/bin/adbstop --cancel"
              if [ "$?" = "0" -o "$?" = "4" ]
              then
                break
              fi
        else
          break
        fi
 
        ;;
"-w" )
        # Plan stop operations of master node.
        # (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 "$ADBDIR/bin/adbstop --cancel --node"
              if [ "$?" = "0" -o "$?" = "4" ]
              then
                break
              fi
        else
          break
        fi
 
        ;;
"-c" )
        break
        ;;
esac
 
done
 
# stop HADB
if [ "$GET_STS" = "$STS_STARTING" ]
then
  ADB_ID=`$SU - $ADBMGR -c "ps x" | $GREP 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/multinode.envを指定します。

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

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

■サーバの監視コマンドファイルの指定例
# Sample of the patrolcommand for HADB
 
AWK=/bin/awk
ECHO=/bin/echo
GREP=/bin/grep
KILL=/bin/kill
PS=/bin/ps
SU=/bin/su
XARGS=/usr/bin/xargs
 
# Setting environment variables for HADB
source /home/adbmanager/scripts/multinode.env    ...1
 
# Execute adbmonitor command for master node 
$SU - $ADBMGR -c "$ADBDIR/bin/adbmonitor -n" &
PID=$!
 
# Trap SIGTERM and terminate adbmonitor
trap "$KILL $PID" 15
 
wait $PID
 
exit 0

[説明]

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

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

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