Hitachi

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


6.20.6 ユーザコマンドのコーディング例

ユーザコマンドのコーディング例として,サーバのIPアドレスを切り替える処理の例について説明します。(1)では,コーディング例の一部分を取り上げて,ユーザコマンドのコーディング方法を説明します。(2)では,コーディング例全体を示します。

なお,サーバのIPアドレスを切り替える処理は,LANの状態設定ファイルを設定する方法でも実現できます。LANの状態設定ファイルを設定する場合,ユーザコマンドの作成は不要です。

〈この項の構成〉

(1) コーディング例で示すユーザコマンドの説明

サーバが使用するIPアドレスを,次のタイミングで追加・削除する場合について説明します。

これらのタイミングを次に示します。図中で示す番号は,コーディング例の一部分と対応しています。

図6‒63 ユーザコマンドのコーディング例で示す発行タイミング

[図データ]

ユーザコマンドのコーディング例と発行タイミングの対応を次に示します。

図6‒64 ユーザコマンドのコーディング例と発行タイミングの対応

[図データ]

(1)では,サーバ起動時(サーバ起動処理の開始時点)に実行サーバで実行したい処理を記述します。この例では,IPアドレスを追加するコマンドとしてipaddr_addを記述しています。

(2)では,サーバ起動時(サーバ起動処理の開始時点)に待機サーバで実行したい処理を記述します。この例では何も実行しないため,何も記述していません。

(3)では,実行サーバ障害時(障害処理の開始時点)に実行サーバで実行したい処理を記述します。この例では,IPアドレスを削除するコマンドとしてipaddr_deleteを記述しています。

(4)では,実行サーバ障害時(障害処理の開始時点)に待機サーバで実行したい処理を記述します。この例では,IPアドレスを追加するコマンドとしてipaddr_addを記述しています。

(1)から(4)の発行タイミングごとに,HAモニタから渡される変数とHAモニタが発行するユーザコマンドの対応を次に示します。

表6‒21 HAモニタから渡される変数とHAモニタが発行するユーザコマンドの対応

発行タイミングの番号

$4

$5

$6

HAモニタが発行するユーザコマンド

(1)

online

-s

start

/usr/bin/usrcmd -n server -k online -s start

(2)

standby

-s

start

/usr/bin/usrcmd -n server -k standby -s start

(3)

online

-a

start

/usr/bin/usrcmd -n server -k online -a start

(4)

standby

-a

start

/usr/bin/usrcmd -n server -k standby -a start

注※ ユーザコマンド名およびサーバ識別名はそれぞれ次を仮定しています。

(2) コーディング例

このコーディング例は,サンプルファイルとしてHAモニタのサンプルファイル用ディレクトリの下に格納されています。

#!/bin/sh
 
# The definition of the 1st server
SERV1="server1"
IPADDR_SERV1="a.b.c.d"
BROADCAST_SERV1="e.f.g.h"
IFNAME_SERV1="ethX:Y1"
 
# The definition of the 2nd server
SERV2="server2"
IPADDR_SERV2="i.j.k.l"
BROADCAST_SERV2="m.n.o.p"
IFNAME_SERV2="ethX:Y2"
 
# The alias IP address is added to the LAN interface.
# The ARP caches are updated.
ipaddr_add()
{
        /sbin/ifconfig $WIFNAME inet $WIPADDR netmask 255.255.255.0 broadcast $WBROADCAST
        ARPIFNAME=`echo $WIFNAME | /bin/sed -e 's/:[0-9]*$//'`
        /sbin/arping -U -c 2 -I $ARPIFNAME $WIPADDR
        /bin/echo 0 > /proc/sys/net/ipv4/route/flush
        return 0
}
 
# The alias IP address is deleted from the LAN interface.
ipaddr_delete()
{
        /sbin/ifconfig $WIFNAME down
        /bin/echo 0 > /proc/sys/net/ipv4/route/flush
        return 0
}
#  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"
 
# This user command terminates, when the state of HAmonitor has changed.
if [ "$1" = "-m" ]
then
        exit  1
fi
 
# Processing of the server
for serv in $SERV1 $SERV2
do
        if [ "$2" = "$serv" ]
        then
                case "$serv" in
                "$SERV1" )
                        WIPADDR="$IPADDR_SERV1"
                        WBROADCAST="$BROADCAST_SERV1"
                        WIFNAME="$IFNAME_SERV1"
                        ;;
                "$SERV2" )
                        WIPADDR="$IPADDR_SERV2"
                        WBROADCAST="$BROADCAST_SERV2"
                        WIFNAME="$IFNAME_SERV2"
                        ;;
                esac
                if [ "$4" = "$KIND_ONLINE" ]
                then
                        case "$5" in
                        "$SERV_START" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_add
                                ;;
                        "$SERV_END" )
                                ipaddr_delete
                                ;;
                        "$SERV_PLANEND" )
                                ipaddr_delete
                                ;;
                        "$SERV_ABORT" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_delete
                                ;;
                        "$SERV_ABORT_NS" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_delete
                                ;;
                        "$SERV_PLANSWAP" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_delete
                                ;;
                        esac
                else
                        case "$5" in
                        "$SERV_START" )
                                ;;
                        "$SERV_END" )
                                ;;
                        "$SERV_PLANEND" )
                                ;;
                        "$SERV_ABORT" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_add
                                ;;
                        "$SERV_FAULT" )
                                ipaddr_delete
                                ;;
                        "$SERV_HOSTDOWN" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_add
                                ;;
                        "$SERV_PLANSWAP" )
                                [ "$6" = "$STATUS_START" ] && ipaddr_add
                                ;;
                        esac
                fi
        fi
done
 
exit 0