Kohei TANUMA
tanum****@nttco*****
2010年 6月 4日 (金) 14:31:39 JST
杉浦さま 田沼です。 > 極力既存のロジックに手を加えないよう対応したいと考えました。 > 従って問題の原因となるコマンドラインのみを修正する方針としています。 了解しました。 2010/06/04 14:06, Jun Sugiura wrote: > 田沼さん > > 杉浦です。お疲れ様です。 > >> 上記 -o オプションを使うことで wc -l の結果は 0 or 1 に必ずなると >> 思うのですが正しいでしょうか? > > はい、その通りです。 > >> もし正しいとすると「2 以上(異常発生)」のルートは発生しなくなると >> 思うのですが、こちらはそのままということでしょうか? >> >> -o オプションを指定しないで「1以上(稼働中)」という対応もありかなぁ >> と思います。 >> 個人的には誤検知しなければどちらでもかまいませんが…。 > > 確かにご指摘の通りなのですが、今回はできるだけ早急に対処したいと > いうこともあり、検証の手間や新たなバグの可能性を最小限に抑える為、 > 極力既存のロジックに手を加えないよう対応したいと考えました。 > 従って問題の原因となるコマンドラインのみを修正する方針としています。 > > > 以上、ご確認よろしくお願い致します。 > > > On Thu, 03 Jun 2010 18:46:48 +0900 > Kohei TANUMA <tanum****@nttco*****> wrote: > >> 杉浦さん >> >> 田沼です。 >> お疲れ様です。 >> >> すこしだけ確認させてください。 >> >>> Heartbeat へはこの結果を「0(停止)/ 1(稼働中)/ 2以上(異常発生)」 >>> として返しますので、<概要>に記載したような予期せぬフェイルオーバが >>> 発生してしまいます。 >>> -o: 該当プロセスのうち、もっとも古いPIDのみを出力する。 >>> これはPIDの大小ではなくプロセスの起動時間を見ているため、 >>> PIDがローテーションしても古いPIDを表示する。 >> 上記 -o オプションを使うことで wc -l の結果は 0 or 1 に必ずなると >> 思うのですが正しいでしょうか? >> もし正しいとすると「2 以上(異常発生)」のルートは発生しなくなると >> 思うのですが、こちらはそのままということでしょうか? >> >> -o オプションを指定しないで「1以上(稼働中)」という対応もありかなぁ >> と思います。 >> 個人的には誤検知しなければどちらでもかまいませんが…。 >> >> 以上、ご確認ください。 >> >> 2010/06/03 18:18, Jun Sugiura wrote: >>> 杉浦です。 >>> >>> ultramonkey-l7-2.1.3-0 において、同梱の Heartbeat2.1.4 用 RA >>> (L7directord / L7vsd / SSLProxy)の以下のような不具合について >>> 報告を受けましたので、情報展開します。 >>> >>> 尚、この不具合解消についてユーザからの強い要望がありますので >>> 今回、ultramonkey-l7-2.1.3-0 に添付の修正パッチのみをあてた >>> ultramonkey-l7-2.1.3-1 をリリースしたいと考えています。 >>> 以下の不具合情報と合わせてご確認下さい。 >>> >>> ●リリース日は 6/17 までを目処に考えています。 >>> ●6/10(木)までに、ご意見等ありましたらよろしくお願い致します。 >>> >>> <不具合概要> >>> >>> Heartbeat の管理リソース稼動チェック時に、対象プロセスが正常に >>> 1つのみ存在していたとしても、プロセス名に類似の文字列を含む >>> なんらかの操作がなされていた場合、プロセスが2個以上存在すると >>> 判断されフェイルオーバが発生する可能性があります。 >>> >>> <不具合箇所> >>> >>> 下記の★の部分の処理において、プロセス稼動確認の為に >>> ps + grep + wc を実施していますが、この際に例えば >>> >>> # vi "grep対象文字列" >>> >>> 等の操作がなされていた場合、その操作についても ps で拾ってしまい >>> 結果が 2 となります。 >>> Heartbeat へはこの結果を「0(停止)/ 1(稼働中)/ 2以上(異常発生)」 >>> として返しますので、<概要>に記載したような予期せぬフェイルオーバが >>> 発生してしまいます。 >>> >>> 【L7directord】 >>> 107 ############################### >>> 108 # Resource Running Check Method >>> 109 ############################### >>> 110 isRunning(){ >>> 111 RET=0 >>> ★ 112 RET=`ps -ef | grep "/usr/sbin/l7directord start" | grep -v grep | wc -l` >>> 113 return $RET >>> 114 } >>> >>> 【L7vsd】 >>> 157 ############################### >>> 158 # Resource Running Check Method >>> 159 ############################### >>> 160 isRunning(){ >>> 161 RET=0 >>> ★ 162 RET=`ps -ef | grep /usr/sbin/l7vsd | grep -v grep | wc -l` >>> 163 return $RET >>> 164 } >>> >>> 【SSLProxy】 >>> 103 ############################### >>> 104 # Resource Running Check Method >>> 105 ############################### >>> 106 isRunning(){ >>> 107 RET=0 >>> ★ 108 RET=`ps -ef | grep "/usr/sbin/sslproxy" | grep -v grep | wc -l` >>> 109 return $RET >>> 110 } >>> >>> <パッチの内容> >>> >>> 上記★の箇所の「ps -ef | grep "<パターン>" | grep -v grep」の部分について、 >>> 以下の2つの状況において本問題が発生する可能性があることを踏まえ、 >>> 「pgrep -fox "<パターン>"」に変更しています。 >>> >>> ・<パターン> を引数として実行している別のコマンドが存在する場合がある >>> ・l7vsd, l7directord プロセスが同時に2つになる可能性がある >>> >>> 使用している pgrep の各オプションの意味は以下の通りです。 >>> >>> -f: コマンド名ではなく、パス、引数を含めたコマンドライン全体を >>> マッチング対象とする。 >>> >>> -o: 該当プロセスのうち、もっとも古いPIDのみを出力する。 >>> これはPIDの大小ではなくプロセスの起動時間を見ているため、 >>> PIDがローテーションしても古いPIDを表示する。 >>> >>> このオプションにより、監視対象プロセスがfork()等の呼び出しにより >>> 複数存在する瞬間があったとしても誤検知しない。 >>> >>> -x: 指定したパターンに正確にマッチするもののみを抽出する。 >>> >>> このオプションにより、他のコマンドがその引数に <パターン> と同じ >>> 文字列を指定した場合、例えば「<他のコマンド> <パターン>」のような名前 >>> で実行されているコマンドがあったとしても、それを拾うことはなくなる。 >>> >>> マッチングさせる <パターン> については上記オプションの使用にあわせて >>> 一部変更しました。 >>> >>> >>> 以上、ご確認よろしくお願い致します。