私はテストのためにOCF:Heartbeat:Dummyスクリプトを使用していますが、それがどのように機能しビルドされるかを知るために非常に基本的な設定をしたいと思いました。
私が見つけることができる唯一の情報は、このWebブログにあります。 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}
}