Tíquete #19261

l7vsadm の無駄なタイムアウト待ちを修正する

: 2009-10-21 16:54 Última Atualização: 2009-10-21 16:54

Relator:
Dono:
Tipo:
Estado:
Aberto [Owner assigned]
Componente:
Marcos:
(Nenhum)
Prioridade:
5 - Medium
Gravidade:
5 - Medium
Resolução:
Nenhum
Arquivo:
Nenhum

Details

l7vsd プロセスがいない場合に l7vsadm を呼ぶと、エラーが返る まで無駄な待ち時間があるので、改善したい (*1)

●症状

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 等で死
んでいた場合、止まるまでかなりの時間を要することになります。

なお、Heartbeat による冗長構成を組んでいる環境で virtual サー
ビスの数が多いと、l7vsd 故障時に l7directordが終了するまえに
Heartbeat がタイムアウトしてしまい、unmanaged 状態になってし
まう可能性もあります [*2]

● 原因となっている con_interval, con_count が実装された経緯

この事象の原因となっている機能は、起動時にl7vsdが自動起動され
る場合、l7vsdが上がりきる前に、l7directordがl7vsadmコマンドを
発行してしまい、エラーとなる事象が判明したため、実装されてい
ます。[*3]

●改善方法 以下の2段階で実施

  • ステップ1: /etc/init.d/l7vsd の start 時、l7vsadm がエラー無くつながるまでスクリプトを終わらないように修正。
  • ステップ2: l7vsadm の con_interval, con_count を廃止し、connect()に失敗したら、直ちにエラーで終了するように修正。

(ステップ1の修正により、l7vsd があがりきる前に /etc/init.d/l7vsd start が終了しないので、l7vsadm内のタイムアウト処理が 不要となる。)

●参考

  1. http://sourceforge.jp/projects/ultramonkey-l7/lists/archive/develop/20091016/000544.html
  2. http://sourceforge.jp/projects/ultramonkey-l7/lists/archive/develop/20091016/000545.html
  3. http://sourceforge.jp/projects/ultramonkey-l7/lists/archive/develop/20091016/000547.html

Ticket History (1/1 Histories)

2009-10-21 16:54 Updated by: ktateish
  • New Ticket "l7vsadm の無駄なタイムアウト待ちを修正する" created

Attachment File List

No attachments

Editar

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login