このセクションでは、 Tomcat のセッションを Redis に保存する方法について紹介します。 Redis にセッションを保存することで複数の Tomcat でセッションを共有することができるため、 Tomcat のクラスタリング構成を構築することができます。

Tomcat のセッションを Redis へ保存するために必要となるパッケージをダウンロードします。

[root@java-1 ~]# wget -c https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/3.0/tomcat-cluster-redis-session-manager.zip
--2019-01-19 01:31:20--  https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/3.0/tomcat-cluster-redis-session-manager.zip
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/54272419/c31b3f80-f838-11e8-91cd-f4e7b08ae394?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190118T163121Z&X-Amz-Expires=300&X-Amz-Signature=8e2b067d9104f35932ffa4b5bf7adfd009ba9016297017d69d1f25d65f935497&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dtomcat-cluster-redis-session-manager.zip&response-content-type=application%2Foctet-stream [following]
--2019-01-19 01:31:21--  https://github-production-release-asset-2e65be.s3.amazonaws.com/54272419/c31b3f80-f838-11e8-91cd-f4e7b08ae394?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190118T163121Z&X-Amz-Expires=300&X-Amz-Signature=8e2b067d9104f35932ffa4b5bf7adfd009ba9016297017d69d1f25d65f935497&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dtomcat-cluster-redis-session-manager.zip&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.166.27
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.166.27|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 754162 (736K) [application/octet-stream]
Saving to: ‘tomcat-cluster-redis-session-manager.zip’

100%[======================================>] 754,162      131KB/s   in 6.9s   

2019-01-19 01:31:29 (107 KB/s) - ‘tomcat-cluster-redis-session-manager.zip’ saved [754162/754162]

[root@java-1 ~]# 

ダウンロードした ZIP ファイルを解凍します。

[root@java-1 ~]# unzip tomcat-cluster-redis-session-manager.zip 
Archive:  tomcat-cluster-redis-session-manager.zip
   creating: tomcat-cluster-redis-session-manager/
  inflating: tomcat-cluster-redis-session-manager/.DS_Store  
   creating: __MACOSX/
   creating: __MACOSX/tomcat-cluster-redis-session-manager/
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/._.DS_Store  
   creating: tomcat-cluster-redis-session-manager/lib/
  inflating: tomcat-cluster-redis-session-manager/lib/commons-logging-1.2.jar  
   creating: __MACOSX/tomcat-cluster-redis-session-manager/lib/
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/lib/._commons-logging-1.2.jar  
  inflating: tomcat-cluster-redis-session-manager/lib/tomcat-cluster-redis-session-manager-3.0.jar  
  inflating: tomcat-cluster-redis-session-manager/lib/jedis-2.9.0.jar  
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/lib/._jedis-2.9.0.jar  
  inflating: tomcat-cluster-redis-session-manager/lib/commons-pool2-2.4.2.jar  
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/lib/._commons-pool2-2.4.2.jar  
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/._lib  
  inflating: tomcat-cluster-redis-session-manager/readMe.txt  
   creating: tomcat-cluster-redis-session-manager/conf/
  inflating: tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties  
  inflating: __MACOSX/tomcat-cluster-redis-session-manager/._conf  
  inflating: __MACOSX/._tomcat-cluster-redis-session-manager  
[root@java-1 ~]# 

解凍したフォルダ内( tomcat-cluster-redis-session-manager/lib/ )へ移動します。

[root@java-1 ~]# cd tomcat-cluster-redis-session-manager/lib/

[root@java-1 lib]# ls commons-logging-1.2.jar jedis-2.9.0.jar commons-pool2-2.4.2.jar tomcat-cluster-redis-session-manager-3.0.jar [root@java-1 lib]#

必要なパッケージを、tomcat がインストールされたディレクトリにある lib フォルダ( /usr/local/tomcat/lib/ )にコピーします。

[root@java-1 lib]# cp -rp commons-logging-1.2.jar commons-pool2-2.4.2.jar jedis-2.9.0.jar tomcat-cluster-redis-session-manager-3.0.jar /usr/local/tomcat/lib/
[root@java-1 lib]# 

コピーしたパッケージファイルのアクセス権と所有権を Tomcat 起動ユーザーに変更します。

[root@java-2 lib]# cd /usr/local/tomcat/lib/
[root@java-2 lib]# 

[root@java-1 lib]# chown -R tomcat:tomcat commons-logging-1.2.jar commons-pool2-2.4.2.jar jedis-2.9.0.jar tomcat-cluster-redis-session-manager-3.0.jar [root@java-1 lib]#

アクセス権と所有権が変更されていることを確認します。

