我正在使用 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}
}