From tateishi.katsuyuki @ oss.ntt.co.jp Fri Oct 16 13:57:26 2009 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Fri, 16 Oct 2009 13:57:26 +0900 (JST) Subject: [Ultramonkey-l7-develop 545] =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYlSEJUGyhC?= =?iso-2022-jp?b?GyRCJEEbKEI=?= Message-ID: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> 立石です。 l7vsd プロセスがいない場合に l7vsadm を呼ぶと、エラーが返る まで無駄な待ち時間があるので、改善したいと思っています。 改善の方向性について、みなさんのご意見を聞かせてください。 ●症状 l7vsadm は l7vsd に UNIX ドメインソケットで接続して指示を出 しますが、l7vsd のプロセスが存在しない場合にも接続しようとし て l7vs.cf の [l7vsadm] セクションに設定された con_interval(秒) のインターバルで sleep しつつ con_count(回) だけ再試行を繰り返すので、デフォルトで 10 秒待つことになりま す。 現在、上記の仕様を原因として困っているのは、 Heartbeat で冗長 構成を取っているときに l7vsd が異常終了した場合、フェイルオー バに時間がかかるところです。 UltraMonkey-L7 に付属の Heartbeat RA, cib.xml を使って冗長構 成を組むと、l7vsd の異常を検知してから切り替えるときには一旦 /etc/init.d/l7directord stop を発行して l7directord を停止し ようとします。 このとき /usr/sbin/l7directord 内部で l7vsadm が(virtual の数) + 1 回呼ばれますので、l7directord は l7vsd が SIGKILL 等で死 んでいた場合、止まるまでかなりの時間を要することになります。 ●改善方法 おおまかに以下の二通りあるのかなと思ってます。 * 改善方法1: l7vsadm の con_interval, con_count の廃止 connect()に失敗したら、直ちにエラーで終了するようにする。 * 改善方法2: l7vsadm 起動時に l7vsd の生死を判定 起動直後、l7vsd のプロセスが存在するかどうかを調べ、 a) l7vsd のプロセスがいない場合、すぐにエラーで終了する b) l7vsd のプロセスがいる場合、これまでどおり処理を継続する。 当初 2 を考えていたんですが、 con_interval, con_count が connect() 失敗のときの再試行のためだけにしか使われておらず、 今は単純な 1 で充分な気がしています。(相手のソケットもローカ ルに存在する UNIX ドメインで失敗するのであれば、よほど致命的 な状況で待っても無駄だと思うので。) con_interval, con_count を導入した経緯を知らないので、この当 たりの事情をご存知の方がいらしたら教えていただけると助かります。 「1がいい」とか、「2がいい」とか、「そもそも、そんなことしな くても〜」と言ったご意見も募集します。 -- TATEISHI Katsuyuki From tanuma.kouhei @ nttcom.co.jp Fri Oct 16 16:32:01 2009 From: tanuma.kouhei @ nttcom.co.jp (Kohei TANUMA) Date: Fri, 16 Oct 2009 16:32:01 +0900 Subject: [Ultramonkey-l7-develop 546] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> References: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> Message-ID: <4AD82171.6000202@nttcom.co.jp> 立石さま 田沼です。 私もこれは直した方がいいと思います。 付属の cib.xml を使った場合、L7directord の設定が timeout="60s" となっているため、 > デフォルトで 10 秒待つことになります。 > このとき /usr/sbin/l7directord 内部で l7vsadm が > (virtual の数) + 1 回呼ばれますので、 上記より、virtual が 5 個以上ある場合、 L7directord の stop 処理がタイムアウトします。 タイムアウトした場合、on_fail="block" のせいかどうか わかりませんが、L7directord が unmanaged 状態になり 完全なサービス停止となってしまうようです。 改善方法については、特に意見はありません。 TATEISHI Katsuyuki さんは書きました: > 立石です。 > > l7vsd プロセスがいない場合に l7vsadm を呼ぶと、エラーが返る > まで無駄な待ち時間があるので、改善したいと思っています。 > 改善の方向性について、みなさんのご意見を聞かせてください。 > > ●症状 > l7vsadm は l7vsd に UNIX ドメインソケットで接続して指示を出 > しますが、l7vsd のプロセスが存在しない場合にも接続しようとし > て l7vs.cf の [l7vsadm] セクションに設定された > con_interval(秒) のインターバルで sleep しつつ con_count(回) > だけ再試行を繰り返すので、デフォルトで 10 秒待つことになりま > す。 > > 現在、上記の仕様を原因として困っているのは、 Heartbeat で冗長 > 構成を取っているときに l7vsd が異常終了した場合、フェイルオー > バに時間がかかるところです。 > > UltraMonkey-L7 に付属の Heartbeat RA, cib.xml を使って冗長構 > 成を組むと、l7vsd の異常を検知してから切り替えるときには一旦 > /etc/init.d/l7directord stop を発行して l7directord を停止し > ようとします。 > このとき /usr/sbin/l7directord 内部で l7vsadm が(virtual の数) > + 1 回呼ばれますので、l7directord は l7vsd が SIGKILL 等で死 > んでいた場合、止まるまでかなりの時間を要することになります。 > > > ●改善方法 > おおまかに以下の二通りあるのかなと思ってます。 > > * 改善方法1: l7vsadm の con_interval, con_count の廃止 > connect()に失敗したら、直ちにエラーで終了するようにする。 > > * 改善方法2: l7vsadm 起動時に l7vsd の生死を判定 > 起動直後、l7vsd のプロセスが存在するかどうかを調べ、 > a) l7vsd のプロセスがいない場合、すぐにエラーで終了する > b) l7vsd のプロセスがいる場合、これまでどおり処理を継続する。 > > 当初 2 を考えていたんですが、 con_interval, con_count が > connect() 失敗のときの再試行のためだけにしか使われておらず、 > 今は単純な 1 で充分な気がしています。(相手のソケットもローカ > ルに存在する UNIX ドメインで失敗するのであれば、よほど致命的 > な状況で待っても無駄だと思うので。) > > con_interval, con_count を導入した経緯を知らないので、この当 > たりの事情をご存知の方がいらしたら教えていただけると助かります。 > > 「1がいい」とか、「2がいい」とか、「そもそも、そんなことしな > くても〜」と言ったご意見も募集します。 From tateishi.katsuyuki @ oss.ntt.co.jp Fri Oct 16 17:29:59 2009 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Fri, 16 Oct 2009 17:29:59 +0900 (JST) Subject: [Ultramonkey-l7-develop 547] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <4AD82171.6000202@nttcom.co.jp> References: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> <4AD82171.6000202@nttcom.co.jp> Message-ID: <20091016.172959.287595821992068745.tateishi.katsuyuki@oss.ntt.co.jp> 立石です。 From: Kohei TANUMA Subject: Re: l7vsadm の無駄なタイムアウト待ち Date: Fri, 16 Oct 2009 16:32:01 +0900 > 私もこれは直した方がいいと思います。 > 付属の cib.xml を使った場合、L7directord の設定が > timeout="60s" となっているため、 > >> デフォルトで 10 秒待つことになります。 > >> このとき /usr/sbin/l7directord 内部で l7vsadm が >> (virtual の数) + 1 回呼ばれますので、 > > 上記より、virtual が 5 個以上ある場合、 > L7directord の stop 処理がタイムアウトします。 > タイムアウトした場合、on_fail="block" のせいかどうか > わかりませんが、L7directord が unmanaged 状態になり > 完全なサービス停止となってしまうようです。 要保守者介在となってしまうということですね・・・ 情報ありがとうございます。 > 改善方法については、特に意見はありません。 了解です。 -- TATEISHI Katsuyuki From morisita.tooru @ nttcom.co.jp Fri Oct 16 18:10:33 2009 From: morisita.tooru @ nttcom.co.jp (=?ISO-2022-JP?B?GyRCPzkyPEUwGyhC?=) Date: Fri, 16 Oct 2009 18:10:33 +0900 Subject: [Ultramonkey-l7-develop 548] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> References: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> Message-ID: <4AD83889.6020907@nttcom.co.jp> 立石様 関係各位 森下です。 反応遅くてすみません。 l7vsadmのリトライ処理の経緯ですが、 これは、たしか起動時にl7vsdが自動起動される場合、 l7vsdが上がりきる前に、l7directordがl7vsadmコマンドを 発行してしまい、エラーとなる事象が判明し、 そのために入れている機能です。 マシンスペックによってはタイミングが異なるので 設定で変えられるようにしています。 なので、単純にこの機能はいらないとはいえないと 思っています。 取り急ぎ報告します。 TATEISHI Katsuyuki さんは書きました: > 立石です。 > > l7vsd プロセスがいない場合に l7vsadm を呼ぶと、エラーが返る > まで無駄な待ち時間があるので、改善したいと思っています。 > 改善の方向性について、みなさんのご意見を聞かせてください。 > > ●症状 > l7vsadm は l7vsd に UNIX ドメインソケットで接続して指示を出 > しますが、l7vsd のプロセスが存在しない場合にも接続しようとし > て l7vs.cf の [l7vsadm] セクションに設定された > con_interval(秒) のインターバルで sleep しつつ con_count(回) > だけ再試行を繰り返すので、デフォルトで 10 秒待つことになりま > す。 > > 現在、上記の仕様を原因として困っているのは、 Heartbeat で冗長 > 構成を取っているときに l7vsd が異常終了した場合、フェイルオー > バに時間がかかるところです。 > > UltraMonkey-L7 に付属の Heartbeat RA, cib.xml を使って冗長構 > 成を組むと、l7vsd の異常を検知してから切り替えるときには一旦 > /etc/init.d/l7directord stop を発行して l7directord を停止し > ようとします。 > このとき /usr/sbin/l7directord 内部で l7vsadm が(virtual の数) > + 1 回呼ばれますので、l7directord は l7vsd が SIGKILL 等で死 > んでいた場合、止まるまでかなりの時間を要することになります。 > > > ●改善方法 > おおまかに以下の二通りあるのかなと思ってます。 > > * 改善方法1: l7vsadm の con_interval, con_count の廃止 > connect()に失敗したら、直ちにエラーで終了するようにする。 > > * 改善方法2: l7vsadm 起動時に l7vsd の生死を判定 > 起動直後、l7vsd のプロセスが存在するかどうかを調べ、 > a) l7vsd のプロセスがいない場合、すぐにエラーで終了する > b) l7vsd のプロセスがいる場合、これまでどおり処理を継続する。 > > 当初 2 を考えていたんですが、 con_interval, con_count が > connect() 失敗のときの再試行のためだけにしか使われておらず、 > 今は単純な 1 で充分な気がしています。(相手のソケットもローカ > ルに存在する UNIX ドメインで失敗するのであれば、よほど致命的 > な状況で待っても無駄だと思うので。) > > con_interval, con_count を導入した経緯を知らないので、この当 > たりの事情をご存知の方がいらしたら教えていただけると助かります。 > > 「1がいい」とか、「2がいい」とか、「そもそも、そんなことしな > くても〜」と言ったご意見も募集します。 > > -- > TATEISHI Katsuyuki > > _______________________________________________ > Ultramonkey-l7-develop mailing list > Ultramonkey-l7-develop @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop > > > From kt @ wheel.jp Fri Oct 16 23:11:03 2009 From: kt @ wheel.jp (TATEISHI Katsuyuki) Date: Fri, 16 Oct 2009 23:11:03 +0900 (JST) Subject: [Ultramonkey-l7-develop 549] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <4AD83889.6020907@nttcom.co.jp> References: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> <4AD83889.6020907@nttcom.co.jp> Message-ID: <20091016.231103.75173118873192452.kt@wheel.jp> 立石です。 情報ありがとうございます。 From: 森下徹 > l7vsadmのリトライ処理の経緯ですが、 > > これは、たしか起動時にl7vsdが自動起動される場合、 > l7vsdが上がりきる前に、l7directordがl7vsadmコマンドを > 発行してしまい、エラーとなる事象が判明し、 > そのために入れている機能です。 なるほど。 だとすると、/etc/init.d/l7vsd が start 時に、l7vsadm -l -n が 正常終了するまで終わらないようになれば不要な機能だと思ってい いですか? 例えば以下のように: ============================================================ diff --git a/init.d/l7vsd b/init.d/l7vsd index ff78711..61cdfb6 100755 --- a/init.d/l7vsd +++ b/init.d/l7vsd @@ -42,6 +42,17 @@ start() { echo "done." pidof $PROG > $PIDFILE touch $LOCKFILE + con_count=10 + con_interval=1 + while [ $con_count -gt 0 ] + do + l7vsadm -l -n > /dev/null 2>&1 + if [ $? -eq 0 ]; then + break + fi + con_count=`expr $con_count - 1` + sleep $con_interval + done fi return $RETVAL ============================================================ heartbeat 用 RA の L7vsd 内からも /etc/init.d/l7vsd を呼んで いるので、これで良いかなと思いますが、他に問題の発生しそうな ところがあれば、教えていただければと思います。 -- TATEISHI Katsuyuki