Sun Cluster Geographic Edition 系统管理指南

第 6 章 管理心跳

通过在公共网络中使用心跳,Sun Cluster Geographic Edition 软件使得各个参与伙伴关系的群集可检测伙伴站点的群集故障。心跳监视器使用插件模块来查询其伙伴的心跳状态。

本章包括以下各节:

心跳介绍

Sun Cluster Geographic Edition 中的心跳是一种收集心跳插件的容器。每个心跳都有一个名称和一个可调属性(即 Query_interval)。Query_interval 属性指定心跳状态请求之间的延迟。

心跳插件的使用可简化实际的物理监视活动。插件由必需的查询命令或查询库、可选请求程序和响应程序代理、类型和 Plugin_properties 字符串定义。

Sun Cluster Geographic Edition 产品提供了以下几个默认插件:

每次在未指定自定义心跳时运行 geops creategeops join 都会创建使用默认心跳插件的默认心跳。默认心跳的名称为 hb_localclustername ~remoteclustername。有关 geops 命令的更多信息,请参阅 geops(1M) 手册页。

您可以创建自定义的心跳插件,并使其与现有默认心跳或新的自定义心跳相关联。


注 –

仅为特定的环境提供自定义的心跳,所以需要仔细配置。如果您的系统需要使用自定义心跳,请咨询 Sun 专家以便获得帮助。

如果要创建自定义心跳,必须至少添加一个插件,以防止伙伴关系仍处于降级模式。


创建心跳

本节介绍了创建心跳的过程。

Procedure如何创建心跳

使用此过程创建新的心跳。要在伙伴关系中使用心跳,必须在创建伙伴关系之前先创建心跳。如果在创建自定义心跳之前创建伙伴关系,则该伙伴关系所使用的默认心跳将阻止创建自定义心跳。

如果要创建自定义心跳,必须至少添加一个插件,以防止伙伴关系仍处于降级模式。

自定义心跳可阻止在创建伙伴关系的过程中使用默认心跳。如果您希望为伙伴关系使用默认心跳,则必须在运行 geops create 命令之前删除自定义心跳。

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 创建心跳。


    # geohb create -r remoteclustername \
    [-p propertysetting [-p…]] heartbeatname
    
    -r remoteclustername

    指定远程的辅助伙伴群集的名称。

    -p propertysetting

    指定一个使用 name=statement 对赋值的心跳属性。可通过使用多个语句实现一次设置多个属性。

    有关可设置的属性的更多信息,请参见附录 A

    heartbeatname

    指定心跳的标识符。

    如果要创建自定义心跳,必须至少添加一个插件,以防止伙伴关系仍处于降级模式。


    注意 – 注意 –

    相同伙伴关系中各群集上的自定义心跳不能相同。选择一个可唯一标识心跳的名称,例如群集 cluster-paris 上的 paris-to-newyork 和群集 cluster-newyork 上的 newyork-to-paris


    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–1 创建心跳

此示例创建了一个名为 paris-to-newyork 的心跳。


# geohb create -r cluster-newyork paris-to-newyork

创建心跳插件

本节介绍了创建心跳插件的过程。

Procedure如何创建心跳插件

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 将心跳插件添加到现有心跳。


    # geohb add-plugin heartbeatname pluginname \
    [-p propertysetting [-p…]] 
    
    heartbeatname

    指定本地群集上心跳的标识符。

    pluginname

    指定心跳插件的名称。

    -ppropertysetting

    指定一个使用 name=statement 对赋值的心跳插件属性。可通过使用多个语句实现一次设置多个属性。

    有关可设置的属性的更多信息,请参见附录 A

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–2 创建心跳插件

此示例创建了一个名为 command1 的心跳插件。


# geohb add-plugin paris-to-newyork command1 -p Query_cmd=/usr/bin/hb/

修改心跳插件属性

本节介绍了修改心跳插件属性的过程。修改插件属性后,属性更改将立即生效。

