Pacemaker - Corosync - HA - シンプルカスタムリソーステスト - 状態スイング - 開始 - 失敗 - 停止 - 開始

Pacemaker - Corosync - HA - シンプルカスタムリソーステスト - 状態スイング - 開始 - 失敗 - 停止 - 開始

私はテストのために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}
}

関連情報