您可以配置 Sun Cluster Geographic Edition 软件在遇到心跳丢失时发送电子邮件通知并运行一个操作脚本。可使用可选的 Notification_emailaddrs 和 Notification_actioncmd 属性来配置心跳丢失通知。
如果在您使用心跳的 Query_interval 属性配置的时间间隔后,心跳仍然出现故障,系统将会发出心跳丢失通知。每隔 Query_interval 时间,心跳监视器都会向逻辑主机上的响应程序发送心跳请求。如果在 Query_interval 时间段内未收到响应,内部计数将增加。如果重新计数达到了 heartbeat.retries 属性中指定的数值,则该心跳将被视为失败。
例如,您可以使用 Query_interval 的默认值 120 秒和 heartbeat.retries 的默认值 3。这样,心跳丢失事件可最迟在收到最后一条来自伙伴群集的心跳响应的 10 分钟后发出。
120sec (delay since last query) + 3*120sec (wait for normal response) + 120 sec (wait for retry response) |
在生成心跳丢失事件与触发心跳丢失通知之间可能会有延迟。
心跳丢失事件并不一定表明远程群集已崩溃。
以下几节将介绍如何配置心跳丢失通知属性,以及如何创建在发生心跳丢失事件后 Sun Cluster Geographic Edition 软件所运行的自定义操作脚本。
您可以使用 Notification_emailaddrs 和 Notification_actioncmd 这两个伙伴关系属性来配置心跳丢失通知。这两个属性可通过 geops 命令指定。
您可以在创建伙伴关系的过程中给默认心跳指定这两个属性。2有关更多信息,请参见如何创建伙伴关系。此外,您也可以按照如何修改心跳属性中介绍的步骤修改这些属性。
如果您希望通过电子邮件通知心跳丢失事件,请设置 Notification_emailaddrs 属性。您可以逗号分隔指定电子邮件地址的列表。如果要使用电子邮件通知,则必须将群集节点配置为电子邮件客户机。有关配置电子邮件服务的更多信息,请参见 Solaris System Administration Guide: Network Services。
如果您希望执行一条命令以便对心跳丢失作出响应,请设置 Notification_actioncmd 属性。
本示例将为伙伴关系 paris-newyork-ps 指定一个通知电子邮件地址和一个自定义通知脚本。
phys-paris-1# geops set-prop \ -p Notification_emailaddrs=ops@paris.com,ops@newyork.com \ -p Notification_actioncmd=/opt/hb_action.sh paris-newyork-ps |
您可以创建一个操作 shell 脚本,以便在本地群集检测出伙伴群集中的心跳丢失事件时运行该脚本。该脚本在运行时具有超级用户权限。因此,该文件必须具有超级用户所有权和执行权限,但脚本不应具有写权限。
如果您已配置 Notification_actioncmd 属性,该操作命令运行时会在以下命令行中附带一些可提供事件信息的参数:
# customactioncommandpath -c localclustername -r remoteclustername -e 1 \ -n nodename -t time |
指定您已创建的操作命令的路径。
指定本地群集的名称。
指定远程伙伴群集的名称。
指定 HBLOST=1,这表示发生了心跳丢失事件。由于 Sun Cluster Geographic Edition 软件仅支持心跳丢失通知,因此 -e 1 是唯一可以传递到操作 shell 脚本中的值。
指定发出心跳丢失事件通知的群集节点的名称。
从 1970 年 1 月 1 日 00:00:00 (GMT) 算起,以毫秒为单位指定心跳丢失事件发生的时间。
您可以使用该脚本在辅助群集上执行自动接管操作。不过此类自动操作存在风险如果心跳丢失通知由主群集和辅助群集上所有心跳连通性全部丢失所致,此类自动操作可能导致存在两个主群集的情况。
此示例显示了正在通知操作 shell 脚本中解析的命令行中所提供的的事件信息。
#!/bin/sh set -- `getopt abo: $*` if [ $? != 0] then echo $USAGE exit 2 fi for i in $* do case $i in -p) PARTNER_CLUSTER=$1; shift;; -e) HB_EVENT=$2; shift;; -c) LOCAL_CLUSTER=$3; shift;; -n) EVENT_NODE=$4; shift;; esac done |