如果 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 选项可以使含有数据服务样例的资源组脱机并在其它节点上重新联机。