第 28 章 为集群事件触发脚本

Pacemaker 集群是一个事件驱动的系统,其中事件可能是资源或节点故障、配置更改或资源启动或停止。您可以将 Pacemaker 集群警报配置为在集群事件发生时执行一些外部操作,警报代理是集群调用的外部程序,其方式与集群调用的资源代理处理资源配置和操作相同。

集群使用环境变量将事件信息传递给代理。代理可以执行任何操作,比如发送电子邮件信息或登录到某个文件或更新监控系统。

  • Pacemaker 提供了几个示例报警代理,这些代理默认安装在 /usr/share/pacemaker/alerts 中。这些样本脚本可以像现在一样复制和使用,或者可作为模板使用,以适应您的目的。关于它们支持的所有属性,请参考样本代理的源代码。
  • 如果示例警报代理不满足您的需要,您可以编写自己的警报代理来调用。

28.1. 安装并配置示例警报代理

当使用示例警报代理时,您应该检查该脚本以确保它适合您的需要。这些示例代理是作为特定集群环境自定义脚本的起点。请注意,虽然红帽支持报警代理脚本用来与 Pacemaker 进行通信的接口,但红帽并不支持自定义代理。

要使用示例报警代理中的一个,您必须在集群中的每个节点上安装代理。例如,以下命令安装 alert_file.sh.sample 脚本来作为 alert_file.sh

# install --mode=0755 /usr/share/pacemaker/alerts/alert_file.sh.sample /var/lib/pacemaker/alert_file.sh

安装脚本后,您可以创建使用该脚本的报警。

以下示例配置了一个报警,其使用安装的 alert_file.sh 报警代理将事件记录到文件中。报警代理是以用户 hacluster 身份运行的,该用户具有最小的权限集。

这个示例创建了一个日志文件 pcmk_alert_file.log,该文件将用于记录事件。然后,它会创建报警代理,并将路径添加到日志文件来作为其接收者。

# touch /var/log/pcmk_alert_file.log
# chown hacluster:haclient /var/log/pcmk_alert_file.log
# chmod 600 /var/log/pcmk_alert_file.log
# pcs alert create id=alert_file description="Log events to a file." path=/var/lib/pacemaker/alert_file.sh
# pcs alert recipient add alert_file id=my-alert_logfile value=/var/log/pcmk_alert_file.log

以下示例安装了 alert_snmp.sh.sample 脚本来作为 alert_snmp.sh,并配置了一个报警,其使用安装的 alert_snmp.sh 报警代理来将集群事件作为 SNMP 陷阱发送。默认情况下,该脚本会发送除成功监控调用 SNMP 服务器外的所有事件。这个示例将时间戳格式配置为 meta 选项。配置报警后,本例为报警配置了一个接收者,并显示报警配置。

# install --mode=0755 /usr/share/pacemaker/alerts/alert_snmp.sh.sample /var/lib/pacemaker/alert_snmp.sh
# pcs alert create id=snmp_alert path=/var/lib/pacemaker/alert_snmp.sh meta timestamp-format="%Y-%m-%d,%H:%M:%S.%01N"
# pcs alert recipient add snmp_alert value=192.168.1.2
# pcs alert
Alerts:
 Alert: snmp_alert (path=/var/lib/pacemaker/alert_snmp.sh)
  Meta options: timestamp-format=%Y-%m-%d,%H:%M:%S.%01N.
  Recipients:
   Recipient: snmp_alert-recipient (value=192.168.1.2)

以下示例安装了 alert_smtp.sh 代理,然后配置了一个报警,其使用安装的报警代理来将集群事件作为电子邮件消息发送。配置报警后,本示例配置了一个接收者,并显示报警配置。

# install --mode=0755 /usr/share/pacemaker/alerts/alert_smtp.sh.sample /var/lib/pacemaker/alert_smtp.sh
# pcs alert create id=smtp_alert path=/var/lib/pacemaker/alert_smtp.sh options email_sender=donotreply@example.com
# pcs alert recipient add smtp_alert value=admin@example.com
# pcs alert
Alerts:
 Alert: smtp_alert (path=/var/lib/pacemaker/alert_smtp.sh)
  Options: email_sender=donotreply@example.com
  Recipients:
   Recipient: smtp_alert-recipient (value=admin@example.com)