文章目录
Tomcat会话保持
1、代理服务器配置
- 安装nginx服务(地址:192.168.10.11)
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心
yum install -y epel-release.noarch
#安装yum额外源
yum install -y nginx
#安装nginx
systemctl start nginx
#开启nginx服务
systemctl status nginx
#查看nginx服务状态
#修改配置文件
vim /etc/nginx/nginx.conf
upstream tomcat {
server 192.168.10.12:8080;
server 192.168.10.13:8080;
}
#在http模块下添加upstream,负载均衡
location ~* \.jsp$ {
proxy_pass http://tomcat;
}
#在server模块下添加location,反向代理
nginx -t
#检查语法
nginx -s reload
#重新加载配置文件
2、web服务器配置
- 安装tomcat(web1地址:192.168.10.12)
- 安装tomcat(web2地址:192.168.10.13)
web1和web2相同配置
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心
(1)部署jdk
#将需要的jdk二进制包上传
tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local
#将二进制包解压到/usr/local目录
cd /usr/local/
#切换目录
ln -s jdk1.8.0_291/ jdk
#做软连接
#修改环境变量
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
. /etc/profile.d/jdk.sh
#运行
java -version
#查看版本
(2)安装tomcat
#将需要的tomcat二进制包上传
tar xf apache-tomcat-9.0.16.tar.gz
#解压到指定目录
cp -r apache-tomcat-9.0.16 /usr/local/
#复制
cd /usr/local
#切换目录
ln -s apache-tomcat-9.0.16/ tomcat
#做软连接
useradd -M -s /sbin/nologin tomcat
#新建用户
chown tomcat:tomcat /usr/local/tomcat/ -R
#修改属主和属组
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
#重新加载配置
systemctl start tomcat
#开启服务
systemctl status tomcat
#查看tomcat服务状态
cd /usr/local/tomcat/webapps/ROOT
#切换目录
mv index.jsp index.jsp.bak
#改名
#编辑或者上传Java测试脚本,随机生成sessionID
cat index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<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>
- web1服务器配置(地址:192.168.10.12)
- web2服务器配置(地址:192.168.10.13)
- 访问验证
192.168.10.11/index.jsp
#使用主机访问,每刷新一次,sessionID会发生改变
3、会话保持
3.1 方法一:修改代理服务器配置(nginx)
#修改配置文件
vim /etc/nginx/nginx.conf
hash $remote_addr;
#在upstream模块下添加此行配置内容($remote_addr表示存放客户端的地址)
nginx -t
#检查语法
nginx -s reload
#重新加载配置文件
- 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID不会再发生改变,实现会话绑定
#这种方法有缺陷,会话实现绑定之后,web服务器也不会发生改变,会永远绑定在该web服务器上
3.2 方法二:修改web服务器配置(tomcat)
- 适用于后端服务器比较少的场景
访问官方文档,查看需要添加的配置文件
#官方文档
https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html
#在配置文件/usr/local/tomcat/conf/server.xml中只需要将Receiver里面的address修改为本机的ip地址,除此之外不需要修改,粘贴到配置文件中即可
For the impatient
The following is the default cluster configuration:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
#此处修改为本机的ip地址
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
#在配置文件/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中添加<distributable/>配置内容
Cluster Basics
Make sure your web.xml has the <distributable/> element
#如果使用web.xml,需要添加<distributable/>功能
- 查看官方文档
修改tomcat服务配置
cd /usr/local/tomcat/conf
#切换目录
#修改配置文件
vim server.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.10.12"
#address="192.168.10.13"
#修改为本机的ip地址
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
cd /usr/local/tomcat/webapps/ROOT/WEB-INF
#切换目录
#修改配置文件
vim web.xml
</description>
<distributable/>
#在此处添加此行配置内容
</web-app>
systemctl restart tomcat
#重启服务
- web1服务器配置(地址:192.168.10.12)
- web2服务器配置(地址:192.168.10.13)
- 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID保持不变,实现会话绑定,web服务器依旧切换