Procedure如何修改心跳插件的属性

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 修改心跳插件的属性。


    # geohb modify-plugin -p propertysetting \
    [-p…] pluginname heartbeatname
    
    heartbeatname

    指定心跳的标识符。

    pluginname

    指定心跳插件的名称。

    -p propertysetting

    指定一个使用 name=statement 对赋值的心跳插件属性。可通过使用多个语句实现一次设置多个属性。

    有关可设置的属性的更多信息,请参见附录 A


    注 –

    您不能编辑默认插件的某些属性。


    有关 Sun Cluster Geographic Edition 软件支持的名称和值的信息,请参见附录 B

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–3 修改心跳插件的属性

本示例对默认 TCP/UDP 插件 tcp_udp_plugin 的设置进行了修改,以便仅使用 TCP。


# geohb modify-plugin -p Plugin_properties=paris-cluster/TCP/2084 \
tcp_udp_plugin hb_cluster-paris~cluster-newyork

删除心跳和心跳插件

本节介绍了删除心跳和心跳插件的过程。

Procedure如何删除心跳

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 删除心跳。


    # geohb delete heartbeatname
    
    heartbeatname

    指定心跳设置的标识符。

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–4 删除心跳

此示例删除了一个名为 paris-to-newyork 的心跳。


# geohb delete paris-to-newyork

Procedure如何从心跳中删除插件

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 从心跳中删除插件。


    # geohb remove-plugin pluginname heartbeatname
    

    注意 – 注意 –

    请勿删除默认心跳插件 tcp_upd_pluginping_plu in


    pluginname

    指定自定义心跳插件的名称

    heartbeatname

    指定包含此插件的心跳的标识符

    有关 Sun Cluster Geographic Edition 软件支持的名称和值的信息,请参见附录 B

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–5 从心跳中删除插件

本示例将从名为 paris-to-newyork 的心跳中删除名为 command1 的插件。


# geohb remove-plugin command1 paris-to-newyork

显示心跳配置信息

本节介绍了显示心跳配置信息的具体过程。

Procedure如何显示心跳配置信息

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 显示特定心跳或整个心跳子系统的当前配置信息。


    # geohb list [heartbeatnamelist]
    
    heartbeatnamelist

    指定本地群集上要显示配置信息的心跳的名称。

    如果不指定心跳名称列表,此命令将显示所有已配置心跳的信息。

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–6 显示心跳配置信息

此示例显示了 paris-to-newyork 心跳的相关信息。


# geohb list paris-to-newyork

调整心跳属性

创建伙伴关系时也创建默认心跳。如果计划使用自定义心跳,则需要在创建伙伴关系之前创建自定义心跳。您可以使用 geohb set-prop 命令修改默认心跳和自定义心跳的属性。有关此命令的更多信息,请参阅 geohb(1M) 手册页。


注 –

仅为特定的环境提供自定义的心跳,所以需要仔细配置。如果您的系统需要使用自定义心跳,请咨询 Sun 专家以便获得帮助。


如果修改 Query_interval 属性的默认值,请确保时间间隔足够长。时间间隔过短会导致在逻辑主机名资源可用之前发生超时和心跳丢失事件。只要有两次未响应的心跳请求,即导致故障转移。如果将 query_interval 的默认值设置为 120 秒,将 heartbeat.retries 参数的默认值设置为 3,则对等群集可在 6 分钟 (120 * 3 )·内保持未响应状态,且不会误报故障消息。

heartbeat.retries 参数在 com.sun.cluster.agent.geocontol.xml 文件中指定。

如果调节 Query_interval 属性的延迟设置,请确保满足以下条件:


Query_interval > worst-case logical-host failover time / 2

必须依靠经验确定故障主机的逻辑主机故障转移的时间。

为避免报告假故障,以下内容必须为真:


Query_interval > worst-case logical-host failover time / 3

您不能更改 heartbeat.retries 值。如果要更改 heartbeat.retries 属性的默认值,请与 Sun 服务代表联系。

Procedure如何修改心跳属性

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 修改心跳属性。


    # geohb set-prop -p propertysetting \
    [-p…] heartbeatname
    
    -p propertysetting

    设置心跳的默认属性。

    心跳属性由 name=statement 对赋值。使用多个语句可以一次设置多种属性。

    有关可设置的属性的更多信息,请参见附录 A

    heartbeatname

    指定心跳设置的标识符。

    有关 Sun Cluster Geographic Edition 软件支持的名称和值的信息,请参见附录 B

    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。


