ユーザがあらかじめ用意したコマンドを特定のタイミングで実行することができます。実行タイミングの詳細は、“2.2.11 ユーザコマンド実行機能”を参照してください。本機能によりNIC切替方式運用の場合には、ARPテーブルのフラッシュ、インタフェース状態の変更、MTU長の変更などの処理を実行させることができます。また、GS/SURE連携方式運用の場合には、特定プロセスへのシグナル送信処理などを実行させることができます。実行させる為には、以下の設定を行う必要があります。なお、サンプルファイルが用意されていますので、ユーザ環境に適したスクリプトファイルを作成する場合の参考にしてください。
/etc/opt/FJSVhanet/script/interface/sha.interface.sam(IPアドレス活性、非活性時)
/etc/opt/FJSVhanet/script/failover/sha.failover.sam(伝送路異常検出時)
/etc/opt/FJSVhanet/script/patrol/sha.patrol.sam(待機パトロール異常、復旧検出時)
/etc/opt/FJSVhanet/script/host/host.sam
/etc/opt/FJSVhanet/script/service.sh.sam
/etc/opt/FJSVhanet/script/system/monitor.sam
設定ファイルの配置先およびファイル名は仮想インタフェースの種別および仮想インタフェース名ごとに異なります。
/etc/opt/FJSVhanet/script/interface/shaX(IPアドレス活性、非活性時)
/etc/opt/FJSVhanet/script/failover/shaX(伝送路異常検出時)
/etc/opt/FJSVhanet/script/patrol/shaY(待機パトロール異常、復旧検出時)
※shaXは作成したNIC切替方式の仮想インタフェース名。
※shaYは作成したNIC切替方式の待機パトロールの仮想インタフェース名。
/etc/opt/FJSVhanet/script/host/hostIP
※hostIPは通信相手の仮想インタフェースのホスト名またはIPアドレス
ただし、ホスト名を使用する場合は以下に注意してください。
/etc/inet/hostsにおいて同一IPアドレスで複数のホスト名を定義している場合、hostsファイルの先頭から見て最初に定義されているホスト名を使用してください。
/etc/opt/FJSVhanet/script/service.sh
/etc/opt/FJSVhanet/script/system/monitor
注意
スクリプトファイル内では、伝送路二重化機能の運用コマンドは呼び出さないでください。
スクリプトファイル内で実行されるコマンドの出力メッセージは、標準出力には表示されません。出力メッセージの内容については、logger(1)コマンドでsyslogに出力して確認してください。
クラスタ構成の場合、IPアドレス活性、非活性時に実行されるNIC切替方式用のスクリプトは、運用ノードでのみ実行されます。待機ノードでは実行されません。
NIC切替方式運用時のスクリプトファイル呼出形式および定義ファイルサンプルを以下に示します。
(1) IPアドレス活性、非活性時
/bin/sh shaX param1 param2 param3 param4
activate:引継ぎIPアドレスの活性
inactivate:引継ぎIPアドレスの非活性
create:物理NICの活性 (論理IP引継ぎのみ)
delete:物理NICの非活性 (論理IP引継ぎのみ)
before:活性/非活性の前
after:活性/非活性の後
ifname:物理インタフェース名
inet6:アドレスファミリ(IPv6の場合のみ)
※IPv4の場合 param4 はありません。
#!/bin/sh # # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # # Control interface for HA-Net # # # Params # # $1 activate or inactivate or create or delete # $2 before or after # $3 physical interface name # $4 address family (IPv6 only) # # # Set Params # INTERFACE=$3 #IP_ADDR1="xx.xx.xx.xx" #IP_ADDR2="yy.yy.yy.yy" #MAC_ADDR1="xx:xx:xx:xx:xx:xx" #MAC_ADDR2="yy:yy:yy:yy:yy:yy" cace $# in 3) ADDRESS_FAMILY="inet" ;; 4) if [ $4 = "inet6" ] then ADDRESS_FAMILY="inet6" else ADDRESS_FAMILY="unknown" fi ;; *) ADDRESS_FAMILY="unknown" ;; esac if [ $ADDRESS_FAMILY = "inet" ] then case "$1" in 'activate') # # Activate interface # case "$2" in 'before') # # script before activate interface # # logger -p daemon.notice "execute script before activate interface on" $INTERFACE #if [ ! $INTERFACE = "hmeX" ] #then # ifconfig $INTERFACE ether $MAC_ADDR1 #else # ifconfig $INTERFACE ether $MAC_ADDR2 #fi ;; 'after') # # script after activate interface # # logger -p daemon.notice "execute script after activate interface on" $INTERFACE #if [ ! $INTERFACE = "hmeX" ] #then # arp -d $IP_ADDR1 # ping $IP_ADDR2 2 #else # arp -d $IP_ADDR2 # ping $IP_ADDR1 2 #fi ;; *) ;; esac ;; 'inactivate') # # inactivate interface # case "$2" in 'before') # # script before inactivate interface # # logger -p daemon.notice "execute script before inactivate interface on" $INTERFACE ;; 'after') # # script after inactivate interface # # logger -p daemon.notice "execute script after inactivate interface on" $INTERFACE ;; *) ;; esac ;; 'create') # # create physical interface (logical IP takeover only) # case "$2" in 'before') # # script before create interface # # logger -p daemon.notice "execute script before create interface on" $INTERFACE ;; 'after') # # script after create interface # # logger -p daemon.notice "execute script after create interface on" $INTERFACE ;; *) ;; esac ;; 'delete') # # delete physical interface (logical IP takeover only) # case "$2" in 'before') # # script before delete interface # # logger -p daemon.notice "execute script before delete interface on" $INTERFACE ;; 'after') # # script after delete interface # # logger -p daemon.notice "execute script after delete interface on" $INTERFACE ;; *) ;; esac ;; *) ;; esac fi if [ $ADDRESS_FAMILY = "inet6" ] then case "$1" in 'activate') # # Activate interface # case "$2" in 'before') # # script before activate interface # # logger -p daemon.notice "execute script before activate interface on" $INTERFACE ;; 'after') # # script after activate interface # # logger -p daemon.notice "execute script after activate interface on" $INTERFACE ;; *) ;; esac ;; 'inactivate') # # inactivate interface # case "$2" in 'before') # # script before inactivate interface # # logger -p daemon.notice "execute script before inactivate interface on" $INTERFACE ;; 'after') # # script after inactivate interface # # logger -p daemon.notice "execute script after inactivate interface on" $INTERFACE ;; *) ;; esac ;; 'create') # # create physical interface (logical IP takeover only) # case "$2" in 'before') # # script before create interface # # logger -p daemon.notice "execute script before create interface on" $INTERFACE ;; 'after') # # script after create interface # # logger -p daemon.notice "execute script after create interface on" $INTERFACE ;; *) ;; esac ;; 'delete') # # delete physical interface (logical IP takeover only) # case "$2" in 'before') # # script before delete interface # # logger -p daemon.notice "execute script before delete interface on" $INTERFACE ;; 'after') # # script after delete interface # # logger -p daemon.notice "execute script after delete interface on" $INTERFACE ;; *) ;; esac ;; *) ;; esac fi exit 0 |
(2) 伝送路異常検出時
/bin/sh shaX param1
Primary: Primaryインタフェース異常
Secondary: Secondaryインタフェース異常
all: Primary/Secondaryインタフェース双方異常
#!/bin/sh # # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # Control interface for HA-Net # # # Params # # $1 communication line state primary/secondary/all # # # Set Params # #STATE=$1 #PROC="process_name" #kill -15 `/usr/bin/ps -e | /usr/bin/sed -n \ # -e'/'$PROC'$/s/[^0-9 \t].*//p' \ # ` > /dev/null 2>/dev/null #if [ $STATE = "primary" ] #then # logger -p daemon.notice "execute script Polling fail : primary" #fi #if [ $STATE = "secondary" ] #then # logger -p daemon.notice "execute script Polling fail : secondary" #fi #if [ $STATE = "all" ] #then # logger -p daemon.notice "execute script Polling failover" #fi |
(3) 待機パトロール異常、復旧検出時
/bin/sh shaX param1 param2
establish:待機パトロール確立
recover:待機NIC監視復旧
fail:待機NIC異常
待機NICの物理インタフェース名:hmeXなどの物理インタフェース名
unknown:待機NICが未決定の場合
#!/bin/sh # # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # Control interface for HA-Net # # # Params # # $1 standby NIC state establish/recovery/fail # $2 standby NIC name hmeX # # # Set Params # #STATE=$1 #NIC=$2 #if [ $STATE = "fail" ] #then # logger -p daemon.notice "execute script Patrol fail ($NIC)" #fi #if [ $STATE = "establish" ] #then # logger -p daemon.notice "execute script Patrol establish ($NIC)" #fi #if [ $STATE = "recover" ] #then # logger -p daemon.notice "execute script Patrol recover ($NIC)" #fi |
GS/SURE連携方式運用時のスクリプトファイル呼出形式および定義ファイルサンプルを以下に示します。
/bin/sh hostIP
# # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # # Control interface for HA-Net # # # Set Params # #PROC="process_name" # # Procedure # # #kill -15 `/usr/bin/ps -e | /usr/bin/sed -n \ # -e'/'$PROC'$/s/[^0-9 \t].*//p' \ # ` > /dev/null 2>/dev/null # |
伝送路二重化機能のサービスを設定する場合の、スクリプトファイル呼出形式および設定例を以下に示します。
(1) サービス起動時
サービス起動時のスクリプトファイル呼出形式および定義ファイルサンプルを以下に示します。
/bin/sh service.sh param1
fjsvhanet: 伝送路二重化機能のサービス起動
fjsvhanet-poll: 伝送路二重化機能の伝送路監視サービスの起動
#!/bin/sh # # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # custom initialize script for fjsvhanet and fjsvhanet-poll service # # # Params # # $1 Started service name fjsvhanet or fjsvhanet-poll # case "$1" in 'fjsvhanet') # # add procedure for fjsvhanet service # # logger -p daemon.notice "execute script for fjsvhanet service" # # svcadm restart svc:/network/xxxxxxxx # ;; 'fjsvhanet-poll') # # add procedure for fjsvhanet-poll service # # logger -p daemon.notice "execute script for fjsvhanet-poll service" # # svcadm restart svc:/network/xxxxxxxx # ;; *) ;; esac exit 0 |
(2) セルフチェック機能での異常検出時
セルフチェック機能のスクリプトファイル呼出形式および定義ファイルサンプルを以下に示します。
/bin/sh monitor param1 param2
driver:仮想ドライバ
daemon:制御デーモン
hungup:仮想ドライバもしくは制御デーモンのハングアップを検出
error:仮想ドライバもしくは制御デーモンの異常を検出
process:制御デーモンの異常停止を検出
#!/bin/sh # # All Rights Reserved, Copyright (c) FUJITSU LIMITED 2011 # #ident "%W% %G% %U% - FUJITSU" # # # Control interface for HA-Net # # # Params # # $1 driver ... sha driver # daemon ... hanetctld # $2 hungup ... hanetctld or driver hungup has been detected. # error ... hanetctld or driver i/o error has been detected. # process ... hanetctld process does not exist. # COMPO=$1 ERRKIND=$2 case $COMPO in driver) # # script when a driver error is detected. # ;; daemon) # # script when a daemon error is detected. # ;; esac exit 0 |