Tomcat8.5 基于redis配置session(non-stick)共享

架构图:

一、环境准备

  • 时间同步,确保NTP或Chrony服务正常运行。
  • 防火墙规则
  • 禁用SELinux
  • 四台主机
IP 主机名 服务 软件
10.0.1.8 proxy 调度器 Nginx
10.0.1.17 redis redis Redis
10.0.1.18 t1 tomcat1   Tomcat8、JDK8
10.0.1.28 t2 Tomcat2 Tomcat8、JDK8

 

 

 

 

 

 

 

 

 二、一键安装Tomcat

#!/bin/bash
#Date 2020-12-7
#Author yds
#源码包放在/root目录下
. /etc/init.d/functions
set -e
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local/src"
JDK_PKG="jdk-8u271-linux-x64.tar.gz"
TOMCAT_PKG="apache-tomcat-8.5.50.tar.gz"
DIR=`pwd`


install_jdk(){
tar xvf $DIR/$JDK_PKG -C $JDK_DIR

cd $JDK_DIR && ln -s jdk1.8.* jdk
cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
EOF
. /etc/profile.d/jdk.sh
}

install_tomcat(){
tar xvf $DIR/$TOMCAT_PKG -C $TOMCAT_DIR
cd $TOMCAT_DIR && ln -s apache-tomcat-8.5.50 tomcat
echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
. /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
chown -R tomcat.tomcat $TOMCAT_DIR/tomcat/
cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service && action "安装成功" || action "安装失败"
}

install_jdk
install_tomcat

三、安装并配置Redis(这里redis没有设置密码)

[root@redis ~]#dnf -y install redis
[root@redis ~]#sed -i.bak 's/^bind.*/bind 0.0.0.0/' /etc/redis.conf
[root@redis ~]#systemctl enable --now redis

四、修改tomcat配置指定redis服务器地址,并构建jsp测试页面

[root@t1 ~]#vim /usr/local/src/tomcat/conf/context.xml

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="redis://10.0.1.17:6379"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/path1|/path2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>

[root@t1 ~]#cd /usr/local/src/tomcat/

[root@t1 tomcat]#mkdir -p /data/webapps/ROOT

[root@t1 tomcat]#vi /data/webapps/ROOT/index.jsp

<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website1 </h1>                                                                                                                                                                
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

[root@t1 tomcat]#vi conf/server.xml

...
<Engine name="Catalina" defaultHost="t1.magedu.org" jvmRoute="Tomcat1">
...
<Host name="t1.magedu.org"  appBase="/data/webapps"
            unpackWARs="true" autoDeploy="true">
...

[root@t1 ~]#systemctl restart tomcat

查看日志

[root@t1 ~]#tail -f /usr/local/src/tomcat/logs/catalina.out

- operation timeout: 1000
- node ids: []
- failover node ids: []
- storage key prefix: null
- locking mode: uriPattern:/path1|/path2 (expiration: 5s)
--------
14-Dec-2020 10:14:13.567 INFO [t1.magedu.org-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/data/webapps/ROOT] has finished in [888] ms
14-Dec-2020 10:14:13.573 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
14-Dec-2020 10:14:13.607 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
14-Dec-2020 10:14:13.609 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1005 ms

t2和t1配置相同

[root@t2 ~]#vim /usr/local/src/tomcat/conf/context.xml

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="redis://10.0.1.17:6379"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/path1|/path2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>

[root@t2 tomcat]#mkdir -p /data/webapps/ROOT/

[root@t2 tomcat]#vim /data/webapps/ROOT/index.jsp

<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website2 </h1>                                                                                                                                                                
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

[root@t2 tomcat]#chown -R tomcat.tomcat /data/webapps/ROOT/

[root@t2 ~]#systemctl restart tomcat

五、上传tomcat session管理工具包至/usr/local/src/tomcat/lib目录下

 

六、修改nginx配置(Nginx安装过程比较简单,这里就省略了)

[root@proxy ~]#vi /apps/nginx/conf/nginx.conf

http {
......
upstream tomcat-server {
#ip_hash;
server t1.magedu.org:8080;
server t2.magedu.org:8080;
}
server {
......
location / {
}
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat-server;
}

修改之后重启Nginx

 最后分别重启Redis,Nginx,tomcat服务

访问测试

 

 

 

 

 

 重复刷新页面,可以看到SessionID不变,说明配置成功。

使用redis工具连接redis 查看SessionID

[root@redis ~]#redis-cli 
127.0.0.1:6379> keys *
1) "70ACB6451F7564A4288D8242C8EF0179.Tomcat2"
2) "validity:0E48B447DCA7E79634C19162A188269D.Tomcat2"
3) "validity:70ACB6451F7564A4288D8242C8EF0179.Tomcat2"
4) "5936E7DCEC7E62791C636B013D314DBF.Tomcat1"
5) "0E48B447DCA7E79634C19162A188269D.Tomcat2"
6) "validity:5936E7DCEC7E62791C636B013D314DBF.Tomcat1"
127.0.0.1:6379> get 70ACB6451F7564A4288D8242C8EF0179.Tomcat2
"\x00\x02\x00\\\x00\x00\x01v_\x06\xf2N\x00\x00\x01v_\x06\xf2N\x00\x00\a\b11\x00\x00\x01v_\x06\xf2P\x00\x00\x01v_\x06\xf2\x97\x00(70ACB6451F7564A4288D8242C8EF0179.Tomcat2\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00"
127.0.0.1:6379> 

备注tomcat-cluster-redis-session-manager相关jar包下载地址

链接:https://pan.baidu.com/s/1sMzr-2YlLbq-MO4F0XmxCA
提取码:knf9

posted @ 2020-12-14 11:24  無心的Man  阅读(504)  评论(0编辑  收藏  举报