如果 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 实用程序用来跟踪两次重启操作之间的时间。这是一个 C 程序,位于 (RT_basedir) 目录中。
Retry_count 和 Retry_interval 系统定义的资源属性确定尝试重新启动的次数以及计数的时间间隔。在 RTR 文件中,这些属性的默认值为在时间段 5 分钟(300 秒)内进行两次尝试,尽管群集管理员可以更改这些值。
系统将调用 restart_service() 函数尝试在同一节点上重新启动数据服务。有关该函数的信息,请参见下一节,重启数据服务。
scha_control() API 函数带有 GIVEOVER 选项使包含数据服务样例的资源组脱机并在其他节点上使其重新联机。