l7vsadm の無駄なタイムアウト待ちを修正する
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の修正により、l7vsd があがりきる前に /etc/init.d/l7vsd start が終了しないので、l7vsadm内のタイムアウト処理が 不要となる。)
●参考
l7vsd プロセスがいない場合に l7vsadm を呼ぶと、エラーが返る まで無駄な待ち時間があるので、改善したい (*1)
●症状
● 原因となっている con_interval, con_count が実装された経緯
●改善方法 以下の2段階で実施
(ステップ1の修正により、l7vsd があがりきる前に /etc/init.d/l7vsd start が終了しないので、l7vsadm内のタイムアウト処理が 不要となる。)
●参考