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