From j_terauchi @ msc-inc.co.jp Mon Jul 23 21:21:26 2007 From: j_terauchi @ msc-inc.co.jp (j_terauchi) Date: Mon, 23 Jul 2007 21:21:26 +0900 Subject: [Ultramonkey-l7-users 66] =?iso-2022-jp?b?VWx0cmFtb25rZXktbDcbJEIkSyQqJDEkayEiIVY5YjJEGyhC?= =?iso-2022-jp?b?GyRCTVFALSEiSVQyREosOzYkTjh6TigyPSFXJEckTiUoGyhC?= =?iso-2022-jp?b?GyRCJWkhPBsoQg==?= Message-ID: <000001c7cd24$016a5110$c703a8c0@TERAUCHI> ■Ultramonkey-l7-usersの皆様 お世話になります。寺内と申します。 Ultramonkey-l7を実装するにあたり、 Linux Director兼実サーバを2台構成でテストしています。 ○仮想IP msc-web(192.168.4.20) ○サーバ1 web1(192.168.4.21) ○サーバ2 web2(192.168.4.22) ※サーバ1、2共にサービスはhttpdが起動しています。 基本的な各種設定は、「UltraMonkey-L7 インストールマニュアル v1.3」及び 「高可用性、不可分散の効率化」トポロジを参考にしております。 ▼/etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 mcast eth0 225.0.0.1 694 1 0 ucast eth0 192.168.4.22 auto_failback off node web1 node web2 apiauth lha-snmpagent uid=root ▼/etc/ha.d/haresources web1 192.168.4.20 IPaddr::192.168.4.20/24/eth0:0 l7directord:: ▼/etc/ha.d/authkeys auth 1 1 crc ▼/etc/ha.d/conf/l7directord.cf # Global Directives checktimeout=4 checkinterval=3 autoreload=yes logfile="/var/log/l7directord.log" quiescent=yes # A sample virual with a fallback that will override the gobal setting # Virtual Server for HTTP virtual=192.168.4.20:8089 real=192.168.4.21:80 masq real=192.168.4.22:80 masq module=cinsert --cookie-name 'monkey' #fallback=127.0.0.1:80 masq service=http request="index.html" receive="Test Page" scheduler=rr protocol=tcp checktype=negotiate quiescent=no # Virtual Server for HTTPS virtual=192.168.4.20:8443 real=192.168.4.21:443 masq real=192.168.4.22:443 masq module=cinsert --cookie-name 'monkey' #fallback=127.0.0.1:80 masq service=https request="index.html" receive="Test Page" scheduler=rr protocol=tcp checktype=negotiate quiescent=no 上記の状態で、サーバ1→サーバ2の順に、 l7vsd,l7syncd,l7Heartbeatを起動 サーバ1(web1)から、l7vsadm -L コマンドを実行すると、 Layer-7 Virtual Server version 0.5.0-3 Prot LocalAddress:Port Scheduler ProtoMod -> RemoteAddress:Port Forward Weight ActiveConn InactConn TCP msc-web:8089 cinsert rr -> web1:http Masq 1 0 0 -> web2:http Masq 1 0 0 TCP msc-web:8443 cinsert rr -> web1:https Masq 1 0 0 -> web2:https Masq 1 0 0 ※http,https共に、仮想カーネルテーブルの設定を実サービスのポート番号 と同一にすると、以下のエラーとなり、テーブル追加ができませんでした。 〜/var/log/l7directord.logの抜粋 [Mon Jul 23 20:08:38 2007|l7directord] system(/usr/sbin/l7vsadm -A -t 192.168.4.20:80 -m cinsert --cookie-name 'monkey' -s rr ) failed: [Mon Jul 23 20:08:38 2007|l7directord] Added virtual server: 192.168.4.20:80 cinsert --cookie-name monkey [Mon Jul 23 20:08:38 2007|l7directord] system(/usr/sbin/l7vsadm -A -t 192.168.4.20:443 -m cinsert --cookie-name 'monkey' -s rr ) failed: Inappropriate ioctl for device [Mon Jul 23 20:08:38 2007|l7directord] Added virtual server: 192.168.4.20:443 cinsert --cookie-name monkey その為、http,https用に別ポート番号を割り当てています。 ◇別のホスト(同一ネットワーク)からの接続テストの結果 [root @ db1 ~]# curl http://msc-web:8089/index.html Test Page Test Page(Secondary:192.168.4.22) [root @ db1 ~]# curl http://msc-web:8089/index.html Test Page Test Page(Primary:192.168.4.21) ◇アクセス毎に、サーバ1、サーバ2に分散されています。 又、Windowsクライアントから、http://msc-web:8089/index.html にアクセスすると、該当ページが正常に表示されます。 ◆少し、長くなりましたが、この状態で、サーバ1のhttpdサービスを停止 すると、Windowsクライアントからのアクセスが、「ページを表示できません。」 となってしまいます。 ※但し、上記curl のテストでは、サーバ2のテストページが取得できています。 サーバ1(web1)から、l7vsadm -L コマンドを実行すると、 Layer-7 Virtual Server version 0.5.0-3 Prot LocalAddress:Port Scheduler ProtoMod -> RemoteAddress:Port Forward Weight ActiveConn InactConn TCP msc-web:8089 cinsert rr -> web2:http Masq 1 0 0 TCP msc-web:8443 cinsert rr -> web2:https Masq 1 0 0 となっています。 ※サーバ1のHeartbeatを停止した際には、サーバ2にIPアドレスが引き継がれる ことも確認できています。 非常に長文になりましたが、解決の糸口が見つからず、ご助力頂けたらと思い メールさせて頂きました。 よろしくお願い致します。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 寺内 潤(Terauchi Jun) E-Mail:j_terauchi @ msc-inc.co.jp _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ From makoto @ kanon-net.jp Mon Jul 23 23:06:38 2007 From: makoto @ kanon-net.jp (Shinya TAKEBAYASHI) Date: Mon, 23 Jul 2007 23:06:38 +0900 Subject: [Ultramonkey-l7-users 67] Re: =?iso-2022-jp?b?VWx0cmFtb25rZXktbDcbJEIkSyQqJDEkayEiIVYbKEI=?= =?iso-2022-jp?b?GyRCOWIyRE1RQC0hIklUMkRKLDs2JE44ek4oMj0hVyRHGyhC?= =?iso-2022-jp?b?GyRCJE4lKCVpITwbKEI=?= In-Reply-To: <000001c7cd24$016a5110$c703a8c0@TERAUCHI> References: <000001c7cd24$016a5110$c703a8c0@TERAUCHI> Message-ID: ※ 返信のメールの宛先に ML を入れ忘れたので,再送します. 寺内 様 竹林と申します. よろしくお願いします. > ◆少し、長くなりましたが、この状態で、サーバ1のhttpdサービスを停止 > すると、Windowsクライアントからのアクセスが、「ページを表示できません。 」 > となってしまいます。 Cookie insert モードの場合,クライアント側に振り分け先リアルサーバを 識別するための cookie を付与します. UltraMonkey-L7 は,この cookie の内容を元にリアルサーバを判定 することで,パーシステンス機能(同一のリアルサーバに割振る)を 実現しています. Windows 上の Web ブラウザの cookie をみると,monkey というエントリが 追加されているはずです. insert モードの処理の流れとしては, 1. クライアントからリクエストがくる UltraMonkey-L7 用の cookie(今回は monkey)を持っている場合は, その cookie も同時に受け取ります. 2. UltraMonkey-L7 がリクエストを解析し,リアルサーバを決定する 上記 cookie を持っている場合は,そのリアルサーバに リクエストを転送する.(※) 持っていない場合はスケジューラに渡し,リアルサーバを決定する. ※ リアルサーバの死活に関わらず,cookie の内容をもとに リアルサーバへリクエストを転送します. これが今回の接続エラーの原因と考えます. 3. リアルサーバからレスポンスを受信する 受け取ったレスポンスに UltraMonkey-L7 用の cookie が含まれている 場合は何もしない. 含まれていない場合は,今回割り振ったリアルサーバの情報を 数値化し,指定したエントリ(今回は monkey)を作成し, Set-Cookie を追加する. 4. クライアントにレスポンスを転送する クライアントに,リアルサーバから返されたレスポンスを転送する. となります. もし最初に web1 に転送された場合は,ブラウザの cookie リストには web1 を示す情報が入っており,実際に web1 がダウンしているにもかかわらず web1 にリクエストが転送されてしまいます. これが Windows 上で表示できない直接の原因と考えられます. curl で正常に web2 からページが取得できた理由ですが,これは curl が cookie をつけてリクエストを投げなかったために UltraMonkey-L7 はリアルサーバの割り当てをスケジューラに任せ, スケジューラは割り当て可能なリアルサーバ(今回は web2)を 割り当てたことになります. # wget にも同じ事が言えます curl でも Windows と同様の事象を起こさせるには, 1. web1 をダウンさせる l7vsadm で web2 のみ表示されることを確認する. 2. 「 curl -c cookie.txt http://msc-web:8089/index.html 」 を実行 cookie.txt には,おそらく monkey=036940409620480 という エントリが入っている. 3. web2 をダウンさせる l7vsadm で振り分け先が存在しないことを確認する. 4. web1 を回復させる l7vsadm で web1 のみ表示されることを確認する. 5. 「 curl -b cookie.txt http://msc-web:8089/index.html 」 を実行 接続が失敗する. この手順を踏むと,ページが取得できない旨のエラーが発生します. 以上,非常に簡単な説明となってしまいましたが,ご参考になれば幸いです. なお,l7vs はバグ修正や内部処理の見直しが行われた 0.6.0-0 が リリースされていますので,こちらをお使いください. http://prdownloads.sourceforge.jp/ultramonkey-l7/25375/l7vs-0.6.0-0.tar.gz 今後ともよろしくお願い致します. ------------------------------------------------------------- Shinya TAKEBAYASHI E-mail(Office) : takebayashi.shinya @ nttcom.co.jp E-mail(private): makoto @ kanon-net.jp GPG ID: FFD20D1F GPG FP: 7B5B E0FC B785 7457 683C 47D6 5564 DDDD FFD2 0D1F ------------------------------------------------------------- *** j_terauchi wrote in message <000001c7cd24$016a5110$ c703a8c0 @ TERAUCHI> *** Subject: [Ultramonkey-l7-users 66] Ultramonkey-l7における、「高可用 性、不可分散の効率化」でのエラー *** Date: Mon, 23 Jul 2007 21:21:26 +0900 > ■Ultramonkey-l7-usersの皆様 > > お世話になります。寺内と申します。 > > Ultramonkey-l7を実装するにあたり、 > Linux Director兼実サーバを2台構成でテストしています。 > > ○仮想IP > msc-web(192.168.4.20) > ○サーバ1 > web1(192.168.4.21) > ○サーバ2 > web2(192.168.4.22) > ※サーバ1、2共にサービスはhttpdが起動しています。 > > 基本的な各種設定は、「UltraMonkey-L7 インストールマニュアル v1.3」及び > 「高可用性、不可分散の効率化」トポロジを参考にしております。 > > ▼/etc/ha.d/ha.cf > debugfile /var/log/ha-debug > logfile /var/log/ha-log > logfacility local0 > keepalive 2 > deadtime 30 > warntime 10 > initdead 120 > udpport 694 > mcast eth0 225.0.0.1 694 1 0 > ucast eth0 192.168.4.22 > auto_failback off > node web1 > node web2 > apiauth lha-snmpagent uid=root > > ▼/etc/ha.d/haresources > web1 192.168.4.20 IPaddr::192.168.4.20/24/eth0:0 l7directord:: > > ▼/etc/ha.d/authkeys > auth 1 > 1 crc > > ▼/etc/ha.d/conf/l7directord.cf > # Global Directives > checktimeout=4 > checkinterval=3 > autoreload=yes > logfile="/var/log/l7directord.log" > quiescent=yes > # A sample virual with a fallback that will override the gobal setting > # Virtual Server for HTTP > virtual=192.168.4.20:8089 > real=192.168.4.21:80 masq > real=192.168.4.22:80 masq > module=cinsert --cookie-name 'monkey' > #fallback=127.0.0.1:80 masq > service=http > request="index.html" > receive="Test Page" > scheduler=rr > protocol=tcp > checktype=negotiate > quiescent=no > > # Virtual Server for HTTPS > virtual=192.168.4.20:8443 > real=192.168.4.21:443 masq > real=192.168.4.22:443 masq > module=cinsert --cookie-name 'monkey' > #fallback=127.0.0.1:80 masq > service=https > request="index.html" > receive="Test Page" > scheduler=rr > protocol=tcp > checktype=negotiate > quiescent=no > > 上記の状態で、サーバ1→サーバ2の順に、 > l7vsd,l7syncd,l7Heartbeatを起動 > > サーバ1(web1)から、l7vsadm -L コマンドを実行すると、 > > Layer-7 Virtual Server version 0.5.0-3 > Prot LocalAddress:Port Scheduler ProtoMod > -> RemoteAddress:Port Forward Weight ActiveConn InactConn > TCP msc-web:8089 cinsert rr > -> web1:http Masq 1 0 0 > -> web2:http Masq 1 0 0 > TCP msc-web:8443 cinsert rr > -> web1:https Masq 1 0 0 > -> web2:https Masq 1 0 0 > ※http,https共に、仮想カーネルテーブルの設定を実サービスのポート番号 > と同一にすると、以下のエラーとなり、テーブル追加ができませんでした。 > 〜/var/log/l7directord.logの抜粋 > [Mon Jul 23 20:08:38 2007|l7directord] system(/usr/sbin/l7vsadm -A -t > 192.168.4.20:80 -m cinsert --cookie-name 'monkey' -s rr ) failed: > [Mon Jul 23 20:08:38 2007|l7directord] Added virtual server: 192.168.4. 20:80 > cinsert --cookie-name monkey > [Mon Jul 23 20:08:38 2007|l7directord] system(/usr/sbin/l7vsadm -A -t > 192.168.4.20:443 -m cinsert --cookie-name 'monkey' -s rr ) failed: > Inappropriate ioctl for device > [Mon Jul 23 20:08:38 2007|l7directord] Added virtual server: > 192.168.4.20:443 cinsert --cookie-name monkey > その為、http,https用に別ポート番号を割り当てています。 > > ◇別のホスト(同一ネットワーク)からの接続テストの結果 > [root @ db1 ~]# curl http://msc-web:8089/index.html > > > > > Test Page > > > > > Test Page(Secondary:192.168.4.22) > > > [root @ db1 ~]# curl http://msc-web:8089/index.html > > > > > Test Page > > > > > Test Page(Primary:192.168.4.21) > > > > ◇アクセス毎に、サーバ1、サーバ2に分散されています。 > 又、Windowsクライアントから、http://msc-web:8089/index.html > にアクセスすると、該当ページが正常に表示されます。 > > ◆少し、長くなりましたが、この状態で、サーバ1のhttpdサービスを停止 > すると、Windowsクライアントからのアクセスが、「ページを表示できません。 」 > となってしまいます。 > ※但し、上記curl のテストでは、サーバ2のテストページが取得できていま す。 > > サーバ1(web1)から、l7vsadm -L コマンドを実行すると、 > > Layer-7 Virtual Server version 0.5.0-3 > Prot LocalAddress:Port Scheduler ProtoMod > -> RemoteAddress:Port Forward Weight ActiveConn InactConn > TCP msc-web:8089 cinsert rr > -> web2:http Masq 1 0 0 > TCP msc-web:8443 cinsert rr > -> web2:https Masq 1 0 0 > > となっています。 > ※サーバ1のHeartbeatを停止した際には、サーバ2にIPアドレスが引き継が れる > ことも確認できています。 > > 非常に長文になりましたが、解決の糸口が見つからず、ご助力頂けたらと思い > メールさせて頂きました。 > よろしくお願い致します。 > > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ > > 寺内 潤(Terauchi Jun) > > E-Mail:j_terauchi @ msc-inc.co.jp > > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ > > _______________________________________________ > Ultramonkey-l7-users mailing list > Ultramonkey-l7-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-users