前置和后置事件脚本的注意事项

在规划前置和后置事件脚本时,请考虑以下信息。

在前置和后置事件脚本中使用 shell 环境变量

编写前置或后置事件脚本时,您的程序将无法使用 /etc/environment 中定义的任何 shell 环境变量。 如果需要使用其中任何一个变量(例如,PATH 和 NLSPATH),那么必须通过在您的脚本中添加以下行来获取这些变量。

. /etc/environment

event_error 现在表明远程节点上发生故障

如果任何节点具有不可恢复错误,那么所有集群节点都会运行 event_error 事件。 所有节点都会在 hacmp.out 日志文件中记录错误,并且在其中调用发生故障的节点名。 如果您已为 event_error 事件添加前置或后置事件脚本,请注意,将在每个节点上调用这些脚本,而不仅仅是在发生故障的节点上进行调用。

环境变量 EVENT_FAILED_NODE 指示事件脚本失败的节点,此环境变量设置为发生此事件的节点的名称。 请在前置或后置事件脚本中使用此变量来查找故障。

变量 LOCALNODENAME 标识本地节点;如果 LOCALNODENAME 与 EVENT_FAILED_NODE 不相同,那么远程节点上发生了故障。

资源组的并行处理影响事件处理

以并行方式处理资源组时,集群中发生的集群事件会更少。 特别是,仅发生 node_upnode_down 事件,而诸如 node_up_localget_disk_vg_fs 之类的事件则不会发生。 这是因为 PowerHA® SystemMirror® 使用其他方法并行处理资源。 因此,使用并行处理将减少您可为其创建定制前置或后置事件脚本的特定集群事件的数目。 如果您开始对配置中的某些资源组使用并行处理,请注意,您的现有事件脚本可能对这些资源组不起作用。

依赖资源组以及前置和后置事件脚本的使用

如果您使用前置和后置事件脚本或其他方法(例如,定制的串行资源组处理)来在集群所支持的应用程序之间建立依赖性,那么可能不再需要这些方法,或者可以对其进行显著地简化。 您可以改为指定集群中资源组之间的依赖性。 有关如何配置资源组依赖性的更多信息,请参阅“配置资源组之间的依赖性”。

如果您仍希望定制某些应用程序的行为,请考虑向 resource_state_change 事件添加前置或后置事件脚本。

通知,前置和后置事件如何影响集群事件的执行?

通知脚本作为后台进程调用,不会影响调用序列的其余部分,换言之,将忽略来自通知脚本的返回码。

在前台调用前置和后置脚本或定制事件。 缺省情况下,将忽略来自前置或后置事件的返回码,但是,您可以更改此行为,从而将非零返回码视为将终止任何进一步事件处理的事件故障。

您可以使用 smit 配置此选项:

Custom Cluster Configuration->Events->Cluster Events->Change/Show Pre-Defined Events

如果前期事件或后期事件失败,是否更改失败事件? 选项为 "是" ,以将前置或后置事件的故障视为事件故障。

您也可以使用 clmgr change event 命令将 PREPOSTFAILS 选项设置为 true 来更改该选项。

请参阅: ../command/clmgr.htm

针对 pre , post 和 notify 脚本的缺省调用顺序如下所示:
  • 通知脚本作为后台进程调用
  • 在前台调用前置事件脚本
  • 在前台调用 "main" 或预定义事件脚本
  • 在前台调用发布事件脚本
  • 通知脚本作为后台进程调用

如果选择在前置或后置事件失败时使事件失败的选项,那么任何测试脚本的失败都将被视为预定义事件的失败,并将导致集群进入 RP_FAILED 状态。 将运行通知脚本,但不会发生进一步的事件处理。

例如,如果选择在前置事件失败时使事件失败的选项,并且前置事件脚本返回非零值,那么调用的顺序将为:
  • 通知脚本作为后台进程调用
  • 在前台调用前置事件脚本并返回非零值
  • 通知脚本作为后台进程调用

在这种情况下,既不会运行主事件脚本或预定义事件脚本,也不会运行任何事件后脚本。

如果选择在发布事件失败时使事件失败的选项,并且您的发布事件脚本返回非零值,那么将以与缺省情况相同的顺序运行所有脚本,但非零返回码将被视为错误,并且集群将进入 RP_FAILED 状态。

如果集群进入 RP_FAILED 状态,那么您将需要手动恢复集群服务,如下所述: ../trouble/ha_trgd_recover_script.dita