【Apache】【Tomcat 】 Apache - Tomcat で、ロードバランシング

はじめに

 * 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 restart
1台目の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]]


関連記事

Tomcat】server.xmlの設定を動的に変更する

http://blogs.yahoo.co.jp/dk521123/36723742.html

Linux】【TomcatTomcat 8.5 のインストール

http://blogs.yahoo.co.jp/dk521123/36706185.html

Linux】【Tomcat】 単一Tomcat で複数のインスタンスを動かす

http://blogs.yahoo.co.jp/dk521123/36706243.html

Tomcat】【ApacheTomcatApache を連携させる ~設定 / Linux 編~

http://blogs.yahoo.co.jp/dk521123/36072244.html

Tomcatのセッション永続化 ~ セッション レプリケーション / 知識編 ~

http://blogs.yahoo.co.jp/dk521123/33726907.html

Tomcatのセッション永続化 ~ セッション レプリケーション / JDBCManager・MySQL編 ~

http://blogs.yahoo.co.jp/dk521123/36698011.html