Ubuntu 14.04 LTSで次のガイドを使用して、Corosync/Pacemakerクラスター+ HAproxyをセットアップします。 http://www.sebastien-han.fr/blog/2012/04/15/active-passive-failover-cluster- on-a-mysql-galera-cluster-with-haproxy-lsb-agent /
仮想IPセットアップを追加していません。両方ともHaproxyがインストールされている2つのノードのみを追加しました。私はlsb:haproxyを使用しており、構成は次のとおりです。
すべてをテストするために、次のコマンドを実行してhaproxyプロセスを強制終了します。Sudokill-9 [PID#]
次に、クラスターのステータスを確認すると、「失敗したアクション:特権が不十分です」というエラーメッセージが表示されます。 haproxyユーザー/グループ定義を変更せず、aisexec {}はユーザーとグループの両方にrootを使用しています。
Corosync/PacemakerにHaproxyを管理させたい場合、私の権限はどうあるべきですか?
EDIT:以下のservice stopコマンドを実行すると、haproxyが期待どおりに再起動します。チェック中crm status
haproxyデーモンは通常どおり実行されています
# Sudo service haproxy stop
# Sudo crm status
HaproxyHA (lsb:haproxy): Started node1
Failed Actions:
しかし、手動でpidを強制終了すると、エラーが表示され続けます。
# Sudo kill -9 $PID
HaproxyHA (lsb:haproxy): Started node1 (unmanaged) FAILED
Failed Actions:
変更を実装した後、フェデリコは(/bin/kill $pid || return 7)
それは私の問題を変えません、そして私は私のログでこれを見つけます:
pengine: warning: unpack_rsc_op: Processing failed op stop for HaproxyHA on node1: not running (7)
問題は initスクリプト にあると思いますが、 LSB仕様 を尊重していません。
関数haproxy_stop
を見ると、ファイル/etc/init.d/haproxy
にあります。
haproxy_stop()
{
if [ ! -f $PIDFILE ] ; then
# This is a success according to LSB
return 0
fi
for pid in $(cat $PIDFILE) ; do
/bin/kill $pid || return 4
done
rm -f $PIDFILE
return 0
}
特に、行/bin/kill $pid || return 4
。これにより、プロセスが強制終了された場合の戻り値は4になります。これは、仕様によれば、ユーザーの特権が不十分でした。これは正しくありません。
ステータス以外のinit-scriptアクションの処理中にエラーが発生した場合、initスクリプトはエラーメッセージを出力し、ゼロ以外のステータスコードで終了します。
1 generic or unspecified error (current practice) 2 invalid or excess argument(s) 3 unimplemented feature (for example, "reload") 4 user had insufficient privilege 5 program is not installed 6 program is not configured 7 program is not running 8-99 reserved for future LSB use 100-149 reserved for distribution use 150-199 reserved for application use 200-254 reserved
次の方法で変更を試みることができます。
/bin/kill $pid || return 7
正しい方法は killproc(8) でデーモンを停止することです。これが失敗した場合、killproc
はLSBに従って戻り値を設定します。
例
/sbin/killproc -p $PIDFILE $HAPROXY
このpidが$ HAPROXYに属している場合に限り、シグナルSIGTERMを
$PIDFILE
にあるpidに送信します。指定された$PIDFILE
が存在しない場合、killprocは$ HAPROXYのデーモンが実行されていないと見なします。終了ステータスは、デフォルトのシグナルSIGTERMおよびSIGKILLを正常に配信するために0に設定され、プログラムが実行されていない場合は7に設定されます。シグナルが指定されておらず、すでに終了しているために終了用のプログラムがなかった場合も成功します。