[Ultramonkey-l7-users 69] Re: Ultramonkey-l7における、「高可用性、不可分散の効率化」でのエラー

アーカイブの一覧に戻る

j_terauchi j_terau****@msc-i*****
2007年 7月 24日 (火) 10:40:31 JST


竹林 様

 寺内です。
 早速の返信、ありがとうございます。

 Cookie insert モードで設定した場合についての動作、確認致しました。
(気が付かなかったのがお恥ずかしい)
 セッション情報については、実サーバ側でCookie情報を付与する形式にするか、も
う少し検討したいと
思います。

今後とも、よろしくお願い致します。
ありがとうございました。

 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 寺内 潤(Terauchi Jun)

 E-Mail:j_terau****@msc-i*****

 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

-----Original Message-----
From: Shinya TAKEBAYASHI [mailto:makot****@kanon*****]
Sent: Monday, July 23, 2007 11:07 PM
To: j_terau****@msc-i*****
Cc: ultra****@lists*****
Subject: Re: [Ultramonkey-l7-users 66] Ultramonkey-l7における、「高可用性、
不可分散の効率化」でのエラー


※ 返信のメールの宛先に 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) : takeb****@nttco*****
E-mail(private): makot****@kanon*****
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
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
>
> <title>Test Page</title>
>
> </head>
>
> <body>
> Test Page(Secondary:192.168.4.22)
> </body>
> </html>
> [root @ db1 ~]# curl http://msc-web:8089/index.html
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
>
> <title>Test Page</title>
>
> </head>
>
> <body>
> Test Page(Primary:192.168.4.21)
> </body>
> </html>
>
> ◇アクセス毎に、サーバ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_terau****@msc-i*****
>
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
>
> _______________________________________________
> Ultramonkey-l7-users mailing list
> Ultra****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-users





Ultramonkey-l7-users メーリングリストの案内
アーカイブの一覧に戻る