From tanuma.kouhei @ nttcom.co.jp Mon Oct 20 11:53:23 2008 From: tanuma.kouhei @ nttcom.co.jp (Kouhei TANUMA) Date: Mon, 20 Oct 2008 11:53:23 +0900 Subject: [Ultramonkey-l7-develop 199] =?iso-2022-jp?b?YWNjZXB0IBskQjt+JEslaiUiJWslNSE8JVAkS0BcQjMbKEI=?= =?iso-2022-jp?b?GyRCJDkkayVRJUMlQRsoQg==?= Message-ID: <20081020102505.9580.TANUMA.KOUHEI@nttcom.co.jp> 皆様 田沼です。 お疲れ様です。 現在の UltraMonkey-L7 の仕様で、クライアントから 1 パケット届かないと リアルサーバの決定処理に入らないため、SMTP 等、先にサーバが応答する ことを前提としているものが、うまくいかないという問題があったと思います。 sessionless などレイヤ 7 の情報を使わずにリアルサーバの決定を行う モジュールでは、クライアント接続時にリアルサーバとの接続処理を行って 問題ないので、そのようなパッチを作成しましたので、ご確認下さい。 (stable/trunk のパッチ) 変更点については、lsock とプロトコルモジュールの構造体に、 クライアント接続時にリアルサーバ決定処理を行うフラグを追加。 モジュールでは sessionless のみフラグを有効にし、他モジュールは無効。 今後、レイヤ 7 のパーシステンス処理を行わないモジュールを 作成するときはこのフラグを有効にする。(Source-IPパーシステンス等) lsock 側は、1 つの lsock に複数の VirtualService がくくりつくので、 lsock にくくりついてる VirtualService のモジュール全てでフラグが 立っている場合に、lsock のフラグも立てるという処理になっています。 接続処理の流れとしては、クライアントからの接続を accept した際に、 accept した lsock のフラグを確認し、フラグが立っている場合は、 リアルサーバとの接続処理に移り、フラグが立っていない場合は、 今までどおり、クライアントからのパケットを待ってから、 リアルサーバを決定します。 ■ 設定例(sessionless のみ) % sudo l7vsadm -l -n Layer-7 Virtual Server version 2.0.0-1 Prot LocalAddress:Port ProtoMod Scheduler -> RemoteAddress:Port Forward Weight ActiveConn InactConn TCP 192.168.0.1:25 sessionless rr -> 192.168.1.1:25 Masq 1 0 1 -> 192.168.1.2:25 Masq 1 0 1 -> 192.168.1.3:25 Masq 1 0 1 ■ 確認(220 応答が接続しただけで得られる) % telnet 192.168.0.1 25 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. 220 192.168.1.1 ESMTP Representation Server; Mon, 20 Oct 2008 10:40:25 +0900 (JST) quit 221 2.0.0 192.168.1.1 closing connection Connection closed by foreign host. ■ 設定例(同一 lsock に cinsert を追加) % sudo l7vsadm -l -n Layer-7 Virtual Server version 2.0.0-1 Prot LocalAddress:Port ProtoMod Scheduler -> RemoteAddress:Port Forward Weight ActiveConn InactConn TCP 192.168.0.1:25 sessionless rr -> 192.168.1.1:25 Masq 1 0 2 -> 192.168.1.2:25 Masq 1 0 1 -> 192.168.1.3:25 Masq 1 0 1 TCP 192.168.0.1:25 cinsert rr ■ 確認(クライアントからのパケット待ちになる) % telnet 192.168.0.1 25 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. ■ 設定例(cinsert を削除) % sudo l7vsadm -l -n Layer-7 Virtual Server version 2.0.0-1 Prot LocalAddress:Port ProtoMod Scheduler -> RemoteAddress:Port Forward Weight ActiveConn InactConn TCP 192.168.0.1:25 sessionless rr -> 192.168.1.1:25 Masq 1 0 2 -> 192.168.1.2:25 Masq 1 0 1 -> 192.168.1.3:25 Masq 1 0 1 ■ 確認(220 応答が接続しただけで得られる) % telnet 192.168.0.1 25 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. 220 192.168.1.2 ESMTP Representation Server; Mon, 20 Oct 2008 10:41:55 +0900 (JST) quit 221 2.0.0 192.168.1.2 closing connection Connection closed by foreign host. 動作上は問題なさそうですが、ご確認いただければと思います。 また、フラグ名が fast_schedule というかなりいまいちな名前に なっています。何かいい名前がありましたら、お知らせ下さい。 -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: connect_immediately.patch 型: application/octet-stream サイズ: 6607 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/ultramonkey-l7-develop/attachments/20081020/7044cc39/attachment.obj