Tomcat 环境搭建与集群实战

一、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 共享

  1. 访问 test.jsp 记录 SessionID
  2. 关掉其中一台 Tomcat
  3. 刷新页面,SessionID 不变,说明会话共享成功

(注:一句话记忆:Nginx 做入口分发 → Tomcat 跑 Java 应用 → Memcached 统一存 Session → 高可用、负载均衡、会话不丢失。)

相关推荐
知已难寻9 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning10 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall10 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii11 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
共享家952711 小时前
408 操作系统第一章
服务器·数据库·windows
云飞云共享云桌面12 小时前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造
paopaokaka_luck12 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
全栈陈序员13 小时前
【Git】从入门到精通(一)—— Git简介:什么是版本控制系统
大数据·git·elasticsearch
墨理学AI14 小时前
虚拟机导致的服务器交换内容占用过大(服务器卡顿)问题 快速解决
运维·服务器
程序猿老A14 小时前
轻量应用服务器怎么搭建个人网站?
服务器