6.12.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モニタのサンプルファイル用ディレクトリの下に格納されています。
#Definition for server1 SERV1="server1" IPADDR_SERV1="aaa.a.a.a" BROADCAST_SERV1="aaa.a.a.255" IFNAME_SERV1="en0" #Definition for server2 SERV2="server2" IPADDR_SERV2="bbb.b.b.b" BROADCAST_SERV2="bbb.b.b.255" IFNAME_SERV2="en1" ##################################################################### # Add IPaddress ##################################################################### #ipaddr_add() #{ # /usr/sbin/ifconfig $WIFNAME inet $WIPADDR alias netmask 255.255.255.0 broadcast $WBROADCAST # echo $? # return 0 #} ##################################################################### # Delete IPaddress ##################################################################### #ipaddr_delete() #{ # /usr/sbin/ifconfig $WIFNAME inet $WIPADDR delete # echo $? # return 0 #} # usrcommand defined 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" ############################################################### # host ############################################################### #if [ "$1" = "-m" ] # then # exit 1 # fi ############################################################### # servers ############################################################### #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