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

はじめに

http://blogs.yahoo.co.jp/dk521123/36708242.html
で、ロードバランサを使って、Tomcat搭載の複数サーバに処理を振り分けるのだが
jvmRouteの値をサーバ台数書き換えるのは、大変なので、
できる限り簡単にデプロイする方法を考える

例:jvmRouteにホスト名を付加させる

ポイント

 * ${HOSTNAME}で、ホスト名を取得可能
 * setenv.sh と CATALINA_OPTS を利用する

設定手順

/usr/local/tomcatにインストールされ、所有者は「tomcat」でインストールされている場合
[1] %CATALINA_BASE%/bin 配下に setenv.sh を作成

# 1-1) setenv.sh を作成
sudo vi /usr/local/tomcat/bin/setenv.sh
# 編集内容は下記「setenv.sh」を参照

# 1-2) 所有者を「tomcat」に変更
sudo chown tomcat:tomcat /usr/local/tomcat/bin/setenv.sh

# 1-3) アクセス権を変更
sudo chmod 750 /usr/local/tomcat/bin/setenv.sh

[2] server.xml を修正

sudo vi /usr/local/tomcat/conf/server.xml
# 編集内容は下記「server.xml」を参照

[3] 動作確認(下記「動作確認用サイト」を参照)

setenv.sh

#!/bin/sh

# その他、任意の VM オプション
CATALINA_OPTS="-DjvmRouteParts=${HOSTNAME}"

server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm_${jvmRouteParts}">

動作確認用サイト

 * 以下のサイトにアクセスし、セッションIDを確認する

 【出力例】[Site 1] session id = E83366C60750614A47D880EC559A4BF2.jvm_localhost.localdomain 
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>


関連記事

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

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