如何使用脚本监控Pacemaker集群?

如何使用脚本监控Pacemaker集群?

我使用 . 创建了一个双节点集群(两个节点都是 RHEL 7)pacemaker。它用于运行自定义应用程序。我创建了以下资源并将其分配给集群:

  1. 应用程序数据的共享存储
  2. 虚拟IP

它工作得很好。

现在,我们有一个要求。目前,仅当整个服务器出现问题时才会发生故障转移。 Pacemaker 不知道活动节点上运行的应用程序的状态,并完全忽略它。我们有一个 shell 脚本,能够对应用程序运行运行状况检查,并根据应用程序的运行状况返回 true/false 值。
任何人都可以建议我如何配置pacemaker以使用此shell脚本定期检查集群活动节点上应用程序的状态,并在脚本返回错误值时启动故障转移。

我见过一些例子,在 Web 服务器集群中,人们创建了一个示例 html 页面,并使用此 ( http://127.0.0.1/samplepage.html) 作为pacemaker 的资源来检查活动节点中 apache web 服务器的运行状况。

请指导我如何使用 shell 脚本实现类似的结果。

更新:

这是我的配置:

[root@node1 ~]# pcs status
Cluster name: webspheremq
Stack: corosync
Current DC: node1 (version 1.1.15-11.el7-e174ec8) - partition with quorum
Last updated: Wed Jun 14 20:38:48 2017          Last change: Tue Jun 13 20:04:58 2017 by root via crm_attribute on svdg-stg29

2 nodes and 3 resources configured: 2 resources DISABLED and 0 BLOCKED from being started due to failures

Online: [ node1 node2 ]

Full list of resources:

 Resource Group: websphere
     websphere_fs       (ocf::heartbeat:Filesystem):    Started node1
     websphere_vip      (ocf::heartbeat:IPaddr2):       Started node1
     FailOverScript     (ocf::heartbeat:Dummy): Started node1


Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

为了启动和停止应用程序,我有两个 shell 脚本。在故障转移期间,我需要stop.sh在资源将从中移动的节点中运行,并start.sh在集群故障转移到的节点中运行。

我做了一些实验,发现人们正在使用虚拟资源来实现这种要求(在故障转移期间执行脚本)。

这是我到目前为止所做的:

我创建了一个虚拟资源(FailOverScript)来测试应用程序启动/停止脚本,如下所示:

[root@node1 tmp]# pcs status resources
 Resource Group: websphere
     websphere_fs       (ocf::heartbeat:Filesystem):    Started node1
     websphere_vip      (ocf::heartbeat:IPaddr2):       Started node1
     **FailOverScript     (ocf::heartbeat:Dummy): Started node1**

截至目前,我在资源 FailOverScript 的启动和停止操作下包含了测试脚本。当这个虚拟资源启动和停止时,它应该分别执行脚本failoverstartscript.sh和failoverstopscript.sh。

[root@node1 heartbeat]# pwd
/usr/lib/ocf/resource.d/heartbeat
[root@node1  heartbeat]#
[root@node1  heartbeat]# grep -A5 "start()" FailOverScript
FailOverScript_start() {
    FailOverScript_monitor
    /usr/local/bin/failoverstartscript.sh
    if [ $? =  $OCF_SUCCESS ]; then
        return $OCF_SUCCESS
    fi
[root@node1  heartbeat]#
[root@node1  heartbeat]#
[root@node1  heartbeat]# grep -A5 "stop()" FailOverScript
FailOverScript_stop() {
    FailOverScript_monitor
    /usr/local/bin/failoverstopscript.sh
    if [ $? =  $OCF_SUCCESS ]; then
        rm ${OCF_RESKEY_state}
    fi

但是,当启动/停止该虚拟资源(通过手动故障转移)时,该脚本不会执行。尝试了不同的方法,但我仍然无法找出原因。需要一些帮助来查找脚本在故障转移期间不自动执行的原因。

答案1

anything您可以考虑使用资源代理,而不是尝试修改虚拟 RA 来执行任意脚本。

# pcs resource describe ocf:heartbeat:anything
ocf:heartbeat:anything - Manages an arbitrary service

This is a generic OCF RA to manage almost anything.

Resource options:
  binfile (required): The full name of the binary to be executed.
                      This is expected to keep running with the
                      same pid and not just do something and
                      exit.
  cmdline_options: Command line options to pass to the binary
  workdir: The path from where the binfile will be executed.
  pidfile: File to read/write the PID from/to.
  logfile: File to write STDOUT to
  errlogfile: File to write STDERR to
  user: User to run the command as
  monitor_hook: Command to run in monitor operation
  stop_timeout: In the stop operation: Seconds to wait for kill
                -TERM to succeed before sending kill -SIGKILL.
                Defaults to 2/3 of the stop operation timeout.

您可以将anything代理指向您的脚本作为binfile=参数,然后,如果您有某种方法来监视自定义应用程序,而不是检查正在运行的 pid(这是代理anything默认执行的操作),则可以在monitor_hook参数中进行定义。

相关内容