このセクションでは、 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]#