示例 6–7 修改默认心跳的属性

此示例修改了 cluster-pariscluster-newyork 之间的默认心跳的设置。


# geohb set-prop -p Query_interval=60 hb_cluster-paris~cluster-newyork

创建使用自定义心跳插件的心跳

您可以创建一个自定义的心跳插件,然后将现有的默认心跳或新的自定义心跳配置为使用此自定义心跳插件。

仅为特定的环境提供自定义的心跳,所以需要仔细配置。如果您的系统需要使用自定义心跳,请咨询 Sun 专家以便获得帮助。


注 –

如果您计划配置自定义心跳,请确保您自定义心跳的名称不同于伙伴群集上自定义心跳的名称。



注意 – 注意 –

自定义心跳的存在可以阻止在创建伙伴关系的过程中使用默认心跳。如果您希望为伙伴关系使用默认心跳,则必须在运行 geops create 命令之前删除自定义心跳。


创建自定义心跳插件

创建心跳后,Sun Cluster Geographic Edition 软件会向您的自定义心跳插件传输以下参数:

queryinterval

Query-interval 属性的值,用于定义延迟时间(以秒为单位),超过该时间即报告心跳状态请求发生故障。

mode

插件启动模式,可以是 NormalEmergency

pluginpropertyvalues

为心跳插件(如果有)配置的 Plugin-properties 属性的值。

有关可设置的属性的更多信息,请参见附录 A

自定义心跳插件会检测辅助群集上的心跳,并返回以下值之一:

Procedure如何将自定义心跳插件添加至现有默认心跳

  1. 登录到主群集上的一个节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 将自定义心跳插件添加至默认心跳。


    # geohb add-plugin -p propertysetting [-p...] \
    pluginname hb_localclustername-remoteclustername
    
    -p propertysetting

    使用 name=statement 对指定心跳插件的属性。

    使用 Query_cmd 属性指定自定义心跳插件的路径。

    有关可设置的属性的更多信息,请参见附录 A

    pluginname

    指定自定义心跳插件的名称。

    hb_localclustername-remoteclustername

    指定要向其中添加自定义心跳插件的默认心跳的名称。

  3. 验证您的更改是否正确。


    # geoadm status
    
  4. 在辅助群集的某个节点上重复以上步骤。


示例 6–8 将自定义心跳插件添加至默认心跳

本示例会将自定义心跳插件 command1 添加到默认心跳 hb_cluster-paris~cluster-newyork 中。


# geohb add-plugin -p query_cmd=/usr/bin/hb command1 \
hb_cluster-paris~cluster-newyork
# geoadm status

Procedure如何创建自定义心跳插件并将其添加至自定义心跳

  1. 登录到一个群集节点。

    要完成此过程,必须为您指定 Geo Management RBAC 权限配置文件。有关 RBAC 的更多信息,请参见Sun Cluster Geographic Edition 软件和 RBAC

  2. 创建新的自定义心跳。


    # geohb create -r remoteclustername \
    [-p propertysetting [-p…]] heartbeatname
    
    -r remoteclustername

    指定远程的辅助伙伴群集的名称。

    -p propertysetting

    设置心跳的默认属性。

    心跳属性由 name=statement 对赋值。

    有关可设置的属性的更多信息,请参见附录 A

    heartbeatname

    指定心跳设置的标识符。


    注意 – 注意 –

    相同伙伴关系中各群集上的自定义心跳不能相同。选择一个可唯一标识心跳的名称,例如,群集 cluster-paris 上的 paris-to-newyork 和群集 cluster-newyork 上的 newyork-to-paris


    有关 geohb 命令的更多信息,请参阅 geohb(1M) 手册页。

  3. 将自定义心跳插件添加至心跳。


    # geohb add-plugin -p propertysetting [-p…] \
    pluginname heartbeatname
    
    -p propertysetting

    使用 name=statement 对指定心跳插件的属性。

    使用 Query_cmd 属性指定自定义心跳插件的路径。

    有关可设置的属性的更多信息,请参见附录 A

    pluginname

    指定自定义心跳插件的名称。

    heartbeatname

    指定心跳的标识符。

  4. 创建将使用您在以上步骤所创建心跳的伙伴关系。


    # geops create -c remoteclustername -h heartbeatname \
    [-p propertysetting [-p…]] partnershipname
    
    -c remoteclustername

    指定要加入伙伴关系的远程群集的名称。

    此名称必须与远程群集上 Sun Cluster Geographic Edition 基础结构所使用的逻辑主机名相匹配。

    -h heartbeatname

    指定要在伙伴关系中使用的自定义心跳,以便监视伙伴群集的可用性。

    -p propertysetting

    使用一系列 name=value 对语句来设置伙伴关系属性的值。

    有关可设置的属性的更多信息,请参见附录 A

    partnershipname

    指定伙伴关系的名称。

    有关使用 geops create 命令创建伙伴关系的更多信息,请参见如何创建伙伴关系

  5. 验证您的更改是否正确。


    # geoadm status
    

