はじめに
* Apache をリバースプロキシとして、バックエンドにTomcatを複数台設置し Apacheのロードバランシングを利用して、Tomcatにリクエストを割り振り、 負荷分散することを考える
構成
+--------+ ajp +----------+ | | <===> | Tomcat A | http | | 8009 +----------+ ==> | Apache | 80 | | ajp +----------+ | | <===> | Tomcat B | +--------+ 18009 +----------+
設定手順
* 以下、設定手順の概要。 [1] Tomcat側の設定 [2] Apache側の設定 【任意設定】 [3] バランサマネージャの設定
[0] 前提条件:複数のTomcatのインストール
* Tomcatは、以下の関連記事で複数台設置しておくhttp://blogs.yahoo.co.jp/dk521123/36706185.html
http://blogs.yahoo.co.jp/dk521123/36706243.html
[1] Tomcat側の設定
[1-1] Stickyセッションを設定するために、 1、2台目のTomcatのserver.xmlを以下の【修正後】のように修正し、 Tomcatを再起動する # 1台目のTomcat sudo vi /usr/local/tomcat/conf/server.xml # 2台目のTomcat sudo vi /usr/local/tomcat18080/conf/server.xml # Tomcatを再起動 service tomcat restart service tomcat18080 restart1台目のTomcatのserver.xml
【修正前】 <Engine name="Catalina" defaultHost="localhost"> 【修正後】 <Engine name="Catalina" defaultHost="localhost">2台目のTomcatのserver.xml
【修正前】 <Engine name="Catalina" defaultHost="localhost"> 【修正後】 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
[2] Apache側の設定
[2-1] ロードバランシングするために、 /etc/httpd/conf.d/【任意】.conf (今回は「examples.conf」)を 以下の「/etc/httpd/conf.d/examples.conf」のようにし、Apacheを再起動する sudo vi /etc/httpd/conf.d/examples.conf # Apacheを再起動 apachectl restart [2-2] 動作確認として、以下の「【動作確認用サイト】sessionExam.jsp」を 対象Tomcatのwebapps/examples配下に置き 「http://localhost/examples/sessionExam.jsp」にブラウザでアクセスする # ファイルを配置 sudo cp ~/sessionExam.jsp /usr/local/tomcat/webapps/examples/ sudo cp ~/sessionExam.jsp /usr/local/tomcat18080/webapps/examples/ # サイトが区別できるように修正 sudo vi /usr/local/tomcat18080/webapps/examples/sessionExam.jsp # 所有者を変更 sudo chown -R tomcat:tomcat /usr/local/tomcat sudo chown -R tomcat:tomcat /usr/local/tomcat18080/etc/httpd/conf.d/demo.conf
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule status_module modules/mod_status.so ProxyRequests off ProxyPass /examples/ balancer://demo/ stickysession=JSESSIONID|jsessionid nofailover=off <Proxy balancer://demo/> BalancerMember ajp://localhost:8009/examples route=jvm1 keepalive=off retry=5 loadfactor=10 connectiontimeout=1 BalancerMember ajp://localhost:18009/examples route=jvm2 keepalive=off retry=5 loadfactor=10 connectiontimeout=1 </Proxy>【動作確認用サイト】sessionExam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Session Exam</title> </head> <body> [Site 1] session id = <%= session.getId() %> <br> <% Integer counter = (Integer)session.getAttribute("counter"); counter = ( counter == null ) ? new Integer(1) : new Integer(counter.intValue() + 1); session.setAttribute("counter",counter); %> counter = <%= session.getAttribute("counter") %><br> Host = <%= java.net.InetAddress.getLocalHost() %><br> </body> </html>
【任意設定】[3] バランサマネージャの設定
以下は任意設定[3-1] バランサマネージャのサポートを有効にするために、/etc/httpd/conf/httpd-proxy.confを 以下の「/etc/httpd/conf/httpd-proxy.conf」のようにし、Apacheを再起動する/etc/httpd/conf/httpd-proxy.conf
<Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from localhost </Location> [3-2] Tomcatを再起動し、ブラウザで以下のURLにアクセス # Tomcatを再起動 service tomcat restart service tomcat18080 restart[[http://localhost/balancer-manager]]
参考文献
http://www.mclnet.co.jp/tech/java/apache-balancer.htmlhttp://montai-garage.sakura.ne.jp/apache2tomcat/
https://thinkit.co.jp/free/compare/14/1/1.html
http://trasis.jp/blog/lab/2008/08/apache-tomcat%E3%81%A7%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3.html