restart_service 関数は、decide_restart_or_failover によって呼び出され、同じノード上でデータサービスの再起動を試行します。この関数は次の作業を行います。
データサービスが PMF 下にまだ登録されているかどうかを調べます。サービスが登録されている場合、この関数は次の作業を行います。
データサービスの STOP メソッド名と Stop_timeout 値を取得します。
hatimerun を使用してデータサービスの STOP メソッドを起動し、Stop_timeout 値を渡します。
(データサービスが正常に停止した場合) データサービスの START メソッド名と Start_timeout 値を取得します。
hatimerun を使用してデータサービスの START メソッドを起動し、Start_timeout 値を渡します。
データサービスが PMF 下に登録されていない場合は、データサービスが PMF 下で許可されている再試行最大回数を超えていることを示しています。したがって、GIVEOVER オプションを指定して scha_control 関数を呼び出し、データサービスを別のノードにフェイルオーバーします。
function restart_service { # データサービスを再起動するには、まず、データサービス自身が # PMF 下に登録されているかどうかを確認する。 pmfadm -q $PMF_TAG if [[ $? -eq 0 ]]; then # データサービスの TAG が PMF 下に登録されている場合、データサービスを # 停止し、起動し直す。 # 当該リソースの STOP メソッド名と STOP_TIMEOUT 値を取得する。 STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAM� STOP_METHOD=`scha_resource_get -O STOP ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAM� hatimerun -t $STOP_TIMEOUT $RT_BASEDIR/$STOP_METHOD ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME ¥ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] ¥ "${ARGV0} Stop method failed." return 1 fi # 当該リソースの START メソッド名と START_TIMEOUT 値を取得する。 # this resource. START_TIMEOUT=`scha_resource_get -O START_TIMEOUT ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAM� START_METHOD=`scha_resource_get -O START ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAM� hatimerun -t $START_TIMEOUT $RT_BASEDIR/$START_METHOD ¥ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME ¥ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] ¥ "${ARGV0} Start method failed." return 1 fi else # データサービスの TAG が PMF 下に登録されていない場合、 # データサービスが PMF 下で許可されている再試行最大回数を # 超えていることを示す。 したがって、データサービスを再起動 # してはならない。代わりに、同じクラスタ内にある別のノード # へのフェイルオーバーを試みる。 scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME ¥ -R $RESOURCE_NAME fi return 0 } |