一、Tomcat 安装与基础运行
1. 环境依赖
Tomcat 是 Java 应用,必须先装 JRE 环境才能运行:
bash
yum install java-1.8.0-openjdk.x86_64 -y
2. 解压与目录规划
bash
# 下载解压
tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local
mv /usr/local/apache-tomcat-9.0.115 /usr/local/tomcat
3. 创建专用运行用户(安全规范)
bash
useradd -s /sbin/nologin -M tomcat
chown -R tomcat.tomcat /usr/local/tomcat
4. 注册系统服务(开机自启)
编写 tomcat.service:
bash
[Unit]
Description=Tomcat Server
After=network.target syslog.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/etc/alternatives/jre"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
bash
systemctl daemon-reload
systemctl enable --now tomcat
5. 验证启动
bash
netstat -antlupe | grep 8080
看到 8080 端口监听 说明 Tomcat 启动成功。
二、Nginx 代理 Tomcat(反向代理 + 负载均衡)
1. 单台 Tomcat 代理
把 JSP 请求交给 Tomcat,静态文件 Nginx 直接处理:
bash
server {
listen 80;
server_name app.timinglee.org;
location ~* \.jsp$ {
proxy_pass http://172.25.254.10:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2. 多 Tomcat 负载均衡 + 会话保持
bash
upstream tomcat_servers {
hash $cookie_JSESSIONID; # 会话粘性
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name app.timinglee.org;
location ~* \.jsp$ {
proxy_pass http://tomcat_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. 测试页面 test.jsp(验证节点与 Session)
bash
<%@ page contentType="text/html;charset=UTF-8" %>
当前服务器IP:<%=request.getLocalAddr()%> <br>
SessionID:<%=session.getId()%>
三、Tomcat + Memcached 实现 Session 共享(会话不丢失)
1. 作用
多台 Tomcat 之间 Session 互通
某一台 Tomcat 挂掉,用户会话不失效、不掉线
2. 部署 memcached
两台节点都安装:
bash
dnf install memcached -y
修改配置允许所有 IP 访问:
bash
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0"
启动:
bash
systemctl enable --now memcached
3. 放入 Session 共享 jar 包
将 memcached-session-manager 相关 jar 放入两台 Tomcat 的 lib:
bash
/usr/local/tomcat/lib/
4. 配置 Tomcat context.xml(核心)
第一台 Tomcat:
bash
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(png|jpg|gif|css|js|ico)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
第二台 Tomcat:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(png|jpg|gif|css|js|ico)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
5. 重启 Tomcat
bash
systemctl restart tomcat
6. 验证 Session 共享
- 访问 test.jsp 记录 SessionID
- 关掉其中一台 Tomcat
- 刷新页面,SessionID 不变,说明会话共享成功
(注:一句话记忆:Nginx 做入口分发 → Tomcat 跑 Java 应用 → Memcached 统一存 Session → 高可用、负载均衡、会话不丢失。)