云计算百科
云计算领域专业知识百科平台

企业级WEB应用服务器Tomcat

什么是Tomcat?

     Tomcat 是一款广泛使用的 开源 Java Web 服务器和 Servlet 容器,主要用于运行 Java 编写的 Web 应用程序。它由 Apache 软件基金会开发并维护,因轻量、稳定、易用等特点,成为 Java Web 开发领域的主流工具之一。

Tomcat 的核心功能

  • Servlet 容器

    Servlet 是 Java 用于处理 Web 请求的组件,Tomcat 提供了 Servlet 的运行环境,能够接收客户端(如浏览器)的 HTTP 请求,调用对应的 Servlet 进行处理,并将结果返回给客户端。

  • JSP 容器

    JSP(Java Server Pages)是一种嵌入 Java 代码的网页技术,Tomcat 可以将 JSP 文件编译为 Servlet 并执行,实现动态网页内容的生成。

  • HTTP 服务器

    虽然 Tomcat 主要作为容器,但它也内置了简单的 HTTP 服务器功能,能够直接处理静态资源(如 HTML、CSS、图片等)的请求,无需依赖其他 Web 服务器(如 Nginx、Apache HTTP Server)。不过在生产环境中,常将 Tomcat 与 Nginx 配合使用(Nginx 处理静态资源和反向代理,Tomcat 处理动态请求),以提高性能和安全性。

  • Tomcat 的应用场景

    • 开发环境:Java 开发者在本地调试 Web 应用时,常用 Tomcat 作为服务器。

    • 中小型 Web 应用部署:对于访问量不大的企业网站、内部系统等,Tomcat 可直接作为独立服务器运行。

    • 集群部署:通过负载均衡(如 Nginx 反向代理)将多台 Tomcat 组成集群,提高大型应用的并发处理能力和可用性。

    本次讨论的就是tomcat与nginx结合作为集群部署中的服务器,处理动态资源。

    安装Tomcat

    1.安装java环境

    #安装java
    [root@tomcatA bin]# dnf install java-1.8.0-openjdk.x86_64 -y
    #查看java版本
    [root@tomcatB bin]# java -version

    2.安装并启动tomcat

    [root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz
    [root@tomcatA ~]# mv apache-tomcat-9.0.107.tar.gz /usr/local/tomcat
    #查看tomcat相关目录和文件
    [root@tomcatA tomcat]# ls
    bin conf lib logs README.md RUNNING.txt webapps
    BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
    [root@tomcatA tomcat]# cd /usr/local/tomcat/bin/
    #启动tomcat
    [root@tomcatA bin]# ./startup.sh
    [root@tomcatA bin]# netstat -antlupe | grep java
    tcp6 0 0 :::8080 :::* LISTEN 1001 85735 35805/java
    #关闭tomcat
    [root@tomcatA bin]# ./shutdown.sh

    目录结构

    目录 说明
    ——————————————————-
    bin 服务启动、停止等相关程序和文件
    conf 配置文件
    lib 库目录
    logs 日志目录
    webapps 应用程序,应用部署目录,相当于nginx的默认发布目录
    work jsp 编译后的结果文件,建议提前预热访问

     4.访问tomcat默认发布文件

    生成启动文件

    1.生成tomat的主配置文件

    [root@tomcatA bin]# vim /usr/local/tomcat/conf/tomcat.conf
    JAVA_HOME=/etc/alternatives/jre/

    #如何去寻找JAVA_HOME参数
    [root@tomcatA ~]# which java
    /usr/bin/java
    [root@tomcatA ~]# ll /usr/bin/java
    lrwxrwxrwx 1 root root 22 Jul 30 10:54 /usr/bin/java -> /etc/alternatives/java
    [root@tomcatA ~]# ll /etc/alternatives/jre

    2.生成启动文件

    [root@tomcatA ~]# vim /lib/systemd/system/tomcat.service
    [Unit]
    Description=Tomcat
    #After=syslog.target network.target remote-fs.target nss-lookup.target
    After=syslog.target network.target

    [Service]
    Type=forking
    EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
    ExecStart=/usr/local/tomcat/bin/startup.sh
    ExecStop=/usr/local/tomcat/bin/shutdown.sh
    PrivateTmp=true
    User=tomcat
    Group=tomcat

    [Install]
    WantedBy=multi-user.target

    3.创建tomcat用户去管理启动文件

    #创建非交互且不创建家目录的用户去管理启动文件
    [root@tomcatA ~]# useradd -s /sbin/nologin -M tomcat
    #设定tomcat的软件安装目录权限
    [root@tomcatA ~]# chown tomcat:tomcat /usr/local/tomcat/ -R

    4.用启动脚本开始服务

    [root@tomcatA ~]# systemctl daemon-reload
    [root@tomcatA ~]# systemctl enable –now tomcat

    nginx反向代理tomcat

    1.tomcat常见部署方式

    在生产环境中,常将 Tomcat 与 Nginx 配合使用(Nginx 处理静态资源和反向代理,Tomcat 处理动态请求),以提高性能和安全性。以下是tomcat常用的部署方式。

    2.单机反向代理

     不做负载均衡只做反向代理

    1.安装nginx

    #安装nginx并启动
    [root@webserver ~]# dnf install nginx -y
    [root@webserver ~]# systemctl enable –now nginx

    2.在tomcat上生成测试文件

    [root@tomcatA ~]# mv test.jsp /usr/local/tomcat/webapps/ROOT/

    3.配置nginx实现反向代理

    #编辑子配置文件,使用location + 正则表达式来指向访问jsp结尾的文件,proxy_pass代理指向到tomcat上
    [root@webserver ~]# vim /etc/nginx/conf.d/vhosts.conf
    [root@webserver ~]# nginx -t
    [root@webserver ~]# nginx -s reload

     4.在浏览器上测试

    3.反向代理多机

    反向代理+负载均衡

    1.后端两台tomcat主机都要生成测试文件

    [root@tomcatA ~]# mv test.jsp /usr/local/tomcat/webapps/ROOT/
    [root@tomcatB ~]# mv test.jsp /usr/local/tomcat/webapps/ROOT/

    2.在nginx子配置文件添加upstream模块实现负载均衡

    [root@tomcatA ~]# vim /usr/local/tomcat/conf/tomcat.conf

     3.测试

    tomcat的session保持

    1.Memcached

    Memcached 是一款高性能的分布式内存对象缓存系统,主要用于减轻数据库负载、提高动态 Web 应用的响应速度。它通过将频繁访问的数据存储在内存中,让应用可以快速读取,避免频繁查询数据库,从而提升整体性能。

    Memcached 的核心特点

  • 内存存储

    数据完全存储在内存中,读写速度远快于磁盘(数据库通常依赖磁盘存储),适合缓存频繁访问的 “热点数据”(如用户会话、商品信息、查询结果等)。

  • 分布式架构

    支持多服务器部署,通过哈希算法将数据分散到不同节点,实现负载均衡和横向扩展,避免单节点瓶颈。

  • 简单键值存储

    以 键(Key)- 值(Value) 形式存储数据,键最大为 250 字节,值默认最大为 1MB(可配置),不支持复杂数据结构(如关系型数据库的表、索引)。

  • 过期策略

    每个键值对可设置过期时间(TTL,Time-To-Live),过期后自动删除,释放内存空间;当内存不足时,采用 LRU(最近最少使用) 算法淘汰旧数据。

  • 无持久化

    数据仅存于内存,不写入磁盘,服务器重启后数据会丢失,因此不适合存储需要持久化的数据(通常与数据库配合使用,作为 “缓存层”)。

  • 轻量级协议

    使用简单的文本协议(如 set get delete 等命令),支持多种编程语言(Java、Python、PHP、Go 等)的客户端。

  • Memcached 的工作流程

    • 应用需要读取数据时,先查询 Memcached:

      1.若数据存在(缓存命中),直接从内存返回,速度极快。

      2.若数据不存在(缓存未命中),则查询数据库,将结果写入 Memcached 后返回给应用(下次可直接从缓存读取)。

    • 当数据更新时,需同步更新或删除 Memcached 中的旧数据,避免 “缓存不一致” 问题。

    2.msm介绍

    msm(memcached session manager)提供将Tomcat的session临时缓存保持到memcached实现高可用,避免提交数据时tomcat服务器宕机,导致提交过的数据丢失。

    tomcat通过把配置jar包放入配置文件的lib目录下读取,实现访问memcached,达到seeion保持。

    原理是提交数据时将数据临时缓存到memcached中,tomcat服务器读取memcached的缓存数据,默认使用交叉存储。

    3.实现session保持

    1.下载memcache并更改监听IP

    [root@tomcatA ~]# dnf install memcache -y
    [root@tomcatA ~]# cat /etc/sysconfig/memcached
    PORT="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS="-l 0.0.0.0,::1"#更改监听IP为0.0.0.0使所有主机都能访问memcache缓存键值
    #更改完配置文件后重启memcache
    [root@tomcatA ~]# systemctl restart memcached.service
    #同理另一台tomcat主机也是这样配置

    2.配置jar包

    配置的jar包是管理tomcat服务器与memcache会话保持的jar包,方式为交叉管理

    #这是从Github托管tomcat会话保持到memcache的交叉管理的jar包
    [root@tomcatA jar]# ls
    asm-5.2.jar memcached-session-manager-2.3.2.jar msm-kryo-serializer-2.3.2.jar spymemcached-2.12.3.jar
    kryo-3.0.3.jar memcached-session-manager-tc9-2.3.2.jar objenesis-2.6.jar
    kryo-serializers-0.45.jar minlog-1.3.1.jar reflectasm-1.11.9.jar
    #将管理jar包放入tomcat的lib/目录
    [root@tomcatA ~]# mv jar/* /usr/local/tomcat/lib/
    #重启tomcat读取配置
    [root@tomcatA lib]# systemctl restart tomcat.service

     3.修改tomcat配置文件

    [root@tomcatB ~]# vim /usr/local/tomcat/conf/context.xml
    <Context>
    ……
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
    failoverNodes="n2"#由于是交叉存储,这里填与主机相同的节点
    requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
    </Context>
    #同理在另一台tomcat上也要配置

    4.测试提交表单时,后端tomcat主机发生宕机轮询到另一台tomcat保证提交表单数据不丢失

    #模拟故障宕机
    [root@tomcatA ~]# systemctl stop tomcat.service

     当配置了memcache缓存后

    #模拟故障宕机
    [root@tomcatA ~]# systemctl stop tomcat.service

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 企业级WEB应用服务器Tomcat
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!