示例 6–9 将自定义心跳插件添加至新的自定义心跳

本示例将创建一个使用自定义心跳插件的心跳 paris-to-newyork,并将该心跳与一个新的伙伴关系关联。


# geohb create -r cluster-newyork paris-to-newyork
# geohb add-plugin -p query_cmd=/usr/bin/hb/ command1 paris-to-newyork
# geops create -c cluster-newyork -h paris-to-newyork paris-newyork-ps
# geoadm status

配置心跳丢失通知

您可以配置 Sun Cluster Geographic Edition 软件在遇到心跳丢失时发送电子邮件通知并运行一个操作脚本。可使用可选的 Notification_emailaddrsNotification_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_emailaddrsNotification_actioncmd 这两个伙伴关系属性来配置心跳丢失通知。可使用 geops 命令来指定这些属性。

您可以在创建伙伴关系的过程中给默认心跳指定这两个属性。2有关更多信息,请参见如何创建伙伴关系。此外,您也可以按照如何修改心跳属性中介绍的过程来修改这些属性。

如果您希望通过电子邮件收到有关心跳丢失的通知,请设置 Notification_emailaddrs 属性。您可以逗号分隔指定电子邮件地址的列表。如果要使用电子邮件通知,则必须将群集节点配置为电子邮件客户机。有关配置邮件服务的更多信息,请参见Solaris System Administration Guide: Network Services

如果您希望执行一条命令以便对心跳丢失作出响应,请设置 Notification_actioncmd 属性。


示例 6–10 给现有伙伴关系配置心跳丢失通知

本示例将为伙伴关系 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 脚本

您可以创建一个操作 shell 脚本,以便在本地群集检测出伙伴群集中的心跳丢失事件时运行该脚本。该脚本在运行时具有超级用户权限。因此,该文件必须具有超级用户所有权和执行权限,但脚本不应具有写权限。

如果您已配置 Notification_actioncmd 属性,该操作命令运行时会在以下命令行中附带一些可提供事件信息的参数:


# customactioncommandpath -c localclustername -r remoteclustername -e 1 \
-n nodename -t time
customactioncommandpath

指定您已创建的操作命令的路径。

-c localclustername

指定本地群集的名称。

-p remoteclustername

指定远程伙伴群集的名称。

-e1

指定 HBLOST=1,这表示发生了心跳丢失事件。由于 Sun Cluster Geographic Edition 软件仅支持心跳丢失通知,因此 -e 1 是唯一可以传递到操作 shell 脚本中的值。

-nnodename

指定发出心跳丢失事件通知的群集节点的名称。

-t timestamp

从 1970 年 1 月 1 日 00:00:00 (GMT) 算起,以毫秒为单位指定心跳丢失事件发生的时间。


注意 – 注意 –

您可以使用该脚本在辅助群集上执行自动接管操作。不过此类自动操作存在风险如果心跳丢失通知由主群集和辅助群集上所有心跳连通性全部丢失所致,此类自动操作可能导致存在两个主群集的情况。



示例 6–11 通知操作脚本如何解析 Sun Cluster Geographic Edition 软件提供的命令行信息

此示例显示了正在通知操作 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