« 2006年12月 | トップページ | 2007年8月 »

2007.07.20

apache とか tomcat とか

なんか最近さっぱり更新してなかった…。
7月から部署が変わりスタッフ系の部署に配属になったんで、少しは時間的余裕ができるような予感がする今日この頃。

んで、たまりにたまった apache 2.2 とか tomcat 6 関連を備忘録で…。

●tomcat6.0.13
tomcat 6.0.13 + tomcat-native 1.1.10 を入れてみる。
・${CATALINA_HOME}/lib の下に commons とか JDBCドライバーとかを突っ込む
・webapps , logs , conf の中身をそれぞれ webapps.org , logs.org , conf.org を作ってそこにごっそり移動
・webppas の下に tomcat 5.5.x で動いていたものをもってくる
・conf/server.xml でコネクタを ajp コネクタのみにする‥それとポートも8009から18009に変更
・conf/web.xml で servlet の invoker を有効にする
・conf/logging.properties で java.util.logging.ConsoleHandler の定義だけにしてログを catalina.out だけにする
・conf の下に {engine}/{host}/{context}.xml がデフォルトでは存在してないもんで、 conf/Catalina/localhost/xxx.xml を作成し
<Context reloadable="true" />
と書いておく

で起動したらまず起動に数十分かかる…。ログを見るとAPR関連で時間がかかってるみたいなのでマニュアルを見てみると 6.0.x からはSSLがデフォルトでONだそうで、server.xml を見ると
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
との記述が。
この SSLEngine を off にしたらさくっと起動!!

‥と思ったらコンテキストのロードでエラーをかましてる…。
java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged and cannot be loaded by this web application

どうも invoker を使うコンテキストはセキュリティレベルを下げないとダメみたいだ…。
だもんで conf/Catalina/localhost/xxx.xml の記述を
<Context privileged="true" reloadable="true" />
に変更。

んで問題なく動作…。 tomcat 5.5 より気持ち早い気がする‥別に試したわけじゃないけど。

●apache2.2.4
・tomcat との連携
せっかくなんで tomcat との接続を mod_jk ではなく mod_proxy + mod_proxy_ajp にしてみる。
静的なファイルはなるべく tomcat に渡さず apache 側で処理したいので、ProxyPass を使わず mod_rewrite で設定する方法を選択。

conf/extra/httpd-tomcat.conf というファイルを作成し、ディレクトリ関連の設定をした後に
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/(xxx/servlet/.*)$ ajp://localhost:18009/$1 [p,l]
RewriteRule ^/(xxx/.*\.jsp)$ ajp://localhost:18009/$1 [p,l]
</IfModule>
を記述

で問題なく連携してくれました。

・ロードバランサー機能
mod_proxy_balancer で load balance してみる
方針は http リクエスト丸ごと・ajp のみ の2つ考えたんだけど、apacheの処理自体はたいした負荷ではないだろうから ajp をバランシングする方法を選択。
設定は極カンタンでした。

上記の RewriteRule を
RewriteRule ^/(xxx/servlet/.*)$ balancer://cluster/$1 [p,l]
RewriteRule ^/(xxx/.*\.jsp)$ balancer://cluster/$1 [p,l]
に変更

んで conf/extra/httpd-balancer.conf を作成して

ProxyPass ! balancer://cluster stickysession=JSESSIONID nofailover=off maxattempts=100

<Proxy balancer://cluster>
BalancerMember ajp://localhost:18009 retry=1 route=r1 loadfactor=1
BalancerMember ajp://xxx.jp:18009 retry=1 route=r2 loadfactor=1
</Proxy>

stickysession の設定は最初はぜんぜんダメダメだったけど
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
とか
http://www.oki.com/jp/oss/document/tomcat/tomcat-docs-ja/cluster-howto.html
を参考に tomcat を設定
conf/server.xmlをlocalhostサーバーは
<Engine name="Catalina" defaultHost="localhost" jvmRoute="r1">
xxx.jp サーバーは
<Engine name="Catalina" defaultHost="localhost" jvmRoute="r2">
とすると JSESSIONID の文字列の最後に ".r1" とか ".r2"を付加するようになり、無事apacheでちゃんとstickysessionが効くようになりました。

ついでに
<Location /blman>
SetHandler balancer-manager

Order Deny,Allow
Deny from all
Allow from xx.xx.xx.xx
</Location>
も記述しておいてマネージャー画面を見てみたら…よくできてるじゃん。それ魅力。

| | コメント (0) | トラックバック (1)

« 2006年12月 | トップページ | 2007年8月 »