如果 probefail 变量是 0 (成功)之外的值,这意味着 nslookup 命令超时或表明应答是某个服务器发出的,而不是服务样例的 DNS 发出的。在每种情况下,DNS 服务器都不能发挥预期作用,故障监视器将调用 decide_restart_or_failover() 函数以确定是在本地重新启动数据服务,还是请求 RGM 将数据服务重新定位到其他节点。如果 probefail 变量是 0,则会生成一条表明探测程序成功的消息。
if [ $probefail -ne 0 ]; then decide_restart_or_failover else logger -p ${SYSLOG_FACILITY}.err\ -t [$SYSLOG_TAG]\ "${ARGV0} Probe for resource HA-DNS successful" fi |
decide_restart_or_failover() 函数使用时间窗口 (Retry_interval) 和故障计数 (Retry_count) 来确定是在本地重新启动 DNS,还是请求 RGM 将数据服务重新定位到其他节点。它实现了以下有条件的代码(请参见PROBE 程序中的 decide_restart_or_failover() 的代码列表)。
如果这是首次故障,请重启数据服务。记录一条错误消息并取消 retries 变量中的计数器。
如果不是首次故障,但是时间已经超出了窗口的范围,请重启数据服务。记录一条错误消息,复位计数器并滑动窗口。
如果时间仍处于窗口的范围内,但已超出重试计数器的计数范围,请故障转移到另一个节点。如果故障转移未成功,将记录一条错误消息并以状态 1(失败)退出探测程序。
如果时间仍处于窗口的范围内,但是未超出重试计数器的计数范围,请重启数据服务。记录一条错误消息并取消 retries 变量中的计数器。
如果在指定时间间隔内达到了重新启动的最大次数,函数将请求 RGM 将数据服务重新定位到其他节点。如果重启的次数在所限制范围之内,或者已超出了时间间隔,以致重新开始计数时,该函数将尝试在同一节点上重启 DNS。请注意以下关于此函数的信息:
gettime 实用程序用来跟踪两次重启操作之间的时间。这是位于 (RT_basedir) 目录中的 C 程序。
系统定义的资源特性 Retry_count 和 Retry_interval 可确定重启尝试的次数以及进行计数的时间间隔。在 RTR 文件中这些特性缺省设置为在 5 分钟(300 秒)时间内尝试 2 次,但是群集管理员可以更改这些值。
系统将调用 restart_service() 函数尝试在同一节点上重启该数据服务。有关此函数的信息,请参见下一节重启数据服务。
使用 scha_control() API 函数和 GIVEOVER 选项可以使包含数据服务样例的资源组脱机然后在其他节点上重新联机。