6.20.6 ユーザコマンドのコーディング例
ユーザコマンドのコーディング例として,サーバのIPアドレスを切り替える処理の例について説明します。(1)では,コーディング例の一部分を取り上げて,ユーザコマンドのコーディング方法を説明します。(2)では,コーディング例全体を示します。
なお,サーバのIPアドレスを切り替える処理は,LANの状態設定ファイルを設定する方法でも実現できます。LANの状態設定ファイルを設定する場合,ユーザコマンドの作成は不要です。
- 〈この項の構成〉
(1) コーディング例で示すユーザコマンドの説明
サーバが使用するIPアドレスを,次のタイミングで追加・削除する場合について説明します。
-
サーバ起動時(サーバ起動処理の開始時点)には実行サーバでIPアドレスを追加し,待機サーバでは何も実行しない。
-
実行サーバ障害時(障害処理の開始時点)には実行サーバでIPアドレスを削除し,待機サーバでIPアドレスを追加する。
これらのタイミングを次に示します。図中で示す番号は,コーディング例の一部分と対応しています。
ユーザコマンドのコーディング例と発行タイミングの対応を次に示します。
(1)では,サーバ起動時(サーバ起動処理の開始時点)に実行サーバで実行したい処理を記述します。この例では,IPアドレスを追加するコマンドとしてipaddr_addを記述しています。
(2)では,サーバ起動時(サーバ起動処理の開始時点)に待機サーバで実行したい処理を記述します。この例では何も実行しないため,何も記述していません。
(3)では,実行サーバ障害時(障害処理の開始時点)に実行サーバで実行したい処理を記述します。この例では,IPアドレスを削除するコマンドとしてipaddr_deleteを記述しています。
(4)では,実行サーバ障害時(障害処理の開始時点)に待機サーバで実行したい処理を記述します。この例では,IPアドレスを追加するコマンドとしてipaddr_addを記述しています。
(1)から(4)の発行タイミングごとに,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 |
注※ ユーザコマンド名およびサーバ識別名はそれぞれ次を仮定しています。
-
ユーザコマンド名:/usr/bin/usrcmd
-
サーバ識別名:server
(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