Pacemaker - Corosync - HA - 简单自定义资源测试 - 状态摆动 - 已启动 - 失败 - 已停止 - 已启动

Pacemaker - Corosync - HA - 简单自定义资源测试 - 状态摆动 - 已启动 - 失败 - 已停止 - 已启动

我正在使用 OCF:Heartbeat:Dummy 脚本进行测试,我想进行一个非常基本的设置,只是为了知道它的工作原理并在此基础上进行构建。

我能找到的唯一信息是这里的这个网络博客。 https://raymii.org/s/tutorials/Corosync_Pacemaker_-_Execute_a_script_on_failover.html

它有一些错别字,但基本上对我有用。

该脚本当前仅包含以下内容:

sudo nano /usr/local/bin/failover.sh && sudo chmod +x /usr/local/bin/failover.sh

#!/bin/sh

touch /tmp/testfailover.sh

这是我的设置:

cp /usr/lib/ocf/resource.d/heartbeat/Dummy /usr/lib/ocf/resource.d/heartbeat/FailOverScript

sudo nano /usr/lib/ocf/resource.d/heartbeat/FailOverScript

dummy_start() {
    dummy_monitor
    /usr/local/bin/failover.sh
    if [ $? =  $OCF_SUCCESS ]; then
    return $OCF_SUCCESS
    fi
    touch ${OCF_RESKEY_state}
}

sed -i 's/Dummy/FailOverScript/g' /usr/lib/ocf/resource.d/heartbeat/FailOverScript



sed -i 's/dummy/FailOverScript/g' /usr/lib/ocf/resource.d/heartbeat/FailOverScript

pcs resource create FailOverScript ocf:heartbeat:FailOverScript op monitor interval="30"

我真正能做的唯一测试:

[root@node2 ~]# /usr/lib/ocf/resource.d/heartbeat/FailOverScript start ; echo $?
DEBUG: default start : 0
0

ocf-tester 似乎不存在于最新的 HA 软件套件中,不太确定如何手动安装它,但脚本“一半有效”。

该脚本不需要监控,它应该是非常基本的,但它似乎在抖动并给我以下错误代码。知道该怎么做吗?

FailOverScript (ocf::heartbeat:FailOverScript):        Started
node2

Failed Actions:
* FailOverScript_monitor_30000 on node2 'not running' (7): call=
24423, status=complete, exitreason='none',
    last-rc-change='Tue Aug 16 15:53:50 2016', queued=0ms, exec=
9ms

我想做的示例:

集群启动

脚本运行“start.sh”

集群故障转移到节点2。

在node1上脚本运行“fail.sh”

在node2上脚本运行“start.sh”

反之亦然,如果它在另一个方向上失败了。

注意:该脚本确实有效,我得到/tmp/testfailover.sh。我什至尝试将另一个脚本放在 dummy_stop 下以删除文件并且有效,但它只是不断地在删除/添加/删除/添加文件和启动/失败/停止/启动等过程中抖动。

谢谢阅读!

答案1

我发现问题了,有一个错字那个指南。您的命令不应位于dummy_monitor和之间if [ $? = $OCF_SUCCESS ]; then。那是因为它$?取的是命令的返回结果dummy_monitor。它应该是:

dummy_start() {
    dummy_monitor
    if [ $? =  $OCF_SUCCESS ]; then
    /usr/local/bin/failover.sh
    return $OCF_SUCCESS
    fi
    touch ${OCF_RESKEY_state}
}

经过一些测试后编辑:

上面的格式只是消除了错误,但实际上并没有在故障转移时运行脚本,如果您想在故障转移时实际运行脚本,请使用:

dummy_start() {
    dummy_monitor
    if [ $? =  $OCF_SUCCESS ]; then
    return $OCF_SUCCESS
    fi
    /usr/local/bin/failover.sh
    touch ${OCF_RESKEY_state}
}

相关内容