全伝送路異常時のuserApplication停止抑止機能が使用できます。
本機能の詳細は、“2.8.3 全伝送路異常によるuserApplication停止抑止機能”を参照してください。
実行させるには、以下の設定を行う必要があります。
なお、サンプルファイル(preStartGls.sh)を用意しています。
サンプルファイルは“2.8.3 全伝送路異常によるuserApplication停止抑止機能”記載の構成を満たしている場合は変更ありません。
システムログにメッセージを出力させる場合など、必要に応じて変更してください。
スクリプトを運用ノード、待機ノードに配置します。
スクリプトを配置するとき、運用ノード、待機ノードで同ディレクトリ、同スクリプト名としてください。
スクリプト名は、サンプルファイル名(preStartGls.sh) から変更しても問題ありません。
配置したスクリプトをuserApplicationのPreOnlineスクリプトに登録します。
PreOnlineスクリプトの登録は、RMS Wizardを使用して実施します。
PreOnlineスクリプトの詳細については、マニュアル“PRIMECLUSTER 導入運用手引書”を参照してください。
【サンプルファイル】
- preStartGls.sh
#!/bin/bash
#
# Copyright(c) 2022 FUJITSU LIMITED.
# All rights reserved.
#
LANG=C
#-------------------------------------------------------
# variables
#-------------------------------------------------------
STATE_STANDBY="Standby"
STATE_FAULTED="Faulted"
CFGLOG="/var/opt/FJSVhanet/log/config.log"
PROGNAME=`/bin/basename $0`
HANETPOLL="/opt/FJSVhanet/usr/sbin/hanetpoll"
HANETPOLL_OFF="${HANETPOLL} off"
HANETPOLL_ON_YES="${HANETPOLL} on -f yes"
HANETPOLL_ON_NO="${HANETPOLL} on -f no"
RCCMDDIR="/usr/opt/reliant/bin"
HVASSERT="${RCCMDDIR}/hvassert"
HANETSELECT="hanetselect"
MSG_OFFLINE="ERROR: Remote system is not online"
MSG_TIMEOUT="Command timed out!"
MSG_STANDBY="ERROR: Actual resource state is - Standby"
HVDISP="${RCCMDDIR}/hvdisp"
ECHO="echo" #bash built-in command
LOGGER="/usr/bin/logger"
GREP="/bin/grep"
AWK="/bin/awk"
SED="/bin/sed"
PGREP="/usr/bin/pgrep"
DATE="/bin/date"
# flag to output a message
SYSLOG_OUTPUT="off"
#-------------------------------------------------------
# functions
#-------------------------------------------------------
HAnetLog(){
if [ -f ${CFGLOG} ]; then
DATETIME=`${DATE} +"%Y/%m/%d %H:%M:%S.%3N"`
${ECHO} "[${DATETIME}] - [${PROGNAME}] [$$] $*" >> ${CFGLOG}
fi
return 0
}
HAnetSysLog(){
log_str=$*
if [ ${SYSLOG_OUTPUT} != "off" ]; then
${LOGGER} -t "hanet:${PROGNAME}" -p user.err "${log_str}" >/dev/null 2>&1
fi
HAnetLog ${log_str}
return 0
}
PollExec(){
# hanetpoll off
poll_result=`${HANETPOLL_OFF} 2>&1`
ret=$?
if [ ${ret} -ne 0 ]; then
# check hanetselect
pgrep_result=`${PGREP} -x ${HANETSELECT}`
if [[ ${pgrep_result} != "" ]]; then
# exist hanetselect
if [ -z "${poll_result}" ]; then
poll_result="ERROR:${HANETPOLL_OFF}"
fi
HAnetSysLog ${poll_result}
exit 0
else
HAnetLog "Polling is already stopped. ${poll_result}"
fi
fi
# hanetpoll on
result=`$* 2>&1`
ret=$?
if [ ${ret} -ne 0 ]; then
if [ -z "${result}" ]; then
result="ERROR:$*"
fi
HAnetSysLog ${result}
exit 0
fi
return 0
}
#-------------------------------------------------------
# main
#-------------------------------------------------------
### In the case of Standby ( After transition )#########
if [[ ${HV_INTENDED_STATE} = ${STATE_STANDBY} ]];then
# After state is Standby. Set no.
PollExec ${HANETPOLL_ON_NO}
exit 0
fi
### Get remote SysNode name ############################
remote_node=`${HVDISP} ${HV_APPLICATION} | ${AWK} \
'$1=="PriorityList" { gsub("PriorityList|'${RELIANT_HOSTNAME}'|:", ""); print $1}'`
if [[ ${remote_node} = "" ]]; then
HAnetSysLog "Remote SysNode name is not set."
exit 0
fi
### hvassert ###########################################
# hvassert -h node1RMS -s app1 Faulted
result=`${HVASSERT} -h ${remote_node} -s ${HV_APPLICATION} ${STATE_FAULTED} 2>&1`
ret=$?
if [ ${ret} -eq 0 ]; then
# Last Node: hanetpoll off -> hanetpoll on -f no
PollExec ${HANETPOLL_ON_NO}
else
case "${result}" in
# Remote SysNode is OFFLINE.
*${MSG_OFFLINE}* )
HAnetLog ${result}
# Offline: hanetpoll off -> hanetpoll on -f no
PollExec ${HANETPOLL_ON_NO}
;;
# Command is timeout.
*${MSG_TIMEOUT}* )
# Timeout: hanetpoll off -> hanetpoll on -f yes
HAnetLog ${result}
PollExec ${HANETPOLL_ON_YES}
;;
*${MSG_STANDBY}* )
# other case Standby is normal case.: hanetpoll off -> hanetpoll on -f yes
PollExec ${HANETPOLL_ON_YES}
;;
* )
# other case: hanetpoll off -> hanetpoll on -f yes
HAnetLog ${result}
PollExec ${HANETPOLL_ON_YES}
;;
esac
fi
exit 0 |