[root@java-1 lib]# ls -la
total 9644
drwxr-x---. 2 tomcat tomcat    4096 Jan 19 01:34 .
drwxr-xr-x. 9 tomcat tomcat     220 Dec 30 19:33 ..
-rw-r-----. 1 tomcat tomcat   12965 Dec  7 06:15 annotations-api.jar
-rw-r-----. 1 tomcat tomcat   54240 Dec  7 06:15 catalina-ant.jar
-rw-r-----. 1 tomcat tomcat  121085 Dec  7 06:15 catalina-ha.jar
-rw-r-----. 1 tomcat tomcat 1662007 Dec  7 06:15 catalina.jar
-rw-r-----. 1 tomcat tomcat   78151 Dec  7 06:15 catalina-storeconfig.jar
-rw-r-----. 1 tomcat tomcat  342791 Dec  7 06:15 catalina-tribes.jar
-rwx------. 1 tomcat tomcat   61829 Jul 21  2017 commons-logging-1.2.jar
-rwx------. 1 tomcat tomcat  111969 Jul 20  2017 commons-pool2-2.4.2.jar
-rw-r-----. 1 tomcat tomcat 2805152 Dec  7 06:15 ecj-4.9.jar
-rw-r-----. 1 tomcat tomcat   87480 Dec  7 06:15 el-api.jar
-rw-r-----. 1 tomcat tomcat  167494 Dec  7 06:15 jasper-el.jar
-rw-r-----. 1 tomcat tomcat  557836 Dec  7 06:15 jasper.jar
-rw-r-----. 1 tomcat tomcat   27900 Dec  7 06:15 jaspic-api.jar
-rwx------. 1 tomcat tomcat  553762 Jul 20  2017 jedis-2.9.0.jar
-rw-r-----. 1 tomcat tomcat   63165 Dec  7 06:15 jsp-api.jar
-rw-r-----. 1 tomcat tomcat  282509 Dec  7 06:15 servlet-api.jar
-rw-r-----. 1 tomcat tomcat   11228 Dec  7 06:15 tomcat-api.jar
-rwx------. 1 tomcat tomcat  104910 Dec  5 06:13 tomcat-cluster-redis-session-manager-3.0.jar
-rw-r-----. 1 tomcat tomcat  849683 Dec  7 06:15 tomcat-coyote.jar
-rw-r-----. 1 tomcat tomcat  307433 Dec  7 06:15 tomcat-dbcp.jar
-rw-r-----. 1 tomcat tomcat   64839 Dec  7 06:15 tomcat-i18n-de.jar
-rw-r-----. 1 tomcat tomcat   88672 Dec  7 06:15 tomcat-i18n-es.jar
-rw-r-----. 1 tomcat tomcat  153983 Dec  7 06:15 tomcat-i18n-fr.jar
-rw-r-----. 1 tomcat tomcat  102238 Dec  7 06:15 tomcat-i18n-ja.jar
-rw-r-----. 1 tomcat tomcat  106740 Dec  7 06:15 tomcat-i18n-ko.jar
-rw-r-----. 1 tomcat tomcat   49548 Dec  7 06:15 tomcat-i18n-pt-BR.jar
-rw-r-----. 1 tomcat tomcat   38647 Dec  7 06:15 tomcat-i18n-ru.jar
-rw-r-----. 1 tomcat tomcat   95919 Dec  7 06:15 tomcat-i18n-zh-CN.jar
-rw-r-----. 1 tomcat tomcat  148743 Dec  7 06:15 tomcat-jdbc.jar
-rw-r-----. 1 tomcat tomcat   36029 Dec  7 06:15 tomcat-jni.jar
-rw-r-----. 1 tomcat tomcat  168050 Dec  7 06:15 tomcat-util.jar
-rw-r-----. 1 tomcat tomcat  211039 Dec  7 06:15 tomcat-util-scan.jar
-rw-r-----. 1 tomcat tomcat  230192 Dec  7 06:15 tomcat-websocket.jar
-rw-r-----. 1 tomcat tomcat   38021 Dec  7 06:15 websocket-api.jar
[root@java-1 lib]#

redis-data-cache.propertiesファイルを、tomcat がインストールされたディレクトリにある conf フォルダ( /usr/local/tomcat/conf/ )にコピーします。

[root@java-2 lib]# cd /root/tomcat-cluster-redis-session-manager/conf/
[root@java-2 conf]#

[root@java-1 conf]# cp -rp redis-data-cache.properties /usr/local/tomcat/conf/ [root@java-1 conf]#

コピーした redis-data-cache.propertiesファイルのアクセス権と所有権を Tomcat 起動ユーザーに変更します。

[root@java-1 conf]# chown -R tomcat:tomcat /usr/local/tomcat/conf/redis-data-cache.properties 
[root@java-1 conf]# 

コピーした redis-data-cache.propertiesファイルを編集し、Redis への接続設定をします。

[root@java-1 conf]# vi /usr/local/tomcat/conf/redis-data-cache.properties 

redis.hosts で 接続する Redis の IPアドレスを指定します。ここでは、Redis サーバーの IPアドレスは、192.168.24.199 としていますので、適宜変更して下さい。

redis.hosts=127.0.0.1:6379

redis.hosts=192.168.24.199:6379

context.xml 設定ファイル( /usr/local/tomcat/conf/context.xml )を編集し、以下設定をします。

[root@java-1 conf]# vi /usr/local/tomcat/conf/context.xml

以下設定を <Context> 〜 </Context> 内に追記します。

    <Valve className="tomcat.request.session.redis.SessionHandlerValve" />
    <Manager className="tomcat.request.session.redis.SessionManager" />

web.xml 設定ファイル( /usr/local/tomcat/conf/web.xml  )を編集し、以下設定をします。

[root@java-1 conf]# vi /usr/local/tomcat/conf/web.xml 

セッションの有効期限を環境に合わせて変更します。

<session-timeout>30</session-timeout>
↓
<session-timeout>1440</session-timeout>

redis サービスを再起動します。

■ 再起動
[root@java-1 conf]# systemctl restart tomcat

■ 起動状態の確認 
[root@java-1 conf]# systemctl status tomcat
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sun 2019-01-20 00:11:24 JST; 1h 1min ago
  Process: 30922 ExecStop=/usr/local/tomcat/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 30954 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 30954 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tomcat.service
           ├─30970 /usr/bin/java -Djava.util.logging.config.file=/usr/local/t...
           └─32018 java -classpath /usr/local/tomcat/webapps/knowledge/WEB-IN...

Jan 20 00:11:24 java-1.novalocal systemd[1]: Starting Apache Tomcat 9...
Jan 20 00:11:24 java-1.novalocal systemd[1]: Started Apache Tomcat 9.
[root@java-1 